我正在使用 nagios 监控我们生产环境中的各种服务。但对于其中一项服务,我注意到尽管该服务已关闭且未运行,但 nagios 仍显示“OK”状态。我正在使用 check_http 插件来实现相同的效果。在服务器的 cli 上运行 check 命令时,我得到以下结果。我注意到返回的退出状态代码为 2,这表示 nagios 处于 CRITICAL 状态。但是,显示的状态却是“OK”。非常感谢任何有关如何处理此问题的指示。提前致谢。
我@我的服务器:~$ check_http -H localhost -p 8180 -u /SomeService/services?_wadl
连接被拒绝
HTTP 严重 - 无法打开 TCP 套接字
我@我的服务器:~$ echo $?
2
答案1
您的手动测试与 Nagios 所做的不匹配。
最有可能的是,您向 check_http 传递的 ARG 被忽略了。将您使用的服务 check_command 的命令定义与您的手动测试进行比较。
如果你还没有,请务必阅读宏及其工作原理。
答案2
感谢 Keith 和 Daniel 的指点。我找到了解决问题的方法。
NConf 中配置的检查命令 URL 路径参数为
/SomeService/服务?_wadl&_type=xml
但是在检查服务器上的 /var/log/syslog 时,我发现实际执行的 URL 路径是 /SomeService/services?_wadl (请注意删除“type=xml”部分)。
在分别使用这两个 URL 路径运行 check 命令时,我注意到,我必须按“Enter”键才能获取包含“type=xml”的 URL 的命令的退出状态,这解释了为什么 nagios 从未获得退出状态 2。而另一个 URL 无需任何人工干预即可返回退出状态。
我@我的服务器:$ check_http -H localhost -p 8180 -u /SomeService/services?_wadl&_type=xml
[1] 3543
me@myserver:$ 连接被拒绝
HTTP 严重 - 无法打开 TCP 套接字
[按 Enter 键,然后我得到退出状态]
[1]+ 退出 2 check_http -H localhost -p 8180 -u /SomeService/services?_wadl
我@我的服务器:$ check_http -H localhost -p 8180 -u /SomeService/services?_wadl
连接被拒绝
HTTP 严重 - 无法打开 TCP 套接字
[我立即得到了退出状态,无需人工干预]
在将 Nconf 中的 URL 路径更改为 /SomeService/services?_wadl 后,我开始获得正确的退出状态,并且当服务实际关闭时,nagios 开始报告 CRITICAL。但我仍然想知道,当 URL 包含“&_type=xml”时,check_http 插件为什么会等待用户干预来返回退出代码?