[[VineLinux3系]]

**hddの内部温度をmrtgで計測する。

[[こうなる。:http://mrtg.shibaok.net/hdd_temperature.html]]温度変化の少なく、本当に内部温度を測っているのか不明。今度外部の温度計をつけて合わせて計測してみよう。

hddの内部温度をmrtgに出力するためには、
 1 smartctlから、hddの内部温度を取り出す。
 2 取り出した値をmrtgに入力する
というステップが必要になる。

***smartctlからhddの内部温度を取り出す
まず、smartctlで内部温度を取り出してみよう。
上の回で,smartctlを使えば、hddの温度が計測できると書いた
 94 Temperature_Celsius 0x0002 171 171 000 Old_age Always 32 (Lifetime Min/Max 10/58)
こんな感じ。それなら、それをperlなりで切り出してmrtgに入れてあげれば、読めるということになる。

と言うわけで書いたperlスクリプト
 #!/usr/bin/perl -w
 $str=`/usr/sbin/smartctl -A /dev/hda |/bin/grep -i temp`;
 chomp($str);
 $str=~s/\s\s+/ /g;
 @str=split(/\s/,$str);
 print "$str[9]\n$str[9]\n";

ソースの解説~
 #!/usr/bin/perl -w
perlの場所を教える。
 $str=`/usr/sbin/smartctl -A /dev/hda |/bin/grep -i temp`;
smartctlの結果から、温度(Temperature)を抜き出す。
 $str=~s/\s\s+/ /g;
スペースが続く部分は、一つのスペースに縮める。
 @str=split(/\s/,$str);
スペースを区切りとして、配列に入れる。目的の温度は、10個目の値なので、
 print "$str[9]\n$str[9]\n";
で、温度を出力する。
mrtgに渡すデータは、データ1改行データ2改行(タイムスタンプ改行コメント)みたいな形で続くらしい。本当の所は良く知らない。データ1と2ともに同じ値なので、同じ値を出力する。
***取り出した値をmrtgに入力する。
mrtg.cfgの内容は以下のようにした。
 #HDD Temperature#
 Target[hdd_temperature]:`/usr/local/mrtg-2/bin/Temperature.pl`
 MaxBytes[hdd_temperature]: 70
 Unscaled[hdd_temperature]: dwmy
 Options[hdd_temperature]: gauge, absolute, growright, noinfo,nopercent,integer
 YLegend[hdd_temperature]: HDD_temp
 ShortLegend[hdd_temperature]: (℃)
 LegendI[hdd_temperature]: HDD_Temp
 LegendO[hdd_temperature]: HDD_Temp
 Legend1[hdd_temperature]: HDD_Temp
 Legend2[hdd_temperature]: HDD_Temp
 Title[hdd_temperature]: HDDの温度
 PageTop[hdd_temperature]: <H1>HDDの温度</H1>
Targetで、上で作ったperlを指定して、値を入れる。後はお好みで。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS