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

-
Нажмите Обновить.
Теперь в списке рядом с триггером отображается информация о его зависимости.

Пример нескольких зависимостей
Например, узел сети 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 не будет обновлен.