SNMPトラップの内容について

こんにちは、インフラ担当のszkです。


NW機器の状態をSNMPトラップで監視しているのですが、インターフェースの
link down/upのトラップで何か情報が足りないなーと思ったことありませんか?
そう、それは、

物理インターフェースの情報が無い!


手元にあるNW機器では、「ifIndex」「ifAdminStatus」「ifOperStatus」の3つのdata bindingが渡されるようです。(詳細はこのあたりを参照)

例えば以下のような感じです

IF-MIB::ifIndex.40 40
IF-MIB::ifAdminStatus.40 up
IF-MIB::ifOperStatus.40 down


この「ifIndex.40」が何なのか?
物理インターフェースのPort40ではありませんし、NW機器上で管理しているインデックスのため、
VLANの設定などによって「ifIndex」は変わります。
MIB-2の情報を見ていると、「ifDescr」で物理インタフェースの情報が取得出来そうです。
(詳細はここを参照)
コマンドで確認すると取得出来ました。

#snmpget -v 2c -c CommunityName IP_Address ifDescr.40
IF-MIB::ifDescr.40 = STRING: GigabitEther 0/31 (### to SV-XXX eth0 ###)


テストではNW機器のインターフェイスに設定したdescriptionも取得できました。
NW機器によっては取得出来ないかもしれません。


NET-SNMPのsnmptrapdを利用すれば、snmptrapd.confの「traphandle」という設定で、
受信したSNMPトラップをスクリプトに引き渡すことが出来ます。
スクリプト内で「ifDescr」の情報を取得するようにすれば、以下のような感じで
「ifDescr」の情報を差し込むことが可能です。

IF-MIB::ifIndex.40 40
IF-MIB::ifDescr.40 = STRING: GigabitEther 0/31 (### to SV-XXX eth0 ###)
IF-MIB::ifAdminStatus.40 up
IF-MIB::ifOperStatus.40 down


分かりやすくなったー


こんな感じで運用しているとある日、思わぬことが発生しました。

IF-MIB::ifIndex.25 25
IF-MIB::ifDescr.25 = STRING: GigabitEther 0/16 (### to FW-XXX eth1 ###)
IF-MIB::ifAdminStatus.25 up
IF-MIB::ifOperStatus.25 down


FWとの接続がDOWN? おー、やばいー!

単にNW機器のdescriptionが古かっただけで、該当ポートには検証機器を
接続したとのことでした。
descriptionもちゃんとメンテしないと駄目ですね。なまじ詳細な情報が
取得できると。。心臓に良くないです。