CISCO-ERR-DISABLE-MIB トラップが Icinga でインターフェイスと VLAN 情報を表示しないのはなぜですか?

CISCO-ERR-DISABLE-MIB トラップが Icinga でインターフェイスと VLAN 情報を表示しないのはなぜですか?

私は cisco と icinga (別名 nagios、thruk) を備えた監視サーバーを持っています。cisco からトラップを受信して​​ icinga に表示したいのですが、errdisable トラップのインターフェイスと VLAN を表示できません。

私は CISCO-ERR-DISABLE-MIB.my を含む mib を cisco からダウンロードしました。次に、次のコマンドを使用して 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

トラップは 2 つありますが、私が関心があるのは cErrDisableInterfaceEventRev1 のみで、非推奨の cErrDisableInterfaceEvent には関心がありません。

これは、テストの errdisable イベントを生成するために使用する send-errdisable.sh です。

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 イベントを生成すると、errdisable サービスの icinga プラグイン出力に次のテキストが表示されます。 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.02 つで構成されます。1.3.6.1.4.1.9.9.548.1.3.1.1.2.2.0

net_snmp_perl は、OID イベントの最初の部分を解決した後 (この場合は cErrDisableIfStatusCause に解決されます)、イベント OID の末尾の部分 (「.2.0」) を省略しているようです。

しかし、修正するための解決策を見つけました。

続くこれこの記事を読んで、元の値を再現するために 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

そして、それは私たちが望んでいたことです。send-errdisable.sh で .2.0 を .3.1 などに変更すると、icinga でも同様に表示されます。

関連情報