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

我在一台机器上有两个被动的服务:ServiceA,ServiceB。

OK状态满足以下条件时,我想有一个sittuation:

  • ServiceA正常或ServiceB正常
  • ServiceA正常,SericeB正常

我想在下列情况下发出警报:

  • 服务Aclosures,服务Bclosures

我应该使用什么configuration选项来实现? 服务依赖性看起来不错,但我没有那个运气。

已经提到, check_cluster是“老派”的做法。 但最好的是,

check_multi是一个更好的select; 它的devise正是你想要的。

这被称为监视服务的“集群”。 您可以使用check_cluster脚本。

logging的方法使用这样的包装脚本,而不是直接调用它:

 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知识库中有更多解释

其中一种实现方法就是使用服务依赖关系,在“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”,它也不会通知(它不会被检查)

这几乎是一个完美的解决scheme。 还有两个小问题:

  • 这只适用于两个服务(但是,您可以使用“dependent_hostgroup_name”,这将使服务依赖关系在多台主机上运行)
  • 一旦ServiceB被标记为失败,不知道,警告,无论如何,它将保持在这个状态,因为它没有被检查,因为“o”(ServiceA的OK状态)

如前所述,check_multi是一个解决scheme(最好,如果你不想看到只有一个服务是closures的)

另一个是使用Nagios BPI: http : //assets.nagios.com/downloads/nagioscore/docs/Using_The_BPI_Addon.pdf

使用该插件,您可以构build复杂的“业务”指标,例如:如果只有一台Web服务器可以,那么一切正常,只要我的一台数据库服务器即可

像Nagios BPI的另一个select是Check_MK BI(但是您当然需要切换到Check_MK,这是一个很棒的产品): http ://mathias-kettner.de/checkmk_bi.html