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