Temos uma matriz de servidores, qualquer um dos quais pode ficar inativo gerando uma notificação de prioridade média:
define host {
host_name foo1
contacts medium-priority
use default-host
}
...
No entanto, gostaríamos de receber uma notificação de prioridade mais alta sempre que mais de dois desses servidores estiverem com problemas. Para esse fim, configuramos uma definição de serviço separada usando o utilitário -utility do Nagios'/ check_cluster
Icinga:
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
}
O acima provavelmente funcionará, mas gostaria que essa verificação de serviço fosse acionada não pelo tempo, mas apenas por uma mudança no status de qualquer um dos hosts "subjacentes" ...
Geramos os arquivos de configuração do Icinga com o Ansible e, portanto, podemos construir dependências complexas programaticamente - mas esse acionamento pode ser implementado ?
Você pode definir um manipulador de eventos no host que basicamente é um pequeno script "fazendo algo com base em parâmetros". Você pode passar os atributos de estado do host de macros de tempo de execução como parâmetros de comando.
https://www.icinga.com/docs/icinga1/latest/en/eventhandlers.html
Eu seguiria a rota e definiria um var personalizado no host que define os serviços a serem acionados quando um manipulador de eventos é acionado. Dessa forma, você não precisa codificá-los dentro do script.
Seu script pode então decidir forçar uma nova verificação de serviço por meio do canal de comando externo. Você provavelmente deve definir se os estados HARD ou SOFT são suficientes - tenha em mente que os manipuladores de eventos são acionados apenas em uma mudança de estado, não em DOWN->DOWN->DOWN, por exemplo.
Exemplo: https://github.com/Icinga/icinga-core/blob/master/contrib/eventhandlers/submit_check_result.in
Nota: Esse serviço não deve ter as verificações ativas habilitadas e não deve usar um comando fictício, mas o comando real de verificação de serviço.
(tal envio de resultado de verificação aconteceu no antigo mundo Nagios/Icinga1 para monitoramento distribuído um pouco hackish também, se você estiver procurando por mais exemplos com o canal de comando e manipuladores de eventos).