gentooサーバで動いているnagiosで玄箱HDDの温度監視
温度を計測して閾値をオーバーしたらメールが飛んできつつ、でもHDDは一定時間利用しないとスピンダウンするという環境ができあがりました。
監視サーバ側で以下のようなシェルスクリプトを cron で定期的に実行し、温度閾値を超えた時に、syslog に記録される Hot!Hot! というキーワードを swatch で引っかけています。
という方法で玄箱のHDDの温度を監視していたのですが、nagios を使った監視に切り替えました。
流れは次の通り
- 玄箱で、net-snmp を動かす
- net-snmp から、hddtemp を起動するように設定し、snmp 経由で値を取得できるようにする。
- nagios の snmp 監視プラグインで値を取得し、閾値を超えていたらアラートを出す。
玄箱で、net-snmp を動かす
net-snmp の tar ball を取得してきて展開した後、
% ./configure % make % su # make install
でインストールは終わり。
後は、/etc/snmp/snmpd.conf を適切に設定*1、/etc/rc.d/init.d に起動スクリプトを作成、それを/etc/rc.d/rc2.d にシンボリックリンクして自動起動するように設定して終了。
net-snmp が動くようになったことで、その他のsnmpとしての普通の監視も当然できるようになります。
net-snmp から、hddtemp を起動するように設定し、snmp 経由で値を取得できるようにする。
net-snmp では、snmpd.conf への exec の記述によるプログラム実行が可能です。
しかし、実行されるプログラムは数値のみを返却しないと後々の加工が面倒です。
そこで、次のようなhddtempを起動して値を加工するシェルスクリプトを作成します。
/usr/sbin/hddtemp_snmp.sh
#!/bin/sh /usr/sbin/hddtemp /dev/hda | /bin/awk '{print $3}' | /bin/sed s/drive/0/g
これで、HDDの温度だけが返却されます。
HDDがスピンダウンすると温度が返却されないので、その時用に sed で 0 に置換しています。
snmpd.conf から上記のシェルスクリプトを呼び出すように設定します。
/etc/snmp/snmpd.confの該当箇所のみ抜粋
exec hddtemp /usr/sbin/hddtemp_snmp.sh
以上で完了。
nagios の snmp 監視プラグインで値を取得する。
まずは、監視する側のnagiosが動いているサーバから、snmpwalk で値の取得をしてみます。
% snmpwalk -v1 -c public*2 kuro-box .1.3.6.1.4.1.2021.8.1.101.1
すると次のような値が返却されます。
UCD-SNMP-MIB::extOutput.1 = STRING: 36
玄箱のHDD温度です。
ちなみに、MIBの番号をもうちょっと上まであげると、
% snmpwalk -v1 -c public kuro-box .1.3.6.1.4.1.2021.8.1 UCD-SNMP-MIB::extIndex.1 = INTEGER: 1 UCD-SNMP-MIB::extNames.1 = STRING: hddtemp UCD-SNMP-MIB::extCommand.1 = STRING: /usr/sbin/hddtemp_snmp.sh UCD-SNMP-MIB::extResult.1 = INTEGER: 0 UCD-SNMP-MIB::extOutput.1 = STRING: 37 UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0 UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
という出力が出てきて、先ほど net-snmp に設定したものに間違いないことがわかります。
正常に値が得られるていることが確認できたので、nagios の監視に組み込みます。
$NAGIOS_HOME/etc/check_command.cfg
define command{ command_name check_snmp command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $ARG1$ -o $ARG2$ -w $ARG3$ -c $ARG4$ }
$NAGIOS_HOME/etc/services.cfg
必要なとこだけ抜粋。
define service{ service_description HDD Temp check_command check_snmp!public!.1.3.6.1.4.1.2021.8.1.101.1!50!55 }
上記の設定だと、50度以上でワーニング。55度以上でクリティカルになります。
ちょっと温度が高めなのは、昨夏の実測値から。50度いっちゃうんです。夏は。
後は、監視設定温度を一時的に低め(10とか)に設定してテストアラートがあがることが確認できたら完了。
*1:snmpd.confの書き方は検索すれば大量に見つかります。
*2:snmpのコミュニティ名はpublic以外にしましょう。ここではあくまで例示のためにpublicにしてますが、本当は、覚えられないくらいランダムな文字列に設定しています。