如何通过主机状态的改变来触发服务检查?

如何通过主机状态的改变来触发服务检查?

我们有一系列服务器,其中任何一台服务器都可能出现故障并生成中优先级通知:

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
}

上述方法可能会奏效,但我希望此服务检查不是由时间触发,而是由状态改变任何“底层”主机……

我们用 Ansible 生成 Icinga 的配置文件,因此可以通过编程构建复杂的依赖关系——但这种触发可以实现吗?根本

答案1

您可以在主机上定义一个事件处理程序,它基本上是一个“根据参数执行某些操作”的小脚本。您可以将运行时宏中的主机状态属性作为命令参数传递。

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 世界中,用于有点黑客式的分布式监控)。

相关内容