nagios 错误地报告数据包丢失

nagios 错误地报告数据包丢失

最近,在我的 nagios 3.2.3 安装(CentOS5,监控约 300 台主机、1150 个服务)上,偶尔会报告 50-60 台主机同时出现大量数据包丢失。问题是,这是假的。手动运行 ping(或其自己的 check_ping 二进制文件)未发现任何受影响主机出现故障。到目前为止,我发现的唯一可能的解决方法是:

  1. 手动运行所有检查(它们将会成功,但可能会在下次检查时再次出现)
  2. 确认并等待问题消失(可能需要几分钟)

我怀疑(但除了单次重新安排的检查成功之外没有其他特别的原因)问题可能在于所有检查都是一起批量安排的 - 在这种情况下,在安排中引入一些抖动(如何?)可能会有所帮助。或者可能是完全不同的事情。

有人有想法吗?

编辑:

对于那些对建设性辩论(而不是得分)感兴趣的人。我并不是想测量数据包丢失。在这种情况下,网络性能不是我关心的问题,如果是的话,我会用适当的工具来调查。NAGIOS(对于粗心的人来说)主要用于检查主机服务的正常运行并生成警报。当它开始生成大量可疑警报时,因此非常烦人。我 99.9% 肯定问题是由于以下原因造成的:

  1. 一些 Nagios/Nagios-Plugin 问题
  2. 一些系统(内存-CPU- I/O - 网络堆栈)问题

可能是由于 nagios 调度程序发送的请求激增造成的。数据包丢失率都超过 50% - 如果这是真的,我们的手机就会融化。到目前为止,我没有 (2) 的证据,所以我在 (1) 中寻找“现有技术”。我的想法很可能是错误的,但如果我必须使用 wireshark 或类似软件,我将非常感激您对要寻找什么的建议。

答案1

在您使用不同的工具验证了数据包丢失之后,首先您需要找出哪个插件实际上正在检查数据包丢失。找到该插件并在 nagios 中定义的间隔后手动运行它,并检查其输出是否能给您提供线索。问题似乎不是数据包丢失,而是插件故障。验证插件输出后,将该输出与其他工具的输出进行比较(查看它是否显示任何数据包丢失,而其他工具是否没有显示)。通常插件是 check_ping。

答案2

我第一次尝试使用 Nagios 时也遇到了类似的问题。在尝试解决问题时,我发现博客文章指出,如果您尝试在服务器上没有 IPV6 地址的 IPV6 服务器上 ping 操作,则可能会出现此问题。

因此,解决方案是重写 Nagios 配置对象文件中的“check_ping”命令。在我们的一个 .cfg 文件中,我添加了以下内容:

define command {
    command_name    check_ping_ipv4
    command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
}

请注意命令后面的“-4”参数check_ping。它将强制 ping 仅使用 IPV4。定义上述命令后,我可以在服务定义中使用它。例如:

define service {
    service_description     PING
    host_name               MYHOST
    check_command           check_ping_ipv4!100.0,20%!500.0,60%
    use                     generic-service
}

答案3

手动运行 ping(或其自身的 check_ping 二进制文件)未发现任何受影响主机出现故障

这是检查数据包丢失的非常愚蠢的方法。您应该定期比较 NIC 记录的重新传输(netstat -r)或使用 pastmon 或 wireshark 等工具捕获流量。因为:

1)您已经说过数据包丢失是突发的——您怎么知道在数据包丢失发生时您正在路径上运行 ping ?

2)少量的数据包丢失会对吞吐量产生很大的影响 - 这就是我们监控它们的原因 - 如果您想确认 1% 的数据包丢失,那么您需要在路径上发送至少 200 个数据包 - 您发送了多少个?

3)然而,这里最重要的 WTF 是 TCP 和程度较小的 UDP 的行为与 ICMP 非常不同 - 后者受拥塞问题的影响要小得多(即使假设一致的 1500 MTU)

也就是说,你没有提供有效证据证明数据包丢失是虚假的。但是,你提供的证据表明你并不真正了解你试图测量的内容。

但同一网络上的其他主机没有相同的损失

你认为数据包丢失只发生在主机之间吗?这大错特错。

相关内容