在我们的 Nagios 设置中,我们使用模板和对象继承来提供服务和主机。
#Le Hosts
define host{
use linux-nrpe,linux-dc3,linux-cassandra
host_name tigris
alias tigris
address 192.168.4.72
}
define host{
use linux-nrpe,linux-dc3,linux-cassandra
host_name euphrates
alias euphrates
address 192.168.4.177
}
#Le Templates
define host{
name linux-nrpe
use all-hosts
hostgroups linux-nrpe
contact_groups rhands,usergroup1,opcomms
register 0
}
#Le Services
define service{
hostgroup_name linux-nrpe
use high-priority-service,graphed-service
service_description Load
check_command check_by_nrpe!check_load!5,5,6!9,9,9
contact_groups rhands,usergroup1,opcomms
}
[...etc...]
这种设置的问题在于,linux-nrpe
当负载水平达到服务中定义的水平时,组内的所有服务器都会触发警报,但我们的主力服务器可能会以 20 的负载全天候运行,但我们的数据库服务器除非出现问题,否则负载水平会保持在 1 左右,因此我们发现系统发出了太多警报,或者不得不忽略/不发出警报。为每台服务器(很多台)定义单独的服务定义会花费很长时间,我们真正想要做的是
define host{
name linux-nrpe
use all-hosts
hostgroups linux-nrpe
contact_groups rhands,usergroup1,opcomms
register 0
perf_load 2,2,3 5,5,6
perf_mem 95% 97%
[...more...]
}
define service{
hostgroup_name linux-nrpe
use high-priority-service,graphed-service
service_description Load
check_command check_by_nrpe!check_load!$perf_mem$
contact_groups rhands,usergroup1,opcomms
}
我查看了文档,什么也没看到,除非我遗漏了什么。有什么想法吗?
答案1
我们在 Nagios 监控中运行了一个非常相似的解决方案。自定义主机/服务变量在定义时必须以下划线开头,在引用时必须添加 _HOST 或 _SERVICE 作为前缀,并以大写字母作为名称。
因此,您必须将 perf_load 和 perf_mem 自定义变量定义为
define host {
[..]
_perf_load 2,2,3 5,5,6
_perf_mem 95% 97%
[..]
}
并引用为
define service {
[..]
check_command check_by_nrpe!check_load!$_HOSTPERF_LOAD$
[..]
}
以下是我们 Nagios 运行配置的一个片段:
define host {
host_name target
alias target
address target
use tmpl_host
_gprs_address 192.168.0.1
}
[...]
define service {
host_name target
service_description GPRS ping
use tmpl_service_ping
check_command check_fping-by-ssh!-H 1.2.3.4 -S $_HOSTGPRS_ADDRESS$ -n 7 -t 1000 -w 1000 -c 2000
event_handler check_restart-GPRS-PPP
notes_url https://wiki.
contact_groups admin_allday
}
您可以在 Nagios 中找到更多详细信息文档。
作为参考,这项工作在 Icinga 中也很好。
答案2
您还可以在主机本身的 NRPE 配置中定义阈值。如果您有几十台以上的主机,这种方法就不切实际了,除非您有某种配置管理(如 puppet,甚至只是 git/hg/svn/whatever)并在 nrpe.cfg 中使用“includes”。
不过,Lairsdragon 的建议要好得多。我想补充的是:
使用两个前导下划线 ($__FOO) 来命名自定义对象变量会很有帮助,因此它们可以被称为“$_HOST_FOO”。