Я пытаюсь изобразить использование сети на моем маршрутизаторе для определенного интерфейса, используя данные из 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
Я бы сказал, тебе не следует наезжать все дерево идентификаторов SNMP OID, это занимает значительное время. Не могли бы вы попробовать snmpbulkwalk -c public -v2c 192.168.1.1 InOctets.2
и snmpbulkwalk -c public -v2c 192.168.1.1 ifHCInOctets.2
вместо? Но в любом случае эта разница выглядит странно. Есть ли у вас другие устройства SNMP для сравнения?