приведите пример использования Condition с подробным описанием
Conditions используются в тех случаях, когда надо создать комплексные условия на основе значений нескольких DCI, возможно с разных узлов. Например, я хочу посылать событие в случае если на хосте А заканчивается место на диске и одновременно на хосте В перегружен CPU. Тогда я делаю condition, указываю что он будет использовать соотв. DCI с хостов А и В, и пишу скрипт для проверки истинности условия - например
($1 < 10) && ($2 > 80)
(если первым в data я поставил дисковое пространство, а вторым CPU usage).
При переходе условия из FALSE в TRUE посылается event, который обрабатывается как любой другой.
Не нашел возможности в data загонять DCI шаблонов. Может, как-то не так искал?
Например, есть у нас шаблон "SNMP Printer". В нем есть два DCI: prtMarkerSuppliesLevel (уровень тонера) и prtMarkerSuppliesMaxCapacity (вместимость картриджа). Могу ли я сгенерировать событие в момент, когда prtMarkerSuppliesLevel / prtMarkerSuppliesMaxCapacity < 0.1?
Это сделать можно, но придется делать отдельный condition на каждый принтер... :( Когда сделаю вычисляемые DCI, тогда такие вещи можно будет нормально делать через шаблоны.
Виктор, приветствую...
Попытался воспроизвести инструкцию.. И понял, что почти ничего не понял =((
Что есть: есть SQL-кластер, 2 активные ноды. На кластере есть несколько ресурсных групп.
Что нужно: нужно отслеживать, что бы все ресурсные группы не сидели одновременно на одной ноде и в случае переезда (по каким-либо причинам) всех ресгрупп на одну ноду оператору кластера отправлялось оповещение.
Как планировалось реализовать: планировалось отслеживать на каждой из двух нод (SERVER1 и SERVER2) состояние 2ух сервисов, указывающих на то, что ресурсная группа (SQL RG1 и SQL RG2) хостится именно на этой ноде (сервисы MSSQL$SQLSERVER1 и соответственно MSSQL$SQLSERVER2). Эти группы не должны одновременно находиться на одной ноде и соответственно указанные сервисы НЕ ДОЛЖНЫ быть запущены одновременно.
Вопрос: и вот при попытке создать объект типа "Condition" у меня возникло устойчивое непонимание, как же его правильно использовать?
Последовательность (рассмотрим ситуацию только для одного сервера-ноды кластера):
1. создать 2 DCI для сервера-ноды SERVER1 (отслеживаем, что в пределах одной ноды всё так:
SERV1DCI1 -> System.ServiceState(MSSQL$SQLSERVER1) = 0
SERV1DCI2 -> System.ServiceState(MSSQL$SQLSERVER2) !=0
а вот если оба сервиса запущены, то должно сгенерироваться оповещение для Оператора.
Создал Event: "SYS_CLUSTER_NONOPTIMAL" (тип - Normal, с занесением в лог)
Добавил обработку: Event Processing Policy -> SYS_CLUSTER_NONOPTIMAL - Action = Mail to Operator.
А вот дальше что делать?
Честно говоря я не нашёл, как связать воедино созданный Condition и Ноду.
Как заставить Condition срабатывать если одно из условий сработало?
Нет, я конечно перерыл настройки Condition'а и всё что можно было настроить - настроил, но... Во вкладке "Data" я добавил 2 Source DCI Properties, ранее созданные на этапе 1. С сервера SERVER1. Но ведь там, в свойствах Condition'а, нельзя указать связь его и Event'ов. И во вкладке "Data" нет возможности указать, какие значения являются критическими (Threshold). Получается, что должны использоваться Threshold'ы из самих DCI (SERV1DCI1 и SERV1DCI2).
А дальше что делать?
Не могу понять, прошу разъяснить...
Как именно связать DCI, Condition и Event?
Я не нашёл точек соприкосновения =(((
Виктор...? :-[
Posledovatel'nost' dejstvij takaja:
1. Sozdaem condition
2. Otkrivaem properties objekta condition, i dobavljaem interesujuschie nas DCI v zakladke Data
3. V zakladke Script pishem skript, kotorij opisivaet uslovie srabativanija - v skripte znachenija DCI budut dostupni cherez $1, $2, i t.d.
4. V zakladke General vibiraem sobitija "Activation event" - budet poslano kogda uslovie, opisivaemoe skriptom, vipolnitsja, i "Deactivation event" - kogda uslovie snova perestanet vipolnjatsja.
Server proverjaet condition'i raz v minutu, delaja status poll. Thresholdi, opredelennie dlja DCI, v condition'e ne ispol'zujutsja.
Dlja opisdannoj situacii:
v pole data dobavljaem DCI
SERV1DCI1 -> System.ServiceState(MSSQL$SQLSERVER1)
SERV1DCI1 -> System.ServiceState(MSSQL$SQLSERVER2)
SERV1DCI2 -> System.ServiceState(MSSQL$SQLSERVER1)
SERV1DCI2 -> System.ServiceState(MSSQL$SQLSERVER2)
v script pishem
(($1 == 0) && ($2 == 0)) || (($3 == 0) && ($4 == 0))
v kachestve activation event stavim SYS_CLUSTER_NONOPTIMAL.
Виктор, огромное спасибо!
:)