Nagios(返回代码 141 超出范围)在随机服务上

Nagios(返回代码 141 超出范围)在随机服务上

我们的一台服务器上运行 Nagios 已经有一段时间没有出现任何问题,但是最近我们得到了(返回代码 141 超出范围)。

由于我们的服务上线,服务器负载有所增加,但负载仍然不是很高(平均负载最大值:0.7)。在启动之前,Nagios 中的一切都运行良好。

参见图片,当前负载返回代码 141。2 分钟前,Beancounters VZ 返回了 141。这种情况不正常。只有 HTTP 和 PING 不会返回 141,它们不会在 nrpe 上中继。

http://pic-hoster.net/view/45030/ScreenShot2012-05-28at5.31.35PM.png

我注意到,如果我从我的 Nagios 主机针对有问题的客户端执行命令,有时返回会丢失:

root@xxx23:/usr/local/nagios/libexec# ./check_nrpe -H 123.123.123.123 -c check_apt 
APT OK: 0 packages available for upgrade (0 critical updates). 
root@xxx23:/usr/local/nagios/libexec# ./check_nrpe -H 123.123.123.123 -c check_apt 
root@xxx23:/usr/local/nagios/libexec# ./check_nrpe -H 123.123.123.123 -c check_apt 
APT OK: 0 packages available for upgrade (0 critical updates). 

如果我直接在客户端上执行它,就不会发生这种情况。

我做了什么:

  • 我增加了这个容器的 OpenVZ 内存和 CPUUnit。
  • 我已更新至最新的 Nagios 3.4.1(来自源代码)
  • 我通过 nrpe 在本地执行了 Nagios 检查 - 从未得到 141 或其他结果

几个月前,我在另一台服务器上也遇到了同样的问题。没有找到问题所在,我重新安装了服务器。现在可以正常工作了。

有人有想法吗?

更新

我想我找到了它,已经一个小时没有发生过了。

SIGPIPE 是一个很好的提示,我认为是系统出了问题,而不是 nagios 出了问题。

我调整了 openvz 配置和限制。如果它保持稳定,我会报告。

答案1

我们遇到过类似的问题,容器中通过 NRPE 检查的一项服务返回了预期的WARNING,几分钟后,同一服务又返回了CRITICAL141/SIGPIPE 错误。下次检查时,它又返回了WARNINGCRITICAL然后WARNING等等。

我针对错误执行了流量捕获,发现Nagios 问题 #305非常准确地描述我所观察到的情况。这似乎是由于使用 SSL 时 NRPE 服务器端未正确关闭连接 ( SSL_shutdown()) 导致其向客户端发送 TCP RST,从而导致读取中止,因此发出 SIGPIPE。

将问题报告中附带的补丁应用nrpe-ssl_shutdown-2.patch到 NRPE 源,重建并重新安装/重新启动它似乎可以阻止问题重复发生,并且现在可以正常报告警告而没有严重错误。

答案2

我们多次遇到过这个问题;这似乎是由于插件意外死亡造成的。

我们采取的行动:

  1. 将 Nagios 中的插件超时时间增加到 120
  2. 在一些复杂的 perl 插件上,禁用 EPN(添加到脚本第二行 #nagios:-epn)
  3. 检查使用的 NRPE,确保 NRPE 使用的是 /dev/urandom,这样它就不会因熵不足而阻塞
  4. 在nrpe.cfg中设置合理的command_timeout(30秒)
  5. 确保 Nagios 服务器有足够的内存/CPU 来运行所有需要同时运行的检查。

他们之间,这些似乎解决了这个问题。

答案3

退出代码 141 对应于信号 141 - 128 = 13。man 7 signal 告诉我们信号 13 是 SIGPIPE(即,我们正在与之交谈的进程消失了)。有一个错误报告称,这与 OpenVZ 未发送早期信号有关https://bugzilla.openvz.org/show_bug.cgi?id=1901

相关内容