![Nagios 检查两个服务中至少有一个是否正常](https://linux22.com/image/620932/Nagios%20%E6%A3%80%E6%9F%A5%E4%B8%A4%E4%B8%AA%E6%9C%8D%E5%8A%A1%E4%B8%AD%E8%87%B3%E5%B0%91%E6%9C%89%E4%B8%80%E4%B8%AA%E6%98%AF%E5%90%A6%E6%AD%A3%E5%B8%B8.png)
我在一台机器上有以下两个被动服务:ServiceA,ServiceB。
我希望出现以下条件满足 OK 状态的情况:
- ServiceA 正常或 ServiceB 正常
- ServiceA 正常且 SericeB 正常
我希望在以下情况下发出警报:
- 服务A 已关闭,服务B 已关闭
我应该使用什么配置选项来实现它?Servicedependency 看起来不错,但我对它不太满意。
答案1
check_cluster
是“老派”的做法,正如前面提到的。但它充其量也只是笨拙的。
检查多重是很多更好的选择;它的设计正是满足您的需要。
答案2
这称为监控服务“集群”。您可以使用检查集群脚本。
记录的方法使用像这样的包装脚本,而不是直接调用它:
define command{
command_name check_service_cluster
command_line /usr/local/nagios/libexec/check_cluster --service -l $ARG1$ -w $ARG2$ -c $ARG3$ -d $ARG4$
}
然后定义您自己的特定服务:
define service{
...
check_command check_service_cluster!"DNS Cluster"!1!2!$SERVICESTATEID:host1:dnsservicename,$SERVICESTATEID:host2:dnsservicename,$SERVICESTATEID:host3:dnsservicename
...
}
在这个例子中,1/3 的服务不正常是一个警告,2/3 的服务不正常是一个关键。
答案3
实现该目标的方法之一是使用 servicedependency 并在“OK 状态”上使用“失败”,如下所示:
define servicedependency{
host_name hostX
service_description ServiceA
dependent_host_name hostX
dependent_service_description ServiceB
execution_failure_criteria o
notification_failure_criteria o
}
“execution_failure_criteria” 中的“o”表示如果 ServiceA 处于 OK 状态,则不会检查 ServiceB。如果 ServiceB 处于“非 OK”状态,也不会通知(无论如何都不会检查)
这几乎是一个完美的解决方案。但仍有两个小问题:
- 这只适用于两个服务(但是您可以使用“dependent_hostgroup_name”,这将使服务依赖在许多主机上工作)
- 一旦 ServiceB 被标记为失败、未知、警告等,它将保持此状态,因为它由于“o”(ServiceA 的 OK 状态)而未被检查
答案4
如前所述,check_multi 是一个解决方案(如果你根本不想看到只有一个服务关闭,那么这是最好的解决方案)
另一个是使用 Nagios BPI:http://assets.nagios.com/downloads/nagioscore/docs/Using_The_BPI_Addon.pdf
使用该插件,您可以构建复杂的“业务”指标,例如:如果我的一个 Web 服务器正常并且我的一个数据库服务器正常,则一切正常
另一个类似 Nagios BPI 的选项是 Check_MK BI(但您当然需要切换到 Check_MK,它是一款很棒的产品,才能使用它):http://mathias-kettner.de/checkmk_bi.html