我在 Nagios 中很难找到有关通配符和正则表达式(尤其是它们与排除项一起使用)的良好文档。以下是我正在尝试执行的操作的示例:
在 中nagios.cfg
,设置了以下内容,据称可以启用*
和?
作为通配符:
use_regexp_matching=1
use_true_regexp_matching=0
在 中services.cfg
,我们有一个服务,我们希望将其应用于除少数对象之外的所有对象;即所有 Linux 主机,但不包括负载均衡器。显式排除有效:
define service {
use generic-service
service_description Puppet check
hostgroup_name prod, staging, !prod-site_a-lbs
check_command check_puppet_alive_nrpe
}
但是,我们有许多站点,每个站点在自己的主机组中都有负载平衡器(因此站点可以轻松管理通知)。而不是有一长串的!prod-site_a-lbs
、!staging-site_a-lbs
、!prod-site_b-lbs
。我希望能够将hostgroup_name
行修改为:
hostgroup_name prod, staging, !*-lbs
我已经尝试过此操作,虽然我们没有收到错误,但此服务检查仍应用于我们的负载均衡器。为了再次检查,我还尝试了:
hostgroup_name prod, staging, !.*-lbs
但是,use_true_regexp_matching
运行时,正如预期的那样(因为未设置),这会失败checkconfig-noprecache
:
Error: Could not find any hostgroup matching '!.*lbs' ...
在测试中,如果被删除.*
则被接受。checkconfig-noprecache
!
我们尝试的方法可行吗?我们可以使用通配符排除匹配的主机组吗?或者,有没有同样干净的替代方案?
更新(2015-09-21):在测试了Keith的答案之后,此配置有效:
在services.cfg
:
define service {
use generic-service
service_description Puppet check
hostgroup_name prod, staging, !lbs
check_command check_puppet_alive_nrpe
}
在中hostgroups.cfg
,我使用“成员”指令中的正则表达式定义了一个新的主机组:
define hostgroup {
hostgroup_name lbs
alias Load Balancers
members ^lb.*
}
答案1
我认为实现此目的的唯一方法是创建一个由相关主机组成的新主机组(使用通配符),然后排除这个新主机组。