我刚刚从 nagios2 迁移到 nagios3,主要是为了自定义宏功能。
我的网络中有两种服务器:
- 单一 IP 服务器(服务和 snmp 服务器使用同一个 IP)
- 双 IP 服务器(公共 IP 用于服务,私有 IP 用于 snmp 服务器)
我尝试做的是将默认值设置为主机模板中的宏 $_HOSTIPSNMP$。
define host {
name linux-server
...
_IPSNMP $HOSTADDRESS$
...
}
我假设所有主机都会自动将 $_HOSTIPSNMP$ 设置为 $HOSTADDRESS$ 的内容
如果我能让它工作,第二部分将是根据每个主机为 $_HOSTIPSNMP$ 设置自定义值,样式如下:
define host {
use linux-server
address 123.123.123.123
_IPSNMP 192.168.1.10
}
所以 $_HOSTIPSNMP$ 始终有一个合理的值,我可以随时将其设置为我想要的任何值。
我遇到的错误是这样的,似乎 _HOSTIPSNMP 没有被正确替换为变量值,而是被替换为变量名。
cmd=[/usr/lib/nagios/plugins/check_snmp_storage.pl '-H' 'HOSTADDRESS'
'-C' 'comunity' '-m' '/' '-w' '80%' '-c' '85%']
output=[ERROR: Unable to resolve UDP/IPv4 address 'HOSTADDRESS'.
我尝试更改模板中 $HOSTADDRESS$ 的引用,但没有任何效果。
感谢您的帮助。
答案1
根据 Nagios文档在宏上,引用上面定义的 _IPSNMP 的正确方法是 $_HOSTIPSNMP$
答案2
好吧,最后唯一的解决方案是向所有主机告知 _IPSNMP 的值。
看来宏不是递归解析的,这是预期的行为(至少在 nagios 3 中)
至少我能够以一种巧妙的方式做我想做的事情。我建议每个人都使用宏。