为什么 CISCO-ERR-DISABLE-MIB 陷阱没有在 Icinga 中显示接口和 vlan 信息?

为什么 CISCO-ERR-DISABLE-MIB 陷阱没有在 Icinga 中显示接口和 vlan 信息?

我有一台思科和一台装有 icinga(又名 nagios、thruk)的监控服务器。我想从思科接收陷阱并在 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 不感兴趣。

这是我用来生成测试 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 转换器出了问题。

1.3.6.1.4.1.9.9.548.1.3.1.1.2.2.0本案的OID事件由两部分组成: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 中相应显示。

相关内容