我已经创建了 Nagios 检查,但它一直返回 NRPE:无法读取输出,知道原因吗?

我已经创建了 Nagios 检查,但它一直返回 NRPE:无法读取输出,知道原因吗?

我创建了一个 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不会传回错误,所以您永远不会通过这种方式得到线索。

相关内容