NRPE无法读取输出,但是为什么?

我有NRPE的这个问题,到目前为止我在网上发现的所有东西似乎指向了我已经尝试过的东西。

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient 

 NRPE v2.12 

如预期。

手工运行命令(如“nrpeclient”中的nrpe.cfg中所定义的)给出了预期的响应

nrpe.cfg:

 command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge "Expected response" 

但是,如果我尝试从Nagios服务器运行命令,我得到以下内容:

 # /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage NRPE: Unable to read output 

任何人都可以想到我可能犯了一个错误吗? 我在其他多台服务器上做了同样的事情,没有任何问题。 我能想到的唯一区别是这个盒子是基于RHEL 5的,而其他的是基于RHEL 4的。

我所testing的那两个比特是大多数人似乎在人们遇到这个问题时提出的build议。

我应该提到,当我重新启动nrpe时,在日志中出现奇怪的错误:

 nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading nrpe[14534]: Continuing with errors... nrpe[14535]: Starting up daemon nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients! nrpe[14535]: Listening for connections on port 5666 nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck 

尽pipe如此,它清楚地读取/usr/local/nagios/etc/nrpe.cfg文件来获取它正在讨论的内容。

    你有一个权利问题。

    将命令更改为:

     command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge 

    (添加sudo)

    然后,将nagios用户添加到sudoers:

     nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage 

    或者你可以只是chmod文件…这也适用。

    如果您使用的是CentOS,Red Hat,Scientific或Fedora,请确保在sudoers文件中禁用Defaults requiretty

    简单的回答:如果你使用的是Bash插件,确保你有一个shebang说明应该使用哪个解释器: #!/bin/bash


    我用自己写的一个Nagios插件面对同样的问题。 脚本在本地启动时按预期运行,即使使用以下语句作为用户nagios运行:

     $ sudo sudo -s -u nagios $ /path/to/my/plugin.sh STATUS: OK 

    但是从Nagios3服务器使用NRPE远程启动失败:

     $ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin NRPE: Unable to read output 

    我终于通过在我的脚本中添加一个shebang来解决这个问题,因为通过NRPE运行脚本似乎没有使用和sudo sudo -s -u nagios一样的解释器。

    check_nrpe得到'NRPE:无法读取输出',尽pipe检查本地工作,因为我使用的插件不能很好地与SELinux。 禁用它,并确保删除文件的上下文:

     $ ls -l check_om_storage -r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis $ setfattr -x security.selinux check_om_storage $ ls -l check_om_chassis -r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis 

    在我的情况下,问题很简单 – 用户nagios无法执行脚本。 在chmod之后,它开始工作。 Sudo没有必要。 它甚至是邪恶的:)

    检查path,权限,selinux,iptables。

    我的客户端是一个path问题:nrpe.cfg,请仔细检查check_ *插件名称的命令path。 这些可能会令人困惑,(lib / local)(libexec / plugins)作为path名。 我错误地抽出了从注释的预先打包的nrpe cfg文件中放置的path来发出命令。 make install或yum插件安装将这些放在difft目录中。

    commaneted:/ usr / local / nagios / libexec / check_disk

    realpath:/ usr / lib / nagios / plugins / check_disk

    从服务器,我能够确认它不是一个防火墙问题,可以telnet到5666端口,可以运行一个check_nrpe覆盖并获得状态作为返回值。 可以在本地运行命令,但nrpe在nrpe.cfg中的客户端上有错误的path。

    在我的情况下,只有一个插件失败,而其他几个工作正常。 原来是LOCALE的问题。

    这个插件是check_mem.sh ,它在free的输出中为Mem执行了一个grep。 但是系统范围LOCALE返回了Speicher (德语)而不是Mem ,所以所有收到的值都是空string。

    这是一个权限问题,只是给脚本执行权,它会好的:

    这里举一个例子: 之前/远程主机

     [root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh -rwxr--r-- 1 root root 1598 Jul 7 10:55 /usr/lib/nagios/plugins/check_mem.sh 

    NRPE服务器

     [root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb NRPE: Unable to read output 

    之后: 远程主机

     [root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh [root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;; 

    问题已解决。

    这可能是因为你没有安装你的Nagios插件,NRPE找不到它们,或者访问它们。

    我从来没有把我的命令添加到Sudoers。 确保命令由Nagios用户拥有,并且是可读的。

    我认为你必须将插件添加到本地目录/usr/lib64/nagios/plugins/* 。 我和你有同样的问题,我可以解决这个问题。

    我有你写的问题。 我跑的testing是从perl。 把这一行放到文件/etc/nagios/nrpe.cfg ,使其工作。

     command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 

    有一篇非常好的文章,涵盖了整个NRPE代理程序的安装和configuration以及许多check_commands的例子,当我需要在新的服务器上安装NRPE的时候,我会使用这篇文章。 更重要的是,在页面结尾处,您可以find一个很酷的脚本,它可以自动为您安装和configurationNRPE(基于您设置的variables),文章可以在这里find:

    当NRPE服务器以用户nrpe而不是nagios启动时,通常会发生这种情况。

    /etc/nagios/nrpe.cfg文件中将nrpe_user值更改为nagios应该可以解决您的问题。

    如果需要, nrpe_group也可以改变。

    还有一件事要检查,如果你的命令使用sudo -u <another user>来运行命令,那么libexec目录(和上面的目录)必须可以被用户读取。

    例如,如果你的命令是:

     command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ... 

    tomcat用户必须能够访问该文件。

    解决这个问题的一个方法是:

     chmod 0775 /usr/local/nagios/ chmod 0755 /usr/local/nagios/libexec 

    用你的可执行文件所在的地方replace掉最后一部分

    我有同样的问题,我设法通过杀死nagios进程(在受监控的机器上)来解决它:

     ps -ef | grep nagios kill -9 [NagiosProcessNumber] /etc/init.d/nagios-nrpe-server start 

    之后一切顺利。

    在我的情况下,被监视的日志文件由root:adm拥有,所以将nagios用户添加到adm组使check_log命令成功,但是只有在被监视主机上直接执行。 它在Nagios服务器上继续使用check_nrpe失败,直到我重新启动监控主机上的nagios-nrpe-server服务,例如

     service nagios-nrpe-server restart 

    所以显然重新启动服务是必要的权限更改生效的NRPE,但它花了我一会儿才弄明白这一点。

    缺lessnrpe客户端上的Nagios插件。

    不要使用yum install nagios-plugins(nagios-plugins-2.0.3-1.el6.x86_64)。 它不会安装所有的插件。 下载nagios-plugins-1.4.11.tar.gz并按照本文档中的说明操作。

    http://www.thegeekstuff.com/2008/06/how-to-monitor-remote-linux-host-using-nagios-30/

    我有这个问题,我解决了禁用selinux

    setenforce 0