Как создать свой кастомный зависимый монитор (Часть 1)
В сегодняшней статье речь пойдет о том, как создать свой кастомный зависимый (dependency) монитор для распределенных приложений (Distributed Application) с нестандартным механизмом передачи состояния.
Для чего это нужно?
Operations Manager имеет достаточно ограниченные возможности для передачи состояния от одного объекта к другому. Передаются такие состояния с помощью зависимых (Dependency) или агрегирующих (Aggregate) мониторов. Агрегирующий монитор может отображать наилучшее или наихудшее состояние нижележащих мониторов. Зависимый монитор, помимо наилучшего и наихудшего состояния, может отображать состояние некоторого процента мониторов:
Наилучшее состояние | Наихудшее состояние |
А как быть в том случае, когда необходима другая логика?
Например, распределенное приложение состоит из 2-х объектов и вы хотите видеть распределенное приложение в статусе Warning, когда один объект вышел из строя, и в статусе Critical, когда оба объекта вышли из строя:
Вот еще один пример: вы добавили в распределенное приложение объекты, которые мониторятся с помощью запечатанных пакетов управления и в них уже записаны состояния мониторов, которые невозможно поменять. Данные объекты не очень критичны и вы хотите, чтобы распределенное приложение было всегда в статусе Warning даже в том случае, когда все объекты находятся в состоянии Critical:
Для таких случаев мы разработали несколько способов, с помощью которых можно расширить стандартную модель передачи состояний. В первой части статьи мы покажем, как это можно осуществить с помощью скрипта. Во второй части мы покажем еще один интересный метод, который использует стандартный модуль.
Итак, первый метод использует PowerShell script-based Unit монитор. Этот монитор анализирует состояние объектов, которые входят в состав распределенного приложения. Скрипт определяет состояние этих объектов и по заданной логике меняет состояние монитора. Логика в данном скрипте очень разнообразна. Можно использовать абсолютные значения, проценты и даже учитывать вес каждого объекта в зависимости от его имени.
В прикрепленном файле - пример пакета управления. В данном пакете монитор направлен на распределенные приложения и на его компоненты. После его установки, в дереве здоровья появится дополнительный монитор «Custom Rollup» для каждого распределенного приложения и его компонент:
По умолчанию, данный монитор отключен и его необходимо включить для каждого распределенного приложения, которое необходимо контролировать данным способом. Остальные зависимые мониторы необходимо выключить, чтобы они не влияли на общее состояние распределенного приложения.
С помощью оверрайдов можно варьировать логикой для каждого распределенного приложения в отдельности.
Основные оверрайды представлены в таблице:
Параметр | Стандартное значение | Допустимые значение | Описание |
ErrorHighThreshold(обязательный) | 100 | >ErrorLowThreshold (если Mode – Percentage или Weight <100) | Максимальное число (процент) связанных объектов в состоянии Critical, при превышении которого, осуществляется переход в состояние Critical |
ErrorLowThreshold(обязательный) | 100 | >0(если Mode – Percentage или Weight <100) | Максимальное число (процент) связанных объектов в состоянии Critical, при превышении которого, осуществляется переход в состояние Warning |
Mode(обязательный) | Absolute | Absolute Percentage Weight | Режим работы. Режим Absolute: все пороги в абсолютном значении. Режим Percentage: все пороги в процентном соотношении. Режим Weight: процентное соотношение с учётом весов. |
WarningHighThreshold(обязательный) | 100 | >WarningLowThreshold(если Mode – Percentage или Weight <100) | Максимальное число (процент) связанных объектов в состоянии Warning, при превышении которого, осуществляется переход в состояние Critical |
WarningLowThreshold(обязательный) | 100 | >0(если Mode – Percentage или Weight <100) | Максимальное число (процент) связанных объектов в состоянии Warning, при превышении которого, осуществляется переход в состояние Warning |
WeightString | NAME1,30;NAME2,40;NAME3,20;NAME4,10; | Строка задающая веса для связанных объектов. Имя объекта должно соответствовать атрибуту Display Name. Сумма весов не должна превышать 100 если список объектов не полный и должна быть равна 100, если указаны все объекты. |
Также следует принять во внимание следующие особенности:
· Расчёт состояния выполняется с помощью скрипта, выполняющегося по умолчанию раз в 5 минут
· Если в параметр Mode имеет значение отличное от Absolute , Percentage или Weight, то принудительно устанавливается значение Absolute
· При расчёте результирующего состояния используются следующие правила:
o Монитор переходит в состояние Critical, если превышен порог ErrorHighThreshold,
WarningHighThreshold или одновременно превышены пороги WarningLowThreshold и
ErrorLowThreshold.
o Монитор переходит в состояние Warning, если превышен один из порогов LowThreshold.
· Если строка WeightString задаёт весы для части объектов, то производится вычисление оставшегося веса, который равномерно распределяется между оставшимися объектами
· Если указан режим Weight, а WeightString не задан – режим принудительно изменяется на Percentage
· В случае если монитор не проходит проверку параметров (в режиме Percentage пороги указаны более 100% , не указан один из обязательных параметров и другие), будет сгенерирован соответствующий Alert, а также сообщение в журнале событий OperationsManager
У этого метода есть некоторые особенности:
· Задержка обновления состояния монитора равна интервалу запуска скрипта;
· При большом количестве распределённых приложений, которые контролируются данным способом, возможна повышенная нагрузка на управляющий сервер;
· В дереве здоровья (Health Explorer) не совсем очевидно, по какой причине монитор перешел в то или иное состояние.
Будем рады услышать комментарии и отзывы.
Данная статья носит информационный характер, ссылки на веб-сайты предоставляются для удобства пользователей. Корпорация Майкрософт не несет никакой ответственности за содержание веб-сайтов, не предоставляет никаких гарантий относительно точности, полноты или законности их содержания, ссылки на которые используются в данной статье. Ссылка на внешний узел не подразумевает одобрения мнений, информации или продукции представленной на таких веб-сайтах.