Nagios 检查两个服务中至少有一个是否正常

Nagios 检查两个服务中至少有一个是否正常

我在一台机器上有以下两个被动服务: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 的服务不正常是一个关键。

Nagios 文档

Groundworks 知识库中的更多解释

答案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

相关内容