我正在尝试使用 collectd 监控 150 台以上主机的 ping 时间和接口流量,使用 snmp 和 ping 插件(节点大多是路由器)。服务器读取统计数据(ping/snmp)并通过 rrdtool 插件将其写入磁盘。对于少数主机,一切都很好 - 但是当我放入一百台主机时,许多图表 - 尤其是 ping 时间图表 - 变得支离破碎,只显示预期值的一小部分或什么都没有。日志(在调试级别)显示大量错误,例如:
rrdtool plugin: rrd_update_r (...) failed: ... illegal attempt to update using time 1393957157 when last update time is 1393957286 (minimum one second step)
相同的站点可以从 CLI 顺利 ping 通,并且报告了一些 snmp 数据(但不是全部,并且不可靠)。
collectd 网站上的常见问题解答提到了客户端/服务器时间差异或加载了多个插件 - 在这种情况下,两者都被排除。在 CentOS6 上运行 collectd 5.4.1。我曾尝试过提升红色/写入线程,但没有成功。
编辑:此后我尝试激活 write-graphite 插件,结果 rrd 和 graphite 中的图形错误完全相同。因此问题似乎出在 ping 插件上(而不是磁盘 I/O 或写入后端)。
编辑2:失败的主机(大部分)南添加到rrd/graphite/cvs文件。
编辑3:经过多次尝试和错误,我发现当尝试 ping 59 个主机以上时,就会出现故障,此时 collectd 进程打开了大约 63 个套接字。因此,似乎有人在超过该数量的套接字时会遇到问题。然而,这似乎不是一个硬性限制,因为在插件中配置 116 个主机时,我可以看到 collectd 打开了 118 个套接字。因此,这可能是每个线程的问题,也可能是 liboping (1.5.1) 中的某个问题