Por que a armadilha CISCO-ERR-DISABLE-MIB não mostra informações de interface e vlan no Icinga?

Por que a armadilha CISCO-ERR-DISABLE-MIB não mostra informações de interface e vlan no Icinga?

Eu tenho um cisco e um servidor de monitoramento com icinga (também conhecido como nagios, thruk). Quero receber armadilhas da cisco e mostrá-las em icinga. Mas não consigo ver a interface e a vlan da armadilha errdisable.

Baixei mibs do Cisco, incluindo CISCO-ERR-DISABLE-MIB.my. Então converti para snmptt com este comando:

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

que produziu a seguinte configuração (substituí o caminho absoluto para mib por ... e os valores das variáveis ​​por ...):

#
#
#
#
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

Existem duas armadilhas, estou interessado apenas em cErrDisableInterfaceEventRev1, mas não em cErrDisableInterfaceEvent obsoleto.

Este é o meu send-errdisable.sh que uso para gerar um evento de teste 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

Agora, quando eu gero um evento errdisable, na saída do plugin icinga para o serviço errdisable, recebo o seguinte texto: cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause:udld
mas espero que a interface e a vlan estejam lá, assim:
cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause.2.0:udld

Por que não é mostrado? E como consertar isso?

Responder1

eu não sei exatamentepor quenão é mostrado. Eu suspeito que seja algo errado feito pelo conversor net_snmp_perl.

O evento OID 1.3.6.1.4.1.9.9.548.1.3.1.1.2.2.0deste caso consiste em duas coisas: 1.3.6.1.4.1.9.9.548.1.3.1.1.2e .2.0.

Parece que net_snmp_perl omite a parte final do evento OID (".2.0") depois de resolver a primeira parte do evento OID (neste caso, é resolvido para cErrDisableIfStatusCause).

Mas encontrei uma solução para consertar.

Seguindoesseartigo, descobri o que poderia escrever na linha EXEC para replicar os valores originais.

Abra o snmptt.conf gerado e substitua

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 "

para

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" é o nome do evento do arquivo de configuração, neste caso "cErrDisableInterfaceEventRev1"
"$+1" é o nome da primeira variável e seu valor, neste caso "cErrDisableIfStatusCause.2.0:udld"

Portanto, agora o envio de uma armadilha de teste é mostrado em icinga assim:
cErrDisableInterfaceEventRev1 - cErrDisableIfStatusCause.2.0:udld

E era isso que queríamos. Agora, alterar .2.0 para, por exemplo, .3.1 em send-errdisable.sh também é mostrado correspondentemente em icinga.

informação relacionada