运行 Nagios Core 4.0.2 并在客户端上使用最新的 NRPE。
我们有 3 个服务定义,每分钟检查一个软件的不同级别:
- 打开TCP端口检查
- 进程正在运行检查
- 通过向套接字发送数据并期望一些返回值来进行应用层检查
当任何在这些检查中,我们将调用 event_handler 来重启服务,最多 3 次。如果 3 次之后状态仍不正常,则升级。
问题是,如果一个服务失败,则预计另一个服务将处于 CRITICAL 状态,这种情况有多种组合。如果我们为每个服务都设置了一个 event_handler,并且两个服务都失败了,那么通过 event_handler 的重启脚本将被调用两次。
- 例如,如果进程没有运行,那么TCP端口将不会打开,应用层检查将失败。
- 例如,由于防火墙配置错误的规则或网络状况,TCP 端口可能处于“关键”状态,并且应用程序层将因无法访问而失败,但进程仍在运行
问题:我们如何确保事件处理程序只被一次失败的服务检查调用,而不是被 3 个失败的服务调用,从而导致 2 次或更多次重新启动,因为它们的状态变为 CRITICAL?例如,如果 3 个服务检查进入 CRITICAL,那么 1 分钟内将重新启动 3 次,2 分钟内重新启动 6 次(假设重新启动未能将服务恢复到 OK 状态)。
我相信服务依赖关系可能是正确的解决方案,但我不确定如何创建它们以满足不同的条件。
答案1
服务依赖是实现这一目标的方法。
您想让您的应用层服务检查依赖于您的进程运行检查。
您想让您的进程运行检查依赖于您的 TCP 端口检查。
你想让所有这些都依赖于主持人(非服务)检查 - 这解决了“网络状况”故障情况。
这些很快就会变得非常复杂,但基本思想是:
define servicedependency{
host_name TheServer
service_description The Service I Depend On
dependent_host_name TheServer
dependent_service_description The Dependent Service
execution_failure_criteria n
notification_failure_criteria w,u,c
}
这里的执行力主要体现在:它列出了主服务可能处于的状态不是需要检查(在这种情况下,如果服务“我所依赖的服务”处于“通知”状态)。您可以指定多个选项(如下面这行所示)。
这是对 nagios 配置选项的很好的解释。 http://nagios.frank4dd.com/docs/en/objectdefinitions.html#servicedependency