3. Зависимости триггеров
Обзор
Иногда доступность одного узла сети зависит от другого. Сервер, который находится за маршрутизатором, станет недоступен, если маршрутизатор выйдет из строя. Если для обоих настроены триггеры, вы можете получить уведомления о недоступности двух узлов сети, хотя виноват был только маршрутизатор.
В таких случаях может быть полезна некоторая зависимость между узлами сети. При заданной зависимости уведомления о зависимых узлах могут быть задержаны, и будет отправлено только уведомление о корневой проблеме.
Хотя Zabbix не поддерживает зависимости между узлами сети напрямую, их можно определить с помощью другого, более гибкого метода - зависимостей триггеров. Триггер может зависеть от одного или нескольких других триггеров.
В нашем простом примере мы открываем форму настройки триггера сервера и задаем, что он зависит от соответствующего триггера маршрутизатора. При такой зависимости триггер сервера не будет менять свое состояние, пока триггер, от которого он зависит, находится в состоянии 'PROBLEM' - и, следовательно, никаких действий для зависимого триггера выполняться не будет и уведомления отправляться не будут.
Если недоступны и сервер, и маршрутизатор, и задана зависимость между триггером "server down" и триггером "router down", Zabbix не будет выполнять действия для зависимого триггера.
Пока родительский триггер находится в состоянии PROBLEM, его зависимые триггеры могут сообщать значения, которым нельзя доверять. Поэтому зависимые триггеры не будут переоцениваться, пока родительский триггер (маршрутизатор в примере выше):
- не вернется из состояния 'PROBLEM' в состояние 'OK';
- не изменит свое состояние с 'PROBLEM' на 'UNKNOWN';
- не будет закрыт вручную, по корреляции или с помощью функций date and time и/или nodata();
- не будет устранен значением элемента данных, не участвующего в зависимом триггере;
- не будет отключен, либо будет отключен элемент данных или узел сети, которому принадлежит отключенный элемент данных
Во всех случаях, перечисленных выше, зависимый триггер (сервер) будет переоценен только после получения нового метрика для него. Это означает, что зависимый триггер может обновиться не сразу.
Также:
- Зависимость триггера может быть добавлена от любого триггера узла сети к любому другому триггеру узла сети, если это не приводит к циклической зависимости.
- Зависимость триггера может быть добавлена от одного шаблона к другому. Если какой-либо триггер из шаблона A зависит от какого-либо триггера из шаблона B, шаблон A можно связать с узлом сети (или другим шаблоном) только вместе с шаблоном B, но шаблон B можно связать с узлом сети (или другим шаблоном) отдельно.
- Зависимость триггера может быть добавлена от триггера шаблона к триггеру узла сети. В этом случае связывание такого шаблона с узлом сети создаст триггер узла сети, который будет зависеть от того же триггера шаблона, от которого зависел триггер. Это позволяет, например, иметь шаблон, в котором некоторые триггеры зависят от триггеров маршрутизатора (узла сети). Все узлы сети, связанные с этим шаблоном, будут зависеть от этого конкретного маршрутизатора.
- Зависимость триггера не может быть добавлена от триггера узла сети к триггеру шаблона.
- Зависимость триггера может быть добавлена от прототипа триггера к другому прототипу триггера (в рамках одного правила низкоуровневого обнаружения) или к реальному триггеру. Прототип триггера не может зависеть от прототипа триггера из другого правила LLD или от триггера, созданного из прототипа триггера. Прототип триггера узла сети не может зависеть от триггера из шаблона.
Конфигурация
Чтобы задать зависимость:
-
Откройте вкладку Dependencies в форме конфигурации триггера.
-
Нажмите Add в разделе Dependencies и выберите один или несколько триггеров, от которых будет зависеть этот триггер.

-
Нажмите Update.
Теперь в списке у триггера отображается признак его зависимости.

Пример нескольких зависимостей
Например, узел сети Host находится за Router2, а Router2 находится за Router1.
Zabbix - Router1 - Router2 - Host
Если Router1 недоступен, то, очевидно, узел сети Host и Router2 тоже недоступны, однако получение трех уведомлений о том, что недоступны узел сети Host, Router1 и Router2, — это избыточно.
Поэтому в этом случае мы определяем две зависимости:
триггер 'Host is down' зависит от триггера 'Router2 is down'
триггер 'Router2 is down' зависит от триггера 'Router1 is down'
Перед изменением состояния триггера 'Host is down' Zabbix проверит соответствующие зависимости триггеров. Если такие зависимости найдены и один из этих триггеров находится в состоянии 'Problem', то статус триггера не будет изменен, действия не будут выполнены и уведомления не будут отправлены.
Zabbix выполняет эту проверку рекурсивно. Если Router1 или Router2 недоступен, триггер Host не будет обновлен.