こんにちは、インフラ担当の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もちゃんとメンテしないと駄目ですね。なまじ詳細な情報が
取得できると。。心臓に良くないです。