У нас есть массив серверов, любой из которых может снизиться, генерируя уведомление со средним приоритетом:
define host {
host_name foo1
contacts medium-priority
use default-host
}
...
Однако мы ' Я хотел бы получать уведомление с более высоким приоритетом, когда более двух таких серверов в беде. С этой целью мы создали отдельное определение службы, используя Nagios '/ Icinga check_cluster
-utility:
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
Я бы пошел по маршруту и определил пользовательский var на хосте, который определяет службы, запускаемые при запуске обработчика событий. Таким образом, вам не нужно жестко кодировать их внутри сценария.
Затем ваш сценарий может решить принудительно выполнить новую проверку службы через внешний командный канал. Вероятно, вам следует определить, достаточно ли состояний HARD или SOFT - имейте в виду, что обработчики событий запускаются только при изменении состояния, а не, например, при DOWN-> DOWN-> DOWN.
Пример: https: / /github.com/Icinga/icinga-core/blob/master/contrib/eventhandlers/submit_check_result.in
Примечание. В этой службе не должны быть включены активные проверки и не должна использоваться фиктивная команда, а должна быть фактическая команда проверки службы.
(такая отправка результатов проверки происходила в старом мире Nagios / Icinga1 для несколько хакерского распределенного мониторинга, если вы ищете больше примеров с командным конвейером и обработчиками событий).