Назад | Перейти на главную страницу

Как запустить проверку сервиса по изменению статуса хоста?

У нас есть массив серверов, любой из которых может выйти из строя, генерируя уведомление со средним приоритетом:

define host {
        host_name       foo1
        contacts        medium-priority
        use     default-host
}
...

Однако мы хотели бы получать уведомление с более высоким приоритетом, когда более, чем два у таких серверов проблемы. С этой целью мы создали отдельное определение службы, используя Nagios / Icinga check_cluster-утилита:

define service {
        service_description     foo-cluster
        servicegroups   cluster-checks
        display_name    Foo Cluster
        check_command   check_cluster_host!Foo Cluster!0!3!$HOSTSTATEID:foo1$,$HOSTSTATEID:foo2,...$HOSTSTATEID:fooN$
        contacts        high-priority
        hostgroup_name  clusters
        notes   Check, that no more than 2 hosts in group foo are in trouble
        use     default-service
}

Вышеупомянутое, вероятно, сработает, но я бы хотел, чтобы эта служебная проверка запускалась не по времени, а только по изменение статуса любого из "нижележащих" хостов ...

Мы генерируем конфигурационные файлы Icinga с помощью Ansible и поэтому можем программно конструировать сложные зависимости, но можно ли реализовать такой запуск вообще?

Вы можете определить обработчик событий на хосте, который в основном представляет собой небольшой скрипт, «делающий что-то на основе параметров». Атрибуты состояния хоста можно передать из макросов времени выполнения в качестве параметров команды.

https://www.icinga.com/docs/icinga1/latest/en/eventhandlers.html

Я бы пошел по маршруту и ​​определил настраиваемую переменную на хосте, которая определяет службы, запускаемые при запуске обработчика событий. Таким образом, вам не нужно жестко закодировать их внутри скрипта.

Затем ваш сценарий может решить принудительно выполнить новую проверку службы через внешний командный канал. Вероятно, вам следует определить, достаточно ли состояний HARD или SOFT - имейте в виду, что обработчики событий запускаются только при изменении состояния, а не, например, при DOWN-> DOWN-> DOWN.

Пример: https://github.com/Icinga/icinga-core/blob/master/contrib/eventhandlers/submit_check_result.in

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

(такая отправка результатов проверки происходила в старом мире Nagios / Icinga1 для несколько хакерского распределенного мониторинга, если вы ищете больше примеров с командным конвейером и обработчиками событий).