NagiosでのAPCのUPSのバッテリ監視2(Net-SNMPへのMIBの追加)

雪泥狼爪さんのページでコメントした件でふと思い出したのが職場で稼働中の死活監視システムのNagios君の件である。
基本はNagiosが各サーバやらHUBやらの機器に対してネットワーク経由で死活監視をする。具体的には監視対象の機器に対してPINGを飛ばし、Replyが返ってこなければ該当のシステムは死んでいるとしてWEB上で異常状態にあると表示したりあらかじめ設定された管理者に通知メールを送ったりするソフトである。他にもオプションとしてHTTPが動いているかとかSMTPが動いているかとか、snmpで状態監視をしたりすることが出来る優れもののプログラムである。
いまさらながら紹介した『DeathSwitch』と言うサービスに動作がそっくりだなぁと思っている。相手が人であろうと機械であろうと死活監視と言うことだったらそっくりになるのも道理だと思う。とりあえずつついてみて、様子を見ようと言う事か。

で、そのようなことをつらつら考えていたら以前書いたNagiosによるAPCのUPSのバッテリ監視については宿題が残っていたことを思い出し、本日解決を行った。

現在、UPSのバッテリ監視としての機能は問題なく動作しているのだけど、Nagios上の定義で

:
  check_command                   check_snmp!public!.1.3.6.1.4.1.318.1.1.1.2.2.4.0!1!2
}

と記述されているところをAPCUPSのMIBの定義を使って

:
  check_command                   check_snmp!public!upsAdvBatteryReplaceIndicator.0!1!2
}

と記述できないかと言うことであった。「upsAdvBatteryReplaceIndicator」ならばUPSのバッテリ交換のインジケータだなわかるけど「.1.3.6.1.4.1.318.1.1.1.2.2.4.0」じゃいちいちMIBの定義を引いて調べなきゃならない。ソースの可読性が悪く、担当者間の引継ぎ後に問題が起こる可能性が高い。
問題はNagios側の定義ではなくNagiosが利用しているNet−SNMPに定義されているMIBへAPCの拡張MIBを追加することであった。

このページを参考にして行ったところ出来た。
方法は下記の通り。
元にするMIBはNetwork Management CardのCDの\SNMP361ディレクトリに入っているpowernet361.mib。
これを何らかの方法でNet-SNMPのMIBのディレクトリにセットする。
職場のNet-SNMPは/usr/share/snmpにインストールされているので、MIBをセットするディレクトリは/usr/share/snmp/mibsである。
該当のディレクトリにMIBをセットした後に、

[root@nagios mibs]# MIBS=ALL; export MIBS 

を行う。Cシェルならばコマンドが違うと思うけどそれは適当に読み替えてください。
で、うまく行ったかどうかsnmpwalkで試す。

[root@nagios mibs]# snmpwalk -c public -v 1 192.168.nn.yy upsAdvBatteryReplaceIndicator PowerNet-MIB::upsAdvBatteryReplaceIndicator.0 = INTEGER: noBatteryNeedsReplacing(1)
[root@nagios mibs]#

と出ればとりあえず成功。
このあとNagiosのcheck_snmpコマンドでも動くかどうか確認した。

[root@nagios etc]# /usr/local/nagios/libexec/check_snmp -H 192.168.nn.yy -C public -o upsAdvBatteryReplaceIndicator.0 -w 1 -c 2
SNMP OK - 1 | PowerNet-MIB::upsAdvBatteryReplaceIndicator.0=1
[root@nagios etc]# 

上記のように出れば成功。
後は、Nagiosのetcディレクトリ配下のservices.cfgファイルを変更しnagiosをリスタートすればうまく行った。

次はバッテリの強制交換の時期を教えてくれるような設定がNagios上で出来ないか検討をしてみようと思う。