Как создать свой кастомный зависимый монитор (Часть 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, а Weight String не задан – режим принудительно изменяется на Percentage

·        В случае если монитор не проходит проверку параметров (в режиме Percentage пороги указаны более 100%, не указан один из обязательных параметров и другие), будет сгенерирован соответствующий Alert, а также сообщение в журнале событий Operations Manager


У этого метода есть некоторые особенности:

·        Задержка обновления состояния монитора равна интервалу запуска скрипта;

·        При большом количестве распределённых приложений, которые контролируются данным способом, возможна повышенная нагрузка на управляющий сервер;

·        В дереве здоровья (Health Explorer) не совсем очевидно, по какой причине монитор перешел в то или иное состояние.

 

Будем рады услышать комментарии и отзывы.
 

Данная статья носит информационный характер, ссылки на веб-сайты предоставляются для удобства пользователей. Корпорация Майкрософт не несет никакой ответственности за содержание веб-сайтов, не предоставляет никаких гарантий относительно точности, полноты или законности их содержания, ссылки на которые используются в данной статье. Ссылка на внешний узел не подразумевает одобрения мнений, информации или продукции представленной на таких веб-сайтах.


 

Custom.DistributedApplications.Library.mp


Comments (0)

Skip to main content