hddの内部温度をmrtgで計測する。こうなる。温度変化の少なく、本当に内部温度を測っているのか不明。今度外部の温度計をつけて合わせて計測してみよう。 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を指定して、値を入れる。後はお好みで。 |