Вопрос или проблема
У меня есть система Nagios с большим количеством хостов, классифицированных по различным группам хостов. Каждый из этих хостов имеет два контролируемых сервиса, один из которых должен зависеть от другого – если service1 находится в состоянии WARNING или CRITICAL, service2 на этом сервере также не должен выдавать предупреждение. service2 предназначен больше для сбора статистики, в то время как service1 является простым проверкой доступности – таким образом, я всегда хочу, чтобы service2 проверялся, но не выдавал предупреждение, если service1 сообщается о недоступности.
Это моя запись в services.cfg:
define servicedependency{
hostgroup example-servers
#host_name host1.example.com,host2.example.com
service_description service1
dependent_service_description service2
execution_failure_criteria n
notification_failure_criteria u,w,c,o
}
Я пробовал как указывать это через группу хостов, так и в виде списка отдельных серверов. В идеале, я хотел бы сделать это для всей группы хостов сразу, а не постоянно поддерживать список.
Однако, это, похоже, не работает ни в одном из случаев. Если service1 недоступен, service2 также показывает статус CRITICAL на экране проблем и в деталях хоста.
Из справочника Nagios по “execution_failure_criteria”: “Если вы указываете n (none) в качестве опции, зависимость выполнения никогда не будет провалена, и проверки зависимого сервиса всегда будут проводить активно (если другие условия это позволят).”
Похоже, вы должны использовать “u,c” вместо этого (не проверять, если server1 в состоянии UNKNOWN или CRITICAL). Или, может быть, “w,u,c”, ЕСЛИ состояние WARNING от service1 также должно привести к тому, что service2 не будет выполняться.
Если вы указываете “execution_failure_criteria n”, то service2 всегда будет проверяться. Если он проверяется и находится в состоянии предупреждения или критическом состоянии, пользовательский интерфейс будет отображать это состояние. Вы не можете предотвратить это (насколько я знаю), но вы можете предотвратить отправку уведомлений, например “notification_failure_criteria u,w,c”.
Я думаю, вы можете либо оставить “execution_failure_criteria” как есть (т.е. “n”) и смириться с тем, что статус показывает service2 как критический, когда он недоступен, либо изменить это на “c”.
Вы, вероятно, не хотите подавлять уведомления, если service1 в порядке, и это то, что вы делаете с “o” в “notification_failure_criteria u,w,c,o”.
Ответ или решение
Настройка зависимостей сервисов в Nagios для одной группы хостов
В вашей системе мониторинга Nagios у вас есть задача настроить зависимости между сервисами на разных хостах в одной группе хостов. Вы хотите, чтобы при наличии проблем с одним сервисом, другой сервис не показывал состояние CRITICAL или WARNING, поскольку это может быть излишним. Рассмотрим, как правильно настроить такие зависимости.
Проблема
На данный момент вы используете следующую конфигурацию в файле services.cfg
:
define servicedependency{
hostgroup example-servers
#host_name host1.example.com,host2.example.com
service_description service1
dependent_service_description service2
execution_failure_criteria n
notification_failure_criteria u,w,c,o
}
Согласно вашему описанию, у вас есть сервис service1
, который выполняетAvailability check, и сервис service2
, который собирает статистику. Если service1
находится в состоянии WARNING или CRITICAL, вы хотите, чтобы service2
не создавал никаких уведомлений.
Анализ конфигурации
-
Параметр
execution_failure_criteria
:- Как вы отметили, при установке этого параметра в
n
(none) сервисservice2
будет всегда проверяться, независимо от состоянияservice1
. Еслиservice2
будет возвращать статус CRITICAL, он будет виден в интерфейсе. - Чтобы предотвратить выполнение проверки
service2
при проблемах сservice1
, лучше использовать вариантыu
иc
(unknown и critical). Это позволит избегать проверок дляservice2
, еслиservice1
находится в этих состояниях.
- Как вы отметили, при установке этого параметра в
-
Параметр
notification_failure_criteria
:- Вы установили
notification_failure_criteria u,w,c,o
, что значит, что уведомления не будут отправляться, когдаservice1
находится в состоянии OK (o). Однако, еслиservice1
находится в состоянии WARNING, ваше условие должно срабатывать, и вы не получите уведомления оservice2
. - Рассмотрите возможность изменения этого параметра и исключения состояния
o
, если вы хотите получать уведомления, когдаservice1
в порядке.
- Вы установили
Рекомендации по настройке
Предлагаемая конфигурация для вашего случая может выглядеть следующим образом:
define servicedependency{
hostgroup example-servers
service_description service1
dependent_service_description service2
execution_failure_criteria u,c # Не проверять, если service1 в UNKNOWN или CRITICAL
notification_failure_criteria u,w,c # Отключить уведомления для service2 при проблемах с service1
}
Заключение
С учетом предложенных изменений, ваша настройка должна работать так, как вы ожидаете. service2
не будет показывать статус WARNING или CRITICAL, если service1
имеет проблемы, но будет продолжать активные проверки для сбора статистики. Не забудьте перезапустить Nagios после внесения изменений в конфигурацию, чтобы они вступили в силу.
Таким образом, вы сможете зарубежить излишние уведомления, при этом обеспечивая стабильную работу мониторинга в Nagios.