как использовать Condition

Started by weec, December 13, 2007, 12:20:39 PM

Previous topic - Next topic

weec

приведите пример использования Condition с подробным описанием

Victor Kirhenshtein

Conditions используются в тех случаях, когда надо создать комплексные условия на основе значений нескольких DCI, возможно с разных узлов. Например, я хочу посылать событие в случае если на хосте А заканчивается место на диске и одновременно на хосте В перегружен CPU. Тогда я делаю condition, указываю что он будет использовать соотв. DCI с хостов А и В, и пишу скрипт для проверки истинности условия - например


($1 < 10) && ($2 > 80)


(если первым в data я поставил дисковое пространство, а вторым CPU usage).
При переходе условия из FALSE в TRUE посылается event, который обрабатывается как любой другой.

Dmitry

Не нашел возможности в data загонять DCI шаблонов. Может, как-то не так искал?

Например, есть у нас шаблон "SNMP Printer". В нем есть два DCI: prtMarkerSuppliesLevel (уровень тонера) и prtMarkerSuppliesMaxCapacity (вместимость картриджа).  Могу ли я сгенерировать событие в момент, когда prtMarkerSuppliesLevel / prtMarkerSuppliesMaxCapacity < 0.1?

Victor Kirhenshtein

Это сделать можно, но придется делать отдельный condition на каждый принтер... :( Когда сделаю вычисляемые DCI, тогда такие вещи можно будет нормально делать через шаблоны.

Anth0ny

#4
Виктор, приветствую...

Попытался воспроизвести инструкцию.. И понял, что почти ничего не понял =((

Что есть: есть 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?
Я не нашёл точек соприкосновения =(((

Anth0ny


Victor Kirhenshtein

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.

Anth0ny

Виктор, огромное спасибо!
:)