ifInOctets 与 ifHCInOctets 值中的 SNMP 差异

pet*_*azz 7 networking snmp linux-networking

我正在尝试使用来自 SNMP 的数据在我的路由器上绘制特定接口的网络使用情况。我知道 ifInOctets/ifOutOctets 只有 32 位并且会在高速时溢出并使我的图形看起来很笨拙,但看起来 ifInOctets/ifOutOctets 和 ifHCInOctets/ifHCOutOctets 返回的值的差异并不总是相同的。我已经通过使用snmpwalk | grep InOctets和减去这些值进行了几次测试。有时我看到 32 位计数器的变化明显小于 64 位版本的变化(超过 50%),有时我看到它相反,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

32 位更改:326283

64 位更改:155310

小智 0

我想说你不应该运行整个SNMP OID 树,这会花费大量时间。你能尝试snmpbulkwalk -c public -v2c 192.168.1.1 InOctets.2一下snmpbulkwalk -c public -v2c 192.168.1.1 ifHCInOctets.2吗?但无论如何,这种差异看起来很奇怪。您有其他 SNMP 设备可以比较吗?