Страница 1 из 1

net-snmp + counter64

Добавлено: 2008-11-05 18:17:32
sibdoma
Хотелось бы научить net-snmp отдавать загрузку интерфейсов через 64-битные счетчики, т.к. двно ушел за 128 Мбит...
Но вот проблема в том, что snmpwalk .... | grep Counter64 не показывет соответствующей ветки, хотя в стандартных мибах она есть.
Подскажите как это исправить?

Re: net-snmp + counter64

Добавлено: 2008-11-05 18:49:23
Yam
Обновиться?

Код: Выделить всё

%snmpwalk -v 2c -c community 192.168.1.1 | grep Counter64 | less
IF-MIB::ifHCInOctets.1 = Counter64: 6079328443
IF-MIB::ifHCInOctets.100 = Counter64: 7890
IF-MIB::ifHCInOctets.106 = Counter64: 13669084
IF-MIB::ifHCInOctets.107 = Counter64: 17745479
IF-MIB::ifHCInOctets.115 = Counter64: 337254268

Код: Выделить всё

snmpwalk -V
NET-SNMP version: 5.4.1.2
Может быть их не snmpwalk у вас не показывает, а их просто нет? Для уверенности можете пройтись каким-нибудь другим инструментом, можно даже из более других ОС.

Re: net-snmp + counter64

Добавлено: 2008-11-05 19:18:48
sibdoma
Вот, что у меня

Код: Выделить всё

snmpwalk -v2c -c community  192.168.1.1   | grep Counter64 | less
HOST-RESOURCES-MIB::hrSWRunParameters.51687 = STRING: "Counter64"

Код: Выделить всё

snmpwalk -V
NET-SNMP version: 5.4.1.2
А как их туда добавить?

Re: net-snmp + counter64

Добавлено: 2008-11-05 19:35:35
hizel
а вы уверены, что ваше оборудование поддерживает ifXTable ?

Re: net-snmp + counter64

Добавлено: 2008-11-05 21:48:29
sibdoma
Стоят интеловские гигабиты, при этом под linux'ом отдает эти параметры по дефолту

Код: Выделить всё

pciconf -lv
em0@pci0:13:0:0:        class=0x020000 card=0x108c15d9 chip=0x108c8086 rev=0x03 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82573E Intel Corporation 82573E Gigabit Ethernet Controller (Copper)'
    class      = network
    subclass   = ethernet
em1@pci0:15:0:0:        class=0x020000 card=0x109a15d9 chip=0x109a8086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82573L Intel PRO/1000 PL Network Adaptor'
    class      = network
    subclass   = ethernet

Re: net-snmp + counter64

Добавлено: 2008-11-06 0:23:29
Yam
Если бы hizel, про IfXTable не заговорил, так бы и не вспомнил. Дело в том, что в freebsd поддержка counter64 для интерфейсов появилась только с версией net-snmp 5.4 и по-умолчанию выключена. Пересоберите порт так:

Код: Выделить всё

make WITH_MFD_REWRITES=yes install clean

Re: net-snmp + counter64

Добавлено: 2008-11-06 2:07:45
sibdoma
Спасибо. Прямо на крыльях полетел пересобирать, НО аналогично
Нашел данную информацию в источнике

Код: Выделить всё

- Experimental support for 64bit interface counters (ifXTable). Enable
        via '--with-mib-modules=if-mib --enable-mfd-rewrites'.
Пересобрал и так, даже при конфигурации пакета видно, что включает ifXTable, но пока тщетно...

Re: net-snmp + counter64

Добавлено: 2008-11-06 10:25:26
sibdoma
На всякий случай опишу последовательность действий

Код: Выделить всё

cd /usr/ports/net-mgtm/net-snmp
make extract
cd work/net-snmp-5.4.1.2/
./configure --enable-mfd-rewrites
cd ../..
make install clean

Re: net-snmp + counter64

Добавлено: 2008-11-06 11:14:50
Yam
Читайте внимательно, написал же, как правильно порт собрать, зачем из исходников сами собирать стали??

Код: Выделить всё

# cd /usr/ports/net-mgmt/net-snmp
# make WITH_MFD_REWRITES=yes install clean
# rehash
# snmpconf -g basic_setup
# echo snmpd_enable=\"YES\" >> /etc/rc.conf 
# echo snmpd_conffile=\"/usr/local/etc/snmpd.conf\" >> /etc/rc.conf
# /usr/local/etc/rc.d/snmpd start
# snmpwalk -v 2c -c public 127.0.0.1 | grep Counter64 | head
HOST-RESOURCES-MIB::hrSWRunParameters.48988 = STRING: "Counter64"
IF-MIB::ifHCInOctets.1 = Counter64: 0
IF-MIB::ifHCInOctets.2 = Counter64: 2964709627
IF-MIB::ifHCInOctets.3 = Counter64: 0
IF-MIB::ifHCInOctets.4 = Counter64: 137152345
IF-MIB::ifHCInOctets.5 = Counter64: 211284803
IF-MIB::ifHCInOctets.6 = Counter64: 17468966
IF-MIB::ifHCInUcastPkts.1 = Counter64: 0
IF-MIB::ifHCInUcastPkts.2 = Counter64: 12456584
IF-MIB::ifHCInUcastPkts.3 = Counter64: 0
# uname -a
#7.0-RELEASE-p4
# snmpwalk -V
NET-SNMP version: 5.4.1.2
ЗЫ и всё равно из исходников собрали не правильно, нужно было так:

Код: Выделить всё

./configure --enable-mfd-rewrites --with-mib-modules=if-mib

Re: net-snmp + counter64

Добавлено: 2008-11-06 11:47:41
sibdoma
Сделал все 1 в 1

Код: Выделить всё

snmpwalk -V
NET-SNMP version: 5.4.1.2
uname -a
FreeBSD 7.1-PRERELEASE
snmpwalk -v 2c -c public 127.0.0.1 | grep Counter64
HOST-RESOURCES-MIB::hrSWRunParameters.41918 = STRING: "Counter64"

Re: net-snmp + counter64

Добавлено: 2008-11-06 13:07:38
Yam
Ну тогда у меня варианты исчерпаны. Если собрать так и не получится и сильно нужно, возьмите собранный с поддержкой Counter64 пакет: http://slil.ru/26307281

Re: net-snmp + counter64

Добавлено: 2008-11-06 23:45:02
sibdoma
Нашел такую переписку по данному вопросу. Желающие могут прочитать полностью здесь http://lists.freebsd.org/pipermail/free ... 19748.html

Код: Выделить всё

> I've just found that ports/net-snmp (version 5.4) built
> WITH_MFD_REWRITES=yes supports IF-MIB, and in theory should show 64-bit
> ifHC* counters but it does not.
> 
> It seems agent/mibgroup/if-mib/data_access/interface_sysctl.c that obtains
> interface statistics from the kernel.
> The function netsnmp_arch_interface_container_load() has the following code:
> 
>         /* get counters */
>         entry->stats.ibytes.low = ifp->ifm_data.ifi_ibytes;
>         entry->stats.ibytes.high = 0;
>         entry->stats.iucast.low = ifp->ifm_data.ifi_ipackets;
>         entry->stats.iucast.high = 0;
>         entry->stats.imcast.low = ifp->ifm_data.ifi_imcasts;
>         entry->stats.imcast.high = 0;
> 
> So, it always produce 32-bit quantities. My question is:
> does FreeBSD/i386 kernel maintain 64-bit counters for interface statictics
> these days? If yes, since what version?

It does not, because not all architectures have atomic 64-bit increments 
and adds. Implementing 64-bit counters on these architectures would 
require some kind of locking. This was discussed in the past.

You might look at the IF-MIB implementation of bsnmp (it is in the base 
system). It uses periodic polling to detect wraps of the 32-bit 
counters. The poll interval is tuned to the fastest interface in the 
system (given that all interfaces reported the correct speed).

Note, that the netsnmp implementation is plain wrong - if the daemon 
does not support the HC counters it should never pretend to do. This is 
explicitely stated somewhere in the RFCs.

The problem is not the CPU horsepower. The problem is that you update 
these counters on each incoming packet. No problem for desktops, but if 
you want to route several 100kps this may hurt. I have no idea, how IPFW 
does it. Perhaps it just declares the variables as 64-bit and if the 
value is wrong because of a race condition, then it is just wrong. With 
SNMP I would not like to have wrong counters - people use these counters 
for accounting purposes.

Re: net-snmp + counter64

Добавлено: 2008-11-06 23:46:31
sibdoma
Yam писал(а):Ну тогда у меня варианты исчерпаны. Если собрать так и не получится и сильно нужно, возьмите собранный с поддержкой Counter64 пакет: http://slil.ru/26307281
Спасибо. Но не помогло.
А какой сетевой контроллер ты используешь?

Re: net-snmp + counter64

Добавлено: 2008-11-07 10:17:59
hizel
хм попробовал у себя

Код: Выделить всё

user@host /usr/local/etc/snmp >uname -a
FreeBSD serv4 6.2-RELEASE FreeBSD 6.2-RELEASE #1: Wed Nov 28 10:43:52 MSK 2007     user@host:/usr/obj/usr/src/sys/DIMI  i386

Код: Выделить всё

user@host /usr/local/etc/snmp >pkg_info | grep net-snmp
net-snmp-5.4.1.2_2  An extendable SNMP implementation
/etc/make.conf

Код: Выделить всё

.if ${.CURDIR} == ${PORTSDIR}/net-mgmt/net-snmp
WITH_MFD_REWRITES="YES"
.endif
/usr/local/etc/snmp/snmpd.conf

Код: Выделить всё

rocommunity  public 127.0.0.1
/etc/rc.conf

Код: Выделить всё

snmpd_enable="YES"
snmpd_conffile="/usr/local/etc/snmp/snmpd.conf"

Код: Выделить всё

user@host /usr/local/etc/snmp >snmpwalk -c public -v2c 127.0.0.1 ifXTable
IF-MIB::ifName.1 = STRING: em0
IF-MIB::ifName.2 = STRING: em1
IF-MIB::ifName.3 = STRING: lo0
IF-MIB::ifInMulticastPkts.1 = Counter32: 2413708
IF-MIB::ifInMulticastPkts.2 = Counter32: 78999635
IF-MIB::ifInMulticastPkts.3 = Counter32: 0
IF-MIB::ifInBroadcastPkts.1 = Counter32: 0
IF-MIB::ifInBroadcastPkts.2 = Counter32: 0
IF-MIB::ifInBroadcastPkts.3 = Counter32: 0
IF-MIB::ifOutMulticastPkts.1 = Counter32: 0
IF-MIB::ifOutMulticastPkts.2 = Counter32: 0
IF-MIB::ifOutMulticastPkts.3 = Counter32: 0
IF-MIB::ifOutBroadcastPkts.1 = Counter32: 0
IF-MIB::ifOutBroadcastPkts.2 = Counter32: 0
IF-MIB::ifOutBroadcastPkts.3 = Counter32: 0
IF-MIB::ifHCInOctets.1 = Counter64: 2429162666
IF-MIB::ifHCInOctets.2 = Counter64: 516047978
IF-MIB::ifHCInOctets.3 = Counter64: 149866402
IF-MIB::ifHCInUcastPkts.1 = Counter64: 55229584
IF-MIB::ifHCInUcastPkts.2 = Counter64: 78999635
IF-MIB::ifHCInUcastPkts.3 = Counter64: 1314988
IF-MIB::ifHCInMulticastPkts.1 = Counter64: 2413708
IF-MIB::ifHCInMulticastPkts.2 = Counter64: 78999635
IF-MIB::ifHCInMulticastPkts.3 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.3 = Counter64: 0
IF-MIB::ifHCOutOctets.1 = Counter64: 471056170
IF-MIB::ifHCOutOctets.2 = Counter64: 0
IF-MIB::ifHCOutOctets.3 = Counter64: 149866402
IF-MIB::ifHCOutUcastPkts.1 = Counter64: 49710977
IF-MIB::ifHCOutUcastPkts.2 = Counter64: 0
IF-MIB::ifHCOutUcastPkts.3 = Counter64: 1314988
IF-MIB::ifHCOutMulticastPkts.1 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.2 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.3 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.3 = Counter64: 0
IF-MIB::ifHighSpeed.1 = Gauge32: 1000
IF-MIB::ifHighSpeed.2 = Gauge32: 1000
IF-MIB::ifHighSpeed.3 = Gauge32: 0
IF-MIB::ifPromiscuousMode.1 = INTEGER: true(1)
IF-MIB::ifPromiscuousMode.2 = INTEGER: false(2)
IF-MIB::ifPromiscuousMode.3 = INTEGER: false(2)
IF-MIB::ifConnectorPresent.1 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.2 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.3 = INTEGER: true(1)
IF-MIB::ifAlias.1 = STRING:
IF-MIB::ifAlias.2 = STRING:
IF-MIB::ifAlias.3 = STRING:
IF-MIB::ifCounterDiscontinuityTime.1 = Timeticks: (0) 0:00:00.00
IF-MIB::ifCounterDiscontinuityTime.2 = Timeticks: (0) 0:00:00.00
IF-MIB::ifCounterDiscontinuityTime.3 = Timeticks: (0) 0:00:00.00
сетевушка как видно, интеловская - гигабитная, две :)

Re: net-snmp + counter64

Добавлено: 2008-11-07 10:32:27
sibdoma
Теперь я вообще запутался. В той переписке я вижу такую же проблему как и у себя и при этом говорят, что поддержки счетчиков НЕТ, но у всех кроме меня они ЕСТЬ.
А можно посмотреть на кусок кода у вас, который указан в переписке?

Re: net-snmp + counter64

Добавлено: 2008-11-07 10:36:53
Yam
Мне кажется вы путаете тёплое с мягким. К вашей проблеме это отношения имеет косвенное. Речь в переписке идет о том, что для заполнения 64-разрядных счетчиков SNMP используются 32-разрядные счетчики ядра. Т.е. не смотря на то, что значение мы считывали бы с IF-MIB::ifHCInOctets.1 = Counter64, получали бы всё равно величину ограниченную 32-разрядами, которая переходила бы в ноль, по достижении 4294967295, вместо того что бы рости дальше. Т.е. по видимому, вне зависимости от того, работали бы они у вас или нет, смысл в их использовании отпадает. Но это не объясняет причину по которой у вас их нет.
sibdoma писал(а):А какой сетевой контроллер ты используешь?
Какие конкретно прямо сейчас посмотреть не могу, да и к железу этот вопрос отношения скорей всего не имеет, на машине откуда приведены счетчики два интерфейса fxp (100mbit) и msk (1000Mbit) и несколько vlan.

Re: net-snmp + counter64

Добавлено: 2008-11-07 10:59:44
sibdoma
Исправляю сообщение...
УРАААА собрал в очередной раз - счетчики появились. Пока выясняю, что я делал в прошлый раз по другому

Re: net-snmp + counter64

Добавлено: 2008-11-07 11:41:50
sibdoma
Завелось и на исходной тачке. Может ли быть проблема в параметрах запуска snmp? Запускал не через /usr/local/etc/rc.d/snmpd start, а просто демон snmpd. Разница только в этом...

Подвожу резюме
Все огромное СПАСИБО за помощь. Я уже уже планировал плюнуть и снимать только со свитча. Ключевой момент именно в

Код: Выделить всё

make WITH_MFD_REWRITES=yes install clean
.

Re: net-snmp + counter64

Добавлено: 2008-11-07 12:23:14
hizel
я бы рекомендовал засунуть в make.conf соответствующие строчки
чтобы при обновление не сломалось ;)

Re: net-snmp + counter64

Добавлено: 2008-11-07 15:58:13
Alex Keda
[offtop]
вернул бы ты аватрку....
на эту без слёз не взглянешь...
[/offtop]

Re: net-snmp + counter64

Добавлено: 2008-11-07 16:12:59
hizel

Код: Выделить всё

user@host ~ >snmpget -c public -v2c 127.0.0.1 ifHCOutOctets.3
IF-MIB::ifHCOutOctets.3 = Counter64: 12110274775
и не переполняются счётчики :)