[[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を指定して、値を入れる。後はお好みで。