SNMP 中 ifInOctets 与 ifHCInOctets 值的差异

SNMP 中 ifInOctets 与 ifHCInOctets 值的差异

我正在尝试使用来自 SNMP 的数据绘制路由器上特定接口的网络使用情况图表。我知道 ifInOctets/ifOutOctets 只有 32 位,在高速下会溢出,使我的图表看起来很愚蠢,但看起来 ifInOctets/ifOutOctets 和 ifHCInOctets/ifHCOutOctets 返回的值之间的差异并不总是相同的。我通过使用snmpwalk | grep InOctets和减去这些值进行了几次测试。有时我发现 32 位计数器的变化明显小于(超过 50%)64 位版本的变化,有时我看到相反的情况,64 位计数器显示的增量较小。

我是否遗漏了读取 64 位计数器的方法,或者只是它们的数据更新方式有所不同?32 位数字与 /proc/net/dev 中的数字相匹配,因此我更倾向于相信它们,但当速度过高时,包装问题会使它们无法使用:

带翻转的哑图

这里有几个例子,每个 snmpwalk 运行间隔大约 10 秒:

$ snmpwalk  -c public -v2c 192.168.1.1 | grep -i InOctets.2
IF-MIB::ifInOctets.2 = Counter32: 2291487255
IF-MIB::ifHCInOctets.2 = Counter64: 2901400127083

$ snmpwalk  -c public -v2c 192.168.1.1 | grep -i InOctets.2
IF-MIB::ifInOctets.2 = Counter32: 2297202283
IF-MIB::ifHCInOctets.2 = Counter64: 2901400298056

32 位更改:5715028

64 位更改:170973

$ snmpwalk  -c public -v2c 192.168.1.1 | grep -i InOctets.2
IF-MIB::ifInOctets.2 = Counter32: 2297528566
IF-MIB::ifHCInOctets.2 = Counter64: 2901400453366

32 位更改:326283

64 位更改:155310

答案1

RFC 2233 针对高容量接口采用了扩展的 64 位计数器,因为 32 位计数器无法提供足够的容量并且换行速度太快。

https://www.cisco.com/c/en/us/support/docs/ip/simple-network-management-protocol-snmp/26007-faq-snmpcounter.html

答案2

我觉得你不应该跑过去所有的SNMP OID 树,这需要花费大量时间。您可以尝试snmpbulkwalk -c public -v2c 192.168.1.1 InOctets.2使用snmpbulkwalk -c public -v2c 192.168.1.1 ifHCInOctets.2吗?但无论如何,这种差异看起来很奇怪。您有其他 SNMP 设备可以比较吗?

相关内容