但是当我从shell运行命令时,它运行正常
答案 0 :(得分:5)
如果你正在使用NRPE并且收到'NRPE:无法读取输出'错误,那是因为NRPE守护程序没有返回文本数据。 Nagios核心依赖于NRPE守护进程来返回一个总结检查结果的字符串。例如,对于返回健康状态的检查结果,它可能看起来像前者,而后者则显示不健康状态。
OK - load average: 1.56, 1.37, 1.29
CRITICAL - load average: 16.59, 19.41, 21.96
如果NRPE要返回这样的东西:
FOO: bar
您将获得'NRPE:无法读取输出'错误,因为FOO不是Nagios已知的结果状态之一。通过运行类似的命令运行远程NRPE命令(取决于您的目录和检查):
libexec/check_nrpe -n -H localhost -c check_load
那应该返回OK,WARNING,CRITICAL或UNKNOWN。其他任何事都会导致错误。
答案 1 :(得分:3)
Nagios检查应该返回0, 1, 2 or 3:
当您手动运行命令时,退出状态255完全有效,因此bash不会抱怨。在命令运行后,您可以在变量$?
中检查命令的退出状态:
echo $?
答案 2 :(得分:2)
对于后人,我会为遇到这种情况的人添加一些东西。 您需要检查两件事:
检查执行检查的服务器是否有权访问正在测试的客户端 在这种情况下,localhost是服务器(和客户端)。然而,客户端上的NRPE需要明确授予服务器检查它的权限。如果您的NRPE由xinetd服务包装,则需要将nagios服务器添加到客户端conf文件(/etc/xinetd.d/nrpe)上的only_from指令
only_from = 127.0.0.1 NagiosServerHostName
NagiosServerHostName需要位于/ etc / hosts中。或者,放置NagiosServerIP
检查防火墙是否阻止您的检查。默认情况下,NRPE在端口5666上运行;确保允许该端口
答案 3 :(得分:1)
我有这个错误,结果是插件写入了一个无权写入的位置,所以我只是chmod 777那个位置并且有效
答案 4 :(得分:0)
您提到您正在通过nrpe调用check命令。如果您使用返回多行输出的check命令,则必须使用也支持多行输出的最新版本的nrpe,否则check_nrpe脚本将无法解析输出。
答案 5 :(得分:0)
我的猜测是你的check_nrpe命令没有在Nagios配置文件中正确设置。如果在/ usr / local / nagios / etc / objects /中打开Commands.cfg文件,请仔细检查您所拥有的命令设置与您在bash脚本中使用的设置完全相同。我设置的命令是:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
我的服务定义:
define service{
use generic-service
host_name ********
service_description HTTP Requests
contact_groups localadmin
check_command check_nrpe!check_vbs_sample
}
此外,我发现使用简单的脚本更容易,例如,只返回OK以便首先测试其工作的批处理脚本。
答案 6 :(得分:0)
正如几张海报所说,如果Nagios没有收到它希望从脚本中得到的响应,它将产生这个错误。
脚本可以通过多种方式生成错误。要找出错误是什么,请更新命令定义,以便将脚本中的标准错误写入日志文件:
command_line $USER1$/check_nrpe -H $ARG1$ -c $ARG2$ 2> /tmp/error.log
答案 7 :(得分:0)
我遇到了同样的错误,它与远程客户端中的防火墙有关。
答案 8 :(得分:0)
希望这会有所帮助,在我看来,这是一个ssh问题。为了解决返回码错误,我以使用nagios的服务器(如果需要,为主节点)的nagios用户身份远程访问了远程服务器。允许从主nagios服务器进入known_hosts文件。