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

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

我正在尝试设置 Nagios 来监控我的各种机器,使用主机组来定义“机器角色”,然后根据这些角色运行服务来按角色检查机器。但是,我想使用条件运算符,这样我就可以针对两个主机组的交集而不是它们的并集运行服务检查……即使用 &&、|| 或 () 运算符。

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

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

我想要创建以下主机组:

  • 美国服务器: www-美国, ftp-美国
  • 欧盟服务器: www-欧盟, ftp-欧盟
  • WWW服务器: www-美国, www-欧盟
  • FTP 服务器:ftp-美国,ftp-欧盟

现在假设我想检查我的 Web 服务器的 HTTP 响应时间。假设这个特定的 Nagios 服务在美国(西海岸)运行,并且我有一个名为检查http响应时间。此命令将检查 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 服务位于美国西部,我可以合理地预期我的欧盟服务器将返回严重错误。实际上,我希望每个地区都有不同的阈值(美国西部为 50,欧盟为 200)。

为了实现这一点,我必须为每个主机排列我的服务并为每个主机设置自定义阈值,或者按角色和区域排列我的服务组(即 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-Servers 主机组:在我的示例中,仅指 www-us。对于配置为大规模的 Nagios 服务,此类功能的好处将非常显著。

此功能可用吗?如果不可用,将来会可用吗?在最新的 Nagios 版本下,还有其他方法可以实现此功能吗?

非常感谢任何提示/建议!

  • 戴夫

答案1

然后,它将仅针对 WWW 服务器和 US 服务器中的服务器运行检查,在我的示例中,仅针对 www-us。

此功能可用吗?如果不可用,将来会可用吗?

伊桑·加尔斯塔德 他没有任何增加交叉口支持的计划。

考虑到最新的 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
}

答案2

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

但是,为了处理您的用例,我将编写一个处理程序,使用 $HOSTGROUPNAMES$ 宏获取主机组成员身份列表并适当地解析命令字符串。

$主机组名称$Nagios 文档。它提供主机所属主机组的逗号分隔列表。使用大多数脚本语言解析命令行应该很简单。

命令配置可能看起来像

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

服务配置可能如下所示:

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
}

然后在主机配置中而不是主机组配置中定义主机组成员资格。

答案3

您可能想看看 Nagios 中的服务/主机依赖功能。

相关内容