mrtgでPCの内部温度をグラフ化する

今年の夏は暑かった。ファンが不調な当サイトサーバはいつ壊れるかとヒヤヒヤしていた。こんなとき内部温度がグラフ表示できれば、少しだけ安心できるかもしれない。

linuxでPCの内部温度を取得するには、lm_sensorを使う方法とacpiを使う方法がある。lm_sensorの方がいろんな情報がとれそうなので試してみたが、センサの検出中に必ずサーバがクラッシュするので断念。もうひとつの方法は、単純に/proc/acpi/thermal_zone/THRM/temperatureを読む。acpiはFedora7インスト時にはじめから有効になっていた。

mrtgは1つのグラフに2つの値を表示する必要があるので、ついでにPICNICで測定した気温も表示しよう。mrtgで任意の値を表示させたい場合、値の取得方法はmrtgからスクリプトを呼び出す方法と、net-snmpでスクリプトを呼び出して、mrtgからはSNMP経由で値を取得する方法がある。今回は前者を使う。

mrtgから呼び出すスクリプトは、一行目に値1(緑グラフ)、二行目に値2(青グラフ)、三行目に監視対象のアップタイム、四行目に監視対象のホスト名を返す必要がある。今回は三行目と四行目は省略する。できたスクリプトは以下のとおり。

[root@www bin]# vi gettemp.pl

#!/usr/bin/perl -w
use strict;
my $str;
$str = `cat /proc/acpi/thermal_zone/THRM/temperature`;
$str =~ /[0-9]+/;
print $&."\n";

$str = `wget -q -O - http://192.168.0.200`;
$str =~ /[0-9]+ Celsius/;
$& =~ /[0-9]+/;
print $&."\n";

print "\n\n";


これを呼び出してグラフにするmrtg設定は以下のとおり。これを/etc/mrtg/mrtg.confに追記する。

# Temperature

Target[temp]: `/usr/bin/perl /usr/local/bin/gettemp.pl`
Options[temp]: gauge,nopercent,growright
Title[temp]: Temperature
PageTop[temp]: Temperature
MaxBytes[temp]: 100
LegendI[temp]: Internal
LegendO[temp]: External
YLegend[temp]: Temperature
ShortLegend[temp]: °C