我在http://localhost/nagios上收到错误(返回码 255 超出范围)
但是当我从 shell 运行命令时,它运行良好
如果您使用 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。其他任何事情都会导致该错误。
Nagios 检查应返回0、1、2 或 3:
当您手动运行命令时,退出状态 255 完全有效,因此 bash 不会抱怨。$?
命令运行后,您可以在变量中检查命令的退出状态:
echo $?
对于后代,我会为遇到此问题的任何人添加一些东西。您需要检查两件事:
检查执行检查的服务器是否有权访问它正在测试的客户端。在这种情况下,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 端口上运行;确保允许该端口
我遇到了这个错误,原来插件写入了一个它无权写入的位置,所以我只是 chmod 777 那个位置并且它工作
您提到您正在通过 nrpe 调用检查命令。如果您使用返回多行输出的检查命令,则必须使用也支持多行输出的最新版本的 nrpe,否则 check_nrpe 脚本将无法解析输出。
我的猜测是您的 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 以测试其工作的批处理脚本。
希望这会有所帮助,就我而言,问题是 ssh 问题。为了解决返回码错误,我以 nagios 用户身份从正在使用 nagios 的服务器(如果您愿意的话是主节点)远程访问远程服务器。允许从主 nagios 服务器进入 known_hosts 文件。
我只是遇到了同样的错误,这与远程客户端中的防火墙有关。
正如几位发帖者所说,如果 Nagios 没有从脚本中收到预期的响应,它将生成此错误。
脚本可以通过多种方式生成错误。要找出错误是什么,请更新您的命令定义,以便将脚本中的标准错误写入日志文件:
command_line $USER1$/check_nrpe -H $ARG1$ -c $ARG2$ 2> /tmp/error.log