VineLinux3系

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


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-01 (日) 14:38:23 (3598d)