«前の日記(2009-05-07) 最新 次の日記(2009-06-11)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2009-05-12 夏に向けて

net-snmp でハードディスクの温度を監視する

Linux では hddtemp や smartmontools でハードディスクの温度を取得することができますが、FreeBSD では smartmontools を使います。

ハードディスクが S.M.A.R.T. に対応していれば簡単です。

# portinstall smartmontools
# smartctl -a /dev/ad4 | grep ^194
194 Temperature_Celsius     0x0022   039   042   000    Old_age   Always       -       39 (0 20 0 0)

この情報を net-snmp で取得できるようにします。

まずは hddtemp の -n オプションに相当する、ハードディスク温度の数値のみが出力されるようにする必要があります。適当に awk でも使って 数値のみを切り出し、これをシェルスクリプトにし /root/tools/get_hddtemp.sh として保存します。

複数のハードディスクがある場合のために、引数でハードディスクのデバイスファイルを与えるようにしました。

#!/bin/sh
/usr/local/sbin/smartctl -a $1 | /usr/bin/awk '{if($1=="194") print $10}'

これを実行するとこのようになります。

# /root/tools/get_hddtemp.sh /dev/ad4
41

net-snmp でこの情報を取得できるようにするため /usr/local/etc/snmp/snmpd.conf に次の1行を追加し、restart します。

extend ad4temp /root/tools/get_hddtemp.sh /dev/ad4
# /usr/local/etc/rc.d/snmpd restart

snmpwalk で試しに取ってみます。

$ snmpwalk -v 1 -c community localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ad4temp".1 = STRING: 41
NET-SNMP-EXTEND-MIB::nsExtendOutLine."echotest".1 = STRING: hello world

OID を取得するため、-On オプションをつけます。

$ snmpwalk -v 1 -c community localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine -On
.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.97.100.52.116.101.109.112.1 = STRING: 41
.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.101.99.104.111.116.101.115.116.1 = STRING: hello world

あとはこれを、snmp の監視ツールに適当にセットしてやればグラフの描画なりなんなり好きにできます。

ad4temp