我为 nagios 设置了以下服务:
define service {
hostgroup_name LNX
service_description /tmp Disk Usage
check_command check_nrpe!check_disk!-a '-w 20% -c 10% -p /tmp'
check_interval 1
max_check_attempts 3
retry_interval 1
check_period 24x7
notification_interval 2
notification_period 24x7
notification_options c,r,w
notifications_enabled 0
contact_groups devops
}
这与以下命令相关:
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -u -t 60 -c $ARG1$ $ARG2$
}
因此最终执行的内容(以及在命令行上运行时的输出)是:
$: /usr/local/nagios/libexec/check_nrpe -H <my host> -u -t 60 -c check_disk -a '-w 20% -c 10% -p /tmp'
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910
接下来echo $?
产生 0,表示 OK/成功。
然而,nagios 将此报告为“错误代码 255 超出范围”,我不确定原因。
在服务器上运行 check_disk 命令可以正常工作:
$: ./check_disk -w 20% -c 10% -p /tmp
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910
$: echo $?
0
如上所示,通过check_nrpe
nagios 服务器上的可执行文件执行时,它可以正常工作。这意味着:
check_disk
远程系统上存在 命令( ):command[check_disk]=/usr/local/nagios/libexec/check_disk $ARG1$
- Nagios 服务器能够与远程 nrpe 通信(例如,它可以在网络上访问它,并且它的 IP 存在于
only_from
中的指令中/etc/xinetd.d/nrpe
)
此外,此检查在其他机器上运行良好,但并非所有机器
为什么 Nagios 认为它得到的是 255,而我看到的一切都意味着它应该得到的是 0,从而将服务标记为正常?
编辑:Nagios 版本是运行在 CentOS 7 上的 Nagios core 4,被检查的主机是 centos 5-7,问题出现在不同版本的多台机器上
答案1
当您有如下 check_command 时:
check_command check_nrpe!check_disk
命令名称 tied 实际上是检查磁盘代替检查_nrpe在客户端。
问题原因
Nagios 服务器中的服务设置要求被监控的客户端使用一个参数执行 check_disk 命令。
-w 20% -c 10% -p /tmp
您当前的设置检查磁盘在 Nagios 客户端上使用命令nrpe配置文件如图所示:
command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
因此,您通过 NRPE 传递给监控客户端的命令实际上是:
/usr/lib64/nagios/plugins/check_disk -w -w 20% -c 10% -p /tmp -c $ARG2$ -p $ARG3$
因此,由于命令无法成功执行,因此测试失败。
解决方案
如果你想向 Nagios 客户端传递 3 个不同的参数,请尝试修改你的检查命令如下:
check_command check_nrpe!check_disk -a '-w 20% -c 10% -p /tmp'
确保你已经在Nagios客户端配置了相应的命令:
command[check_disk]=/usr/lib64/nagios/plugins/check_disk $ARG1$
另外一个选择将更改服务器配置如下:
check_command check_nrpe!check_disk
相应的客户端配置如下:
command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
答案2
您应该检查 nrpe 客户端是否接受来自 nagios 服务器的连接。
cat /etc/xinetd.d/nrpe
service nrpe
{
flags = REUSE
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nrpe
server_args = -c /usr/local/nagios/etc/nrpe.cfg --inetd
log_on_failure += USERID
disable = no
only_from = xxx.xxx.xxx.xxx
}
确认 only_from 行包含你的 nagios IP
其次,您需要检查 check_nrpe 脚本是否具有正确的权限。它应该归 nagios 所有:nagios
-rwxrwxr-x. 1 nagios nagios 81542 Jul 11 13:08 /usr/local/nagios/libexec/check_nrpe