Зависимости триггеров

Зависимости триггеров можно использовать, чтобы избежать оповещений, не связанных с первопричиной.

См. все рекомендации.

Обзор

Иногда доступность одного узла сети зависит от другого. Сервер, находящийся за маршрутизатором, станет недоступен, если маршрутизатор выйдет из строя. Если для обоих настроены триггеры, вы можете получить уведомления о недоступности двух узлов сети, хотя виноват был только маршрутизатор.

В таких случаях может быть полезна зависимость между узлами сети. При заданной зависимости уведомления о зависимых узлах могут быть задержаны, и будет отправлено только уведомление о корневой проблеме.

Хотя Zabbix не поддерживает зависимости между узлами сети напрямую, их можно определить с помощью другого, более гибкого механизма - зависимостей триггеров. Триггер может зависеть от одного или нескольких других триггеров.

В нашем простом примере мы открываем форму настройки триггера сервера и задаем зависимость от соответствующего триггера маршрутизатора. При такой зависимости триггер сервера не будет менять свое состояние, пока триггер, от которого он зависит, находится в состоянии 'PROBLEM' - и, следовательно, не будут выполняться зависимые действия и не будут отправляться уведомления.

Если одновременно недоступны и сервер, и маршрутизатор, и задана зависимость между триггером "server down" и триггером "router down", Zabbix не будет выполнять действия для зависимого триггера.

Пока родительский триггер находится в состоянии PROBLEM, его зависимые триггеры могут сообщать значения, которым нельзя доверять. Поэтому зависимые триггеры не будут переоцениваться, пока родительский триггер (маршрутизатор в примере выше):

  • не вернется из состояния 'PROBLEM' в состояние 'OK';
  • не изменит свое состояние с 'PROBLEM' на 'UNKNOWN';
  • не будет закрыт вручную, по корреляции или с помощью функций date and time и/или nodata();
  • не будет устранен значением элемента данных, не участвующего в зависимом триггере;
  • не будет отключен, либо если отключен элемент данных или узел сети элемента данных

Во всех случаях, перечисленных выше, зависимый триггер (сервер) будет переоценен только после получения нового значения метрики. Это означает, что зависимый триггер может обновиться не сразу.

Также:

  • Зависимость триггера может быть добавлена от любого триггера узла сети к любому другому триггеру узла сети, если это не приводит к циклической зависимости.
  • Зависимость триггера может быть добавлена от одного шаблона к другому. Если какой-либо триггер из шаблона A зависит от какого-либо триггера из шаблона B, шаблон A может быть связан с узлом сети (или другим шаблоном) только вместе с шаблоном B, тогда как шаблон B может быть связан с узлом сети (или другим шаблоном) отдельно.
  • Зависимость триггера может быть добавлена от триггера шаблона к триггеру узла сети. В этом случае при связывании такого шаблона с узлом сети будет создан триггер узла сети, который зависит от того же триггера шаблона, от которого зависел триггер. Это позволяет, например, иметь шаблон, в котором некоторые триггеры зависят от триггеров маршрутизатора (узла сети). Все узлы сети, связанные с этим шаблоном, будут зависеть от этого конкретного маршрутизатора.
  • Зависимость триггера не может быть добавлена от триггера узла сети к триггеру шаблона.
  • Зависимость триггера может быть добавлена от прототипа триггера к другому прототипу триггера (в пределах одного правила низкоуровневого обнаружения) или к реальному триггеру. Прототип триггера не может зависеть от прототипа триггера из другого правила LLD или от триггера, созданного из прототипа триггера. Прототип триггера узла сети не может зависеть от триггера из шаблона.

Конфигурация

Чтобы определить зависимость:

  1. Откройте вкладку Dependencies в форме конфигурации триггера.

  2. Нажмите Add в разделе Dependencies и выберите один или несколько триггеров, от которых будет зависеть этот триггер.

  3. Нажмите 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 не будет обновлен.