Как создать свой кастомный зависимый монитор (Часть 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) не совсем очевидно, по какой причине монитор перешел в то или иное состояние.

 

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

 

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

 

Custom.DistributedApplications.Library.mp