我正在尝试使用它check_nrpe
来检查远程服务器,但它不起作用,而且我不知道我遗漏了什么......
# /usr/lib/nagios/plugins/check_nrpe -H XXX -c check_load -a 6,5,4 8,7,6
NRPE: Unable to read output
#
远程服务器的系统日志消息:
nrpe[18058]: Connection from XX.XX.XX.XX port 16267
nrpe[18058]: Host address is in allowed_hosts
nrpe[18058]: Handling the connection...
nrpe[18058]: Host is asking for command 'check_load' to be run...
nrpe[18058]: Running command: /usr/bin/sudo /usr/lib64/nagios/plugins/check_load -w 6,5,4 -c 8,7,6
nrpe[18058]: Command completed with return code 1 and output:
nrpe[18058]: Return Code: 1, Output: NRPE: Unable to read output
nrpe[18058]: Connection from XX.XX.XX.XX closed.
为了手动验证它,我在远程 shell 上发出相同的命令:
bash-4.1$ id
uid=497(nrpe) gid=497(nrpe) groups=497(nrpe) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
bash-4.1$ /usr/bin/sudo /usr/lib64/nagios/plugins/check_load -w 6,5,4 -c 8,7,6
OK - load average: 0.21, 0.23, 0.19|load1=0.210;6.000;8.000;0; load5=0.230;5.000;7.000;0; load15=0.190;4.000;6.000;0;
bash-4.1$
答案1
... 问题是,即使将nrpe_user
内部/etc/nagios/nrpe.cfg
设置为nrpe
,但无论出于什么原因,nrpe
它都以用户身份运行nagios
,所以我不得不重新调整sudoers.d
文件并且它立即开始工作......
# grep nrpe_user /etc/nagios/nrpe.cfg
nrpe_user=nrpe
# ps auxwww | grep nrpe
nagios 25388 0.0 0.0 41332 1240 ? Ss 11:32 0:00 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
root 26230 0.0 0.0 103252 828 pts/3 S+ 11:47 0:00 grep nrpe
# cat /etc/sudoers.d/01_nagios
Defaults:nagios !requiretty
nagios ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/
#
答案2
这可能是由 sudo 的“requiretty”设置引起的。但真正的问题是,你为什么要通过 sudo 运行 check_load。
因此,要解决这个问题:要么禁用 requiretty(仅针对 nagios/nrpe 用户),要么停止通过 sudo 运行插件。
答案3
在被检查的机器上,找到 nrpe.cfg 文件,其中有“check_load”条目。它看起来像这样:
command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
尝试在该机器上运行命令 - 上面等号右边的所有内容,看看你得到了什么。
/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
我敢打赌它在 /usr/lib/nagios/plugins 而不是 /usr/lib64 或类似的地方寻找 check_load。