Nagios3:服务检查的条件运算符?

我试图设置Nagios来监视我的各种机器使用主机组来定义“机器angular色”,我运行服务来检查angular色的机器。 但是,我想使用条件运算符,使我能够对两个主机组的交集,而不是他们的联合运行服务检查…即使用&&,||或()运算符。

例如,假设我有以下服务器:

  • www-eu欧盟的 Linux WWW(Apache)服务器
  • www-us :Windows WWW(IIS)服务器,在美国(西海岸)
  • ftp-eu :在欧盟的Linux FTP服务器
  • ftp-us :Windows FTP服务器,在美国

我想创build以下主机组:

  • US-Servers :www-us,ftp-us
  • 欧盟服务器 :www-eu,ftp-eu
  • WWW服务器 :www-us,www-eu
  • FTP服务器 :ftp-us,ftp-eu

现在说我有兴趣检查我的Web服务器的HTTP响应时间。 那么让我们说这个特定的Nagios服务是从美国(西海岸)运行的,而且我有一个名为check_http_response_time的命令。 这个命令将检查HTTP服务器的响应性,我可以提供一个参数来定义提高临界值之前的最大响应时间。

我的命令可能看起来像: check_http_response_time $HOSTNAME$ 50

现在传统上,我可以通过指定主机或主机组列表来运行我的检查。

 define service{ use local-service hostgroup_name WWW-Servers # Servers = www-us, www-eu servicegroups WWW Checks service_description Check HTTP Response Time check_command check_http_response_time!50 } 

但是,根据上面的服务定义,由于我的Nagios服务在美国西部,所以我可以合理地预计,我的EU服务器将会返回关键的状态。 真的,我想要为每个地区设定不同的门槛(美国西部50个,欧盟200个)。

要做到这一点,我将不得不为每个主机排列我的服务,并为每个主机设置一个自定义的阈值,或者按angular色和区域(即WWW-Servers-EU)对我的服务组进行排列,并针对这些阈值运行特定的阈值。 虽然后者比较好,但都比我想要的要混乱得多。

我会喜欢什么,这个职位要求什么,是一种使用主机组来执行交叉使用条件逻辑,而不是一个简单的联合。 它可能看起来像:

 define service{ use local-service hostgroup_name WWW-Servers && US-Servers servicegroups WWW Checks service_description Check HTTP Response Time check_command check_http_response_time!50 } 

然后,它将仅对 WWW服务器 US服务器主机组中的服务器运行检查:在我的示例中,只是www-us。 这种function的好处对于大规模configuration的Nagios服务将是非常重要的。

这个function是否可用? 如果不是,将来可以使用吗? 有没有其他的方法来完成这个最新的Nagios版本?

任何提示/build议,非常感谢!

  • 戴夫

然后,它将只运行在WWW服务器和US服务器上的服务器,在我的例子中,只是www-us。

这个function是否可用? 如果不是,将来可以使用吗?

Ethan Galstad 说他没有任何计划来增加路口支援。

有没有其他的方法来完成这个最新的Nagios版本?

您可以通过在主机或主机组之前使用! 符号。 所以,尝试这样的事情:

 define service{ use local-service hostgroup_name *,!EU-Servers,!FTP-Servers servicegroups WWW Checks service_description Check HTTP Response Time check_command check_http_response_time!50 } 

我的方法取决于我想要实现的。 通常我相信更多的主机组是一件好事,但我也相信尽可能使用脚本自动化Nagiosconfiguration。

然而,为了处理你的用例,我会编写一个处理程序,它使用$ HOSTGROUPNAMES $macros获取主机组成员身份的列表,并适当地parsing命令string。

在Nagios文档中描述了$ HOSTGROUPNAMES $ 。 它提供逗号分隔的主机组所在的主机组列表。 使用大多数脚本语言parsing命令行应该很简单。

命令configuration可能看起来像

check_http_by_hostgroup -g $ HOSTGROUPNAMES $ -H $ HOSTNAME -I $ HOSTADDRESS $ -U $ ARG1 $ -W $ ARG2 $ -C $ ARG3 $

和服务configuration可能看起来像:

 define service{ use local-service hostgroup_name WWW-Servers ; hosts are also members of us, eu, or ap servicegroups WWW Checks service_description Check HTTP Response Time check_command check_http_by_hostgroup|http://foo.bar/|us=30,eu=160|us=90,eu=240,ap=390 } 

然后在主机configuration中定义主机组成员,而不是在主机组configuration中。

您可能需要查看Nagios中的服务/主机依赖function。