我创建了一个 Nagios 检查,它使用以下crm_mon
命令检查我们的起搏器。该检查在 Nagios 服务器和客户端上的配置方式相同nrpe.cfg
:命令定义nrpe.cfg
如下:
[root@Nagios_clt plugins]# grep pacemaker /etc/nagios/nrpe.cfg
command[check_pacemaker]=/usr/bin/sudo /usr/sbin/crm_mon -s
我做了两个测试:第一个测试中,我只使用上面看到的那一行,然后从 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
文件。这些都不起作用。如果我check_pacemaker.sh
在 Nagios 客户端本地运行该文件,我会得到正确的结果:
[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
我配置的其他一些东西:
[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 进行: 我不明白为什么,有人知道吗?
答案1
您的问题是不清楚谁在使用 运行什么sudo
。您的插件使用 调用 crm_mon sudo /usr/bin/crm_mon
,但它没有授予nagios
用户 sudo 权限来运行crm_mon
二进制文件,而是只具有运行插件(即 中的任何内容/usr/lib64/nagios/plugins/
)的权限。
任何一个/usr/bin/crm_mon
为用户添加二进制文件的无密码 sudo 权限nagios
,或者更改插件调用以使用 sudo:
define command{
command_name check_pacemaker
command_line sudo /usr/lib64/nagios/plugins/check_pacemaker.sh
}
并sudo
从 中删除check_pacemaker.sh
。
答案2
当通过 nrpe 对以普通用户身份运行的命令进行故障排除时,您可以先用另一个用户完全模仿该解决方案,包括 sudo 和所有内容。不要以 root 身份进行测试。
您可能会发现 sudoers 设置存在问题,或者诸如 shell 脚本使用的 /etc 或 /var 下的文件之类的辅助文件可能存在文件访问问题。
无论问题是什么,您都可以通过设置非root用户(例如itai)具有相同的sudoers权限并以该用户的身份尝试/usr/lib64/nagios/plugins/check_pacemaker.sh来查看实际的错误。nrpe不会传回错误,所以您永远不会通过这种方式得到线索。