為什麼 CISCO-ERR-DISABLE-MIB 陷阱在 Icinga 中不顯示介面和 VLAN 資訊?

為什麼 CISCO-ERR-DISABLE-MIB 陷阱在 Icinga 中不顯示介面和 VLAN 資訊?

我有一台 cisco 和一台帶有 icinga(又名 nagios、thruk)的監控伺服器。我想從 cisco 接收陷阱並在 icinga 中顯示它們。但我無法看到 errdisable 陷阱的介面和 VLAN。

我從cisco下載了mib,包括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 事件時,在 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.0由兩部分組成: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 中。

相關內容