Почему ловушка CISCO-ERR-DISABLE-MIB не отображает информацию об интерфейсе и VLAN в Icinga?

Почему ловушка CISCO-ERR-DISABLE-MIB не отображает информацию об интерфейсе и VLAN в Icinga?

У меня есть cisco и сервер мониторинга с icinga (он же nagios, thruk). Я хочу получать ловушки от cisco и показывать их в icinga. Но я не могу увидеть интерфейс и vlan для ловушки errdisable.

Я скачал mibs с cisco, включая CISCO-ERR-DISABLE-MIB.my. Затем я конвертировал его для snmptt с помощью этой команды:

snmpttconvertmib --in=CISCO-ERR-DISABLE-MIB.my --out=snmptt.conf --exec='/bin/bash /usr/local/bin/trap/submit_check_result $r '"errdisable 2" -net_snmp_perl --format=4

что дало следующую конфигурацию (я заменил абсолютный путь к mib на ... и значения переменных на ...):

#
#
#
#
MIB: CISCO-ERR-DISABLE-MIB (file:/.../CISCO-ERR-DISABLE-MIB.my) converted on Wed Sep  8 16:49:53 2021 using snmpttconvertmib v1.4.2
#
#
#
EVENT cErrDisableInterfaceEvent .1.3.6.1.4.1.9.9.548.0.1.1 "Status Events" Normal
FORMAT cErrDisableInterfaceEvent - cErrDisableIfStatusCause:$1 
EXEC /bin/bash /usr/local/bin/trap/submit_check_result $r errdisable 2 "cErrDisableInterfaceEvent - cErrDisableIfStatusCause:$1 "
SDESC
The cErrDisableInterfaceEvent is generated when an interface
or {interface, vlan} is error-disabled by the feature
specified in cErrDisableIfStatusCause.
cErrDisableInterfaceEvent is deprecated and replaced by 
cErrDisableInterfaceEventRev1.
Variables:
  1: cErrDisableIfStatusCause
     Syntax="INTEGER"
       1: udld
       ...
       9: portSecurityViolation
     Descr="This object specifies the feature/event that caused the
        {interface, vlan} (or the entire interface) to be
        error-disabled."
EDESC
#
#
#
EVENT cErrDisableInterfaceEventRev1 .1.3.6.1.4.1.9.9.548.0.2 "Status Events" Normal
FORMAT cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause:$1 
EXEC /bin/bash /usr/local/bin/trap/submit_check_result $r errdisable 2 "$N - $+1 "
SDESC
The cErrDisableInterfaceEventRev1 is generated when an
interface or {interface, vlan} is error-disabled by the 
feature specified in cErrDisableIfStatusCause.
cErrDisableInterfaceEventRev1 deprecates 
cErrDisableInterfaceEvent to make it RFC 2578 compliant. 
According to section 8.5 of RFC 2578, the next
to last sub-identifier in the name of any newly-defined
notification must have the value zero.
Variables:
  1: cErrDisableIfStatusCause
     Syntax="INTEGER"
       1: udld
       ...
       9: portSecurityViolation
     Descr="This object specifies the feature/event that caused the
        {interface, vlan} (or the entire interface) to be
        error-disabled."
EDESC

Есть две ловушки, меня интересует только cErrDisableInterfaceEventRev1, но не устаревший cErrDisableInterfaceEvent.

Это мой send-errdisable.sh, который я использую для генерации тестового события errdisable:

TO_HOST=icinga.example.com
community=abcabc

snmptrap -m ALL -v 2c -c $community $TO_HOST '' CISCO-ERR-DISABLE-MIB::cErrDisableInterfaceEventRev1 \
CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusCause.2.0 i 1 \
2>/dev/null

Теперь, когда я генерирую событие errdisable, в выводе плагина icinga для службы errdisable я получаю следующий текст: cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause:udld
но я ожидаю, что интерфейс и vlan будут там, например:
cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause.2.0:udld

Почему не отображается? И как это исправить?

решение1

Я не знаю точнопочемуон не показан. Я подозреваю, что это что-то неправильно сделано конвертером net_snmp_perl.

Событие OID 1.3.6.1.4.1.9.9.548.1.3.1.1.2.2.0в этом случае состоит из двух вещей: 1.3.6.1.4.1.9.9.548.1.3.1.1.2и .2.0.

Похоже, net_snmp_perl пропускает конечную часть OID события (".2.0") после того, как он разрешил первую часть OID события (в данном случае она разрешается как cErrDisableIfStatusCause).

Но я нашел решение этой проблемы.

СледующийэтотВ статье я выяснил, что можно написать в строке EXEC, чтобы воспроизвести исходные значения.

Откройте сгенерированный snmptt.conf и замените

EVENT cErrDisableInterfaceEventRev1 .1.3.6.1.4.1.9.9.548.0.2 "Status Events" Normal
FORMAT cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause:$1 
EXEC /bin/bash /usr/local/bin/trap/submit_check_result $r errdisable 2 "cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause:$1 "

к

EVENT cErrDisableInterfaceEventRev1 .1.3.6.1.4.1.9.9.548.0.2 "Status Events" Normal
FORMAT Looks unimportant what you write here
EXEC /bin/bash /usr/local/bin/trap/submit_check_result $r errdisable 2 "$N - $+1 "

«$N» — имя события из файла конфигурации, в данном случае «cErrDisableInterfaceEventRev1»
«$+1» — имя первой переменной и ее значение, в данном случае «cErrDisableIfStatusCause.2.0:udld»

Теперь отправка тестового прерывания отображается в icinga следующим образом:
cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause.2.0:udld

И это то, что мы хотели. Теперь изменение .2.0 на, например, .3.1 в send-errdisable.sh также соответствующим образом отображается в icinga.

Связанный контент