// codeart.ru / Теория программирования / Про opcmon и множественные метрики Форум

Про opcmon и множественные метрики rss подписка

Автор: Evgeniy Sergeev

Большая часть политик Operations Manager for Windows (OMW) направлена на обработку событий представленных текстовыми сообщениями, и лишь небольшая часть политик направлена на обработку событий полученных в результате измерения параметров целевой системы, как правило это измерение параметров производительности. Но есть некоторые подводные камни, которые портят всю малину.

В OMW политики measurement policy имеют возможность получать данные из разных источников, большая часть числовых параметров вытягиваются от счетчиков производительности операционной системы. Но есть возможность обрабатывать и пользовательские значения, полученные из собственных скриптов. Специальный источник данных «External» позволяет обрабатывать числовые значения отправленные через команду opcmon. Грубо говоря, мы просто вставляем в свой скрипт вызов команды opcmon и в параметрах команды указываем имя политики и значение, которое требуется передать. Механизм прозрачный и простой. Добавим сюда возможность сохранять полученные значения в Perfomance database и в итоге у нас появляется возможность рисовать красивые графики производительности для любых данных. Например, в системе оперативного мониторинга ЦБРФ я рисую графики отображающие среднее время обработки и количество электронных сообщений в рамках операционного дня.

Но как всегда есть нюансы, которые портят всю малину. У opcmon есть один большой недостаток — за один вызов данная утилита может передать ровно один параметр. И вроде бы ничего страшного в этом нет, но на самом деле при ближайшем рассмотрении оказывается, что данная ложка дегтя портит целую бочку меда. Итак, в чем проблема?

Когда у нас есть только один параметр, который нужно передать, то нет никаких проблем. Но вот у нас появляется два параметра производительности которые нужно не только фиксировать, но и сравнивать друг с другом. Например, у нас есть два типа электронных сообщений и нужно сравнить объемы обрабатываемых сообщений в течении дня. И вот здесь мы сталкиваемся с проблемой. Оказывается, чтобы добавить пару значений в базу данных Perfomance Manager нужно выполнить запуск opcmon дважды, и данные поступят в БД не синхронно, одна порция данных придет раньше, другая поступит позже. У нас есть значение параметра X в момент t1 и значение параметра Y в момент t2. Возникает вопрос, а какое значение было у Y в момент t1? Т.е. мы не можем сравнить два параметра X и Y в момент t1, так как в одно время мы можем записать только один параметр. Выход из ситуации — интерпалировать значение Y. Допустим у нас есть значение Y в моменты t0 и t2, тогда мы можем предположить какое значение было в параметра Y в момент t1.

Думаю самые догадливые уже поняли в чем проблема, моменты t1 и t2 имеют между собой разницу в доли секунды и интерполяция параметра, который носит характер целого числа (в нашем случае количество сообщений) приводит к тому, что параметр X как положено отображается в виде целого числа, а параметр Y отображается с погрешностью в несколько сотых. Что нафиг портит весь вид. И решить проблему красиво можно было бы если opcmon могла бы записать в момент времени t1 записать в базу два параметра — X и Y. Но она не может. И использовать ее для построения красивых графиков содержащих несколько кривых нельзя.

Выход, конечно же, есть. Например, использовать утилиту ddflog.exe. Но данная утилита нифига не простая и требует уже значительно больших усилий при реализации политик. В итоге, красивое и простое решение становится громоздким и неудобным. Для того чтобы не заморачиваться с ddflog-ом приходится идти на некоторые хитрости. Во-первых, для каждого параметра создавать свой инстанс, во-вторых отказываться от интерполяции значений, вместо этого выбирая поиск наибольшего или наименьшего значения за интервал времени.

Но после таких плясок остается неприятный осадок, ведь как не крути, а изобретение костылей рано или поздно выходит боком. Поэтому ни в одном профессиональном SPI не используется opcmon для фиксации параметров в Perfomance database. А жаль, могло быть действительно красиво, если бы утилита могла передавать несколько значений за раз.

Leave a Reply

« »