我创build了一个使用crm_mon命令检查我们的起搏器的Nagios检查。 该检查在Nagios服务器和客户端的nrpe.cfg上以相同的方式configuration: nrpe.cfg的命令定义如下所示:
[root@Nagios_clt plugins]# grep pacemaker /etc/nagios/nrpe.cfg command[check_pacemaker]=/usr/bin/sudo /usr/sbin/crm_mon -s
我做了两个testing:在第一个testing中,我只使用上面看到的那一行,然后从Nagios服务器上得到:
[root@Nagios_srv ]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.57.157 -c check_pacemaker NRPE: Unable to read output [root@Nagios_srv ]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.57.157 NRPE v2.14
在第二个中,我写了一个不同的命令定义:
[root@Nagios_srv ]# grep pacemaker /etc/nagios/nrpe.cfg command[check_pacemaker]=/usr/lib64/nagios/plugins/check_pacemaker.sh
虽然/usr/lib64/nagios/plugins/check_pacemaker.sh看起来像这样:
[root@Nagios_svr ]# cat /usr/lib64/nagios/plugins/check_pacemaker.sh #!/bin/bash /usr/bin/sudo /usr/sbin/crm_mon -s
我已经chmod + x check_pacemaker.sh文件。 这些都没有工作。 如果我在Nagios客户端本地运行check_pacemaker.sh文件,我会得到正确的结果:
[root@Nagios_clt ]# /usr/lib64/nagios/plugins/check_pacemaker.sh Ok: 2 nodes online, 10 resources configured
如果我使用check_nrpe在本地运行命令,我得到这个结果:
[root@Nagios_clt plugins]# /usr/lib64/nagios/plugins/check_nrpe -H localhost NRPE v2.14 [root@Nagios_clt plugins]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_pacemaker NRPE: Unable to read output
我已经configuration了一些其他的东西:
[root@Nagios_clt plugins]# grep Defaults /etc/sudoers #Defaults requiretty [root@Nagios_clt plugins]# grep nagios /etc/sudoers nagios ALL=NOPASSWD:/usr/lib64/nagios/plugins/*
check_command看起来像这样:
define command{ command_name check_pacemaker command_line /usr/lib64/nagios/plugins/check_pacemaker.sh } [root@Nagios_clt plugins]# service iptables status iptables: Firewall is not running.
此服务器上的其他检查正在使用nrpe:
我不明白为什么,有没有人有一个想法?
你的问题是不清楚谁在使用sudo运行什么。 你的插件用sudo /usr/bin/crm_mon调用crm_mon,但是不是给nagios用户sudo权限来运行crm_mon二进制文件,它只有权限运行插件(即/usr/lib64/nagios/plugins/任何东西) 。
为nagios用户添加/usr/bin/crm_mon二进制文件的无密码sudo权限, 或者将插件调用更改为使用sudo:
define command{ command_name check_pacemaker command_line sudo /usr/lib64/nagios/plugins/check_pacemaker.sh }
并从check_pacemaker.sh删除sudo 。
当对通过nrpe作为普通用户运行的命令进行故障排除时,您可以先与其他用户充分模拟sudo和all的解决scheme。 停止testing它作为根。
您可能会发现sudoers设置有问题,或者在辅助文件(如shell脚本使用的/ etc或/ var下的文件)上可能存在文件访问问题。
不pipe是什么问题,你都可以通过设置非root用户(例如itai)来拥有相同的sudoers权限,并以该用户的身份尝试/usr/lib64/nagios/plugins/check_pacemaker.sh来查看实际的错误。 nrpe不会传回错误,所以你永远不会得到这样的线索。