我的设置:
hosts.cfg
- 包含每个受监控主机的定义,例如:
define host{
use linux-server
host_name rdss-vpn
display_name VPN
address 54.***.***.176
}
hosts_groups.cfg
- 定义组:
define hostgroup{
hostgroup_name rdss-service-server
alias RDSS services
members [...], rdss-vpn
}
services.cfg
:
define service{
use local-service
hostgroup_name rdss-web-server, rdss-service-server
service_description Memory usage
check_command check_linux_memory!50!80
notifications_enabled 1
}
并且:check_linux_memory
commands.cfg
define command{
command_name check_linux_memory
command_line $USER1$/check_nrpe -H $HOSTNAME$ -c check_linux_memory -a '-f -w $ARG1$ -c $ARG2$'
}
以下是主机的示例,其check_linux_memory
工作原理如下:
define host{
use linux-server
host_name www.dev.domain.com
display_name DEV
address 54.***.***.136
}
其所属群组:
define hostgroup{
hostgroup_name rdss-web-server
alias RDSS web servers
members www.dev.domain.com, www.qa.domain.com, www.staging.domain.com
}
问题在于一些新添加的主机,例如rdss-vpn
- Nagios 无法从主机获取其 IP(请注意 - 我还有其他一些服务器(也在组中)check_linux_memory
- 全部正常)。
相反-我有一个错误nagios.log
:
[1437473407] 服务警报:rdss-vpn;内存使用情况;警告;困难;4;(标准输出上无输出)stderr:无法解析主机名 rdss-vpn:名称或服务未知
答案1
您的问题是,您编写的检查命令是使用$HOSTNAME$
而不是$HOSTADDRESS$
。
这恰好适用于您的其他主机,因为它们以 FQDN 命名(例如 www.dev.domain.com)。但它不适用,rdss-vpn
因为从您的 Nagios 框的角度来看,这不是有效的主机名。
您应该在检查中使用地址,而不是主机名。这样可以消除 DNS 作为 Nagios 检查的依赖关系。如果您确实需要使用主机名而不是 IP,请将主机名作为主机地址。
此外,传统上人们会将检查传递给check_nrpe
ARG,如check_nrpe!check_memory
或check_nrpe!check_memory!50 80
。但最终还是取决于你。