snmpdに外部コマンドを追加してHDD温度を取得する

 2013-12-22
Linux HDDの温度を調べる方法が分かったので、そのデータをsnmpに乗せてみます。
 
snmpd(LinuxのNet-SNMPを想定)には元々、外部コマンドの結果を受け取ってsnmpに乗せる機能がサポートされています。
snmpd 任意の 等と検索すると出ます。

おわり。



検索した結果から、簡単には二つの方法があり、execディレクティブを使う方法と、extendディレクティブを使う方法がある。
それぞれ多少の違いはあるにせよ、指定した任意のコマンドの結果をsnmpのOIDに乗せることができる。

extendのほうは、OIDを固定できて便利なので私はこれを使うことにする。



まず、HDDの温度を取得するコマンドを下記のようなシェルスクリプトとして保存しておく。
#!/bin/bash -f
SMARTCTL=/usr/sbin/smartctl

if [ "$1" = "" ];
then
echo "Usage: $0 "
echo "( ex. $0 /dev/sda )"
echo " "
exit 1
fi

TEMP=`${SMARTCTL} -A -d sat $1 | \
grep 'Temperature_Celsius' | \
sed 's/^/ /g' | \
expand | \
tr -s " " | \
cut -f11 -d" " `

if [ $? -eq 0 ];
then
if [ "$TEMP" != "" ];
then
echo $TEMP
exit
fi
fi

exit 1
argは空かどうかだけチェックしてるという手抜き。どうせ自分しか使わないから・・ね・・


シェルスクリプトの実行結果はこんな感じになる。
[linuxhogehoge]% gethddtemp.sh /dev/sda
30
温度だけ返す。



次に、 /etc/snmp/snmpd.conf に下記のような行を追記する。
extend hddtemp_sda /hogehoge/bin/gethddtemp.sh /dev/sda
extend hddtemp_sdb /hogehoge/bin/gethddtemp.sh /dev/sdb
extend hddtemp_sdc /hogehoge/bin/gethddtemp.sh /dev/sdc
書き方は extend <任意のOID名> <任意のコマンド> な感じ。
OID名になる文字列を指定出来るので、extendは便利。
execだと、設定した順番にOIDに乗る(らしい)ので、後から追加とかすると順番が崩れて面倒っぽい。



設定ファイルを保存して、snmpdをrestartさせたら、ちゃんとデータがsnmpで取得出来るか確認する。
[linuxhogehoge]% snmpwalk -v 2c -c publichogehoge localhost .1.3.6.1.4.1.8072.1.3
<snip>
NET-SNMP-EXTEND-MIB::nsExtendCommand."hddtemp_sda" = STRING: /hogehoge/bin/gethddtemp.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."hddtemp_sdb" = STRING: /hogehoge/bin/gethddtemp.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."hddtemp_sdc" = STRING: /hogehoge/bin/gethddtemp.sh
<snip>
NET-SNMP-EXTEND-MIB::nsExtendArgs."hddtemp_sda" = STRING: /dev/sda
NET-SNMP-EXTEND-MIB::nsExtendArgs."hddtemp_sdb" = STRING: /dev/sdb
NET-SNMP-EXTEND-MIB::nsExtendArgs."hddtemp_sdc" = STRING: /dev/sdc
<snip>
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."hddtemp_sda" = STRING: 30
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."hddtemp_sdb" = STRING: 48
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."hddtemp_sdc" = STRING: 50
<snip>
それらしい値が取れている。 見ての通り、コマンド名や引数なども教えてくれる。けど今回は得に利用価値はない。


外付けHDDなどだと反応が遅かったりするので、環境によってはsnmpwalkがタイムアウトしてしまうかも。その辺は要注意。それなりのレスポンスを確保したシェルスクリプトを作っておくこと。



というわけで以上。


参考:

19.6.5. Net-SNMP の拡張
https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sect-System_Monitoring_Tools-Net-SNMP-Extending.html

簡単SNMP(監視カスタマイズ編)
http://d.hatena.ne.jp/hiroppon/20130312/1363056210



 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/148-35422a94
≪ トップページへこのページの先頭へ  ≫