按照这个问题我想使用 Nagios(而不是 Cacti)监控我的 Windows 服务器的网络利用率。
是否有人对使用 NSClient 或通过 SNMP 查询 WMI 计数器有任何指导,以便 nagios 可以收集 rrd 数据并使用 pnp4nagios 进行绘图?
或者有没有人有可以实现这个功能的插件?
谢谢
答案1
我正在使用 Centreon,它提供了 perl 脚本 check_centreon_snmp_traffic。
答案2
通过使用check_bandwidth3Nagios 插件并通过 SNMP 检查。我不知道为什么我没有想到先通过 SNMP 检查,因为这是我为我的思科套件收集统计数据的方式!
答案3
标准 Nagios 插件应该包含一个 SNMP 插件,它可以很好地检查 NIC 的带宽使用情况。当 SNMP 在混合环境中具有更高的互操作性时,我从未费心使用 WMI。我尽量不使用 NRPE 或 NSClient,因为这意味着如果您进行更改或更新插件,则需要做更多工作来维护它们。
至于能否使用 RRD 工具绘制 Nagios 的数据图表,您必须设置一个脚本,该脚本将从 Nagios 检查执行中收集性能数据,并使用这些数据填充您的 RRD 数据文件。Nagios 中没有任何东西可以做到这一点。基于 Nagios 的 Groundwork OpenSource Monitor 确实提供了一些功能来做到这一点。在我们的环境中,我们使用 Nagios 进行监控,使用 Cacti 进行绘图……即使用正确的工具来完成工作……
答案4
WMI 甚至可以用于快速接口。SNMP 对于 >=1Gbps 接口不太适用,因为 Windows 上没有 64 位计数器,并且32 位计数器溢出,性能监视器计数器也不会,因为它们只是速率(字节/秒),而不是绝对计数器 [1])。你提到你有 nsclient,它可以轻松查询 WMI,因此你可以这样做:
check_nrpe -H <host> -c CheckWMIValue -a 'Query=select BytesReceivedPersec, BytesSentPersec from Win32_PerfRawData_Tcpip_NetworkInterface where name = "<interface-name>"' Check:BytesReceived:=BytesReceivedPersec Check:BytesSent:=BytesSentPersec
尽管名称为 BytesReceivedPersec,这是一个 64 位计数器(总字节数),而不是速率(字节/秒)。
[1] - 任何已经采用速率形式(字节/秒)的东西(如 perfmon 计数器)都无法正常工作。例如,如果您每 5 分钟检查一次,假设您检查一个空闲接口并得到 0 BytesReceived/sec,然后在 3 分钟内下载/读取大文件并使接口达到最大值,然后它在下一分钟回到空闲状态。当您轮询 BytesReceived/sec 时,您将再次得到 0,即使大多数时间您都在提取大量数据。您需要一个绝对的 Bytes Sent/Received 计数器,以便您可以从第二次检查中减去第一次检查并除以时间间隔。