前回の話題では、コマンドレベルで温度表示ができるプログラムが完成したところでした。
これがうまくいったので気をよくして、早速にもデータ蓄積とこれのグラフ化を始めてみました。これが今回の内容紹介となりますが、ここに思わぬ落し穴が潜んでいたのでした。
●観測した温度のグラフ化と思わぬ落し穴とは? ここで、まずはグラフ化の部分と何が起きたのかをお話します。下記が温度データを取り始めたときのグラフとなります。
このグラフは、これから下で紹介する MRTG というプログラムを利用して、玄箱(pro)に温度を計測させたものです。当初、室内において計測を始めたので約 20 ℃のところからグラフが始まっています。データは5分間隔で収集され、グラフのスパン(1日、1週、1ヵ月、1年)に応じて平均化されてきます。こうして、順調に数時間分のデータ蓄積とグラフ化されていることが確認できたので、より温度変化の大きなグラフを見ようと、ちょこっと窓外に温度センサを引き出しました。
ところがどうでしょう、グラフはプチッっと途切れてしまいました。
始めは、温度センサとの断線やプログラム・ミスを調査したのですが、理由が見えてきました。それは、外気温度がマイナスであって、計測プログラムは0~85℃までしか考慮しておらず、かつまた、MRTG なるプログラムもゼロ(0)という値以下を想定していないものだったのです。
そうしたマイナス温度も計測することを念頭においてプログラムし、また、この時期(夜間)に外気温度がマイナスであることに、始めから気づいていれば、それほど驚くこともなかったでしょうが、これにはちょっとばかり苦笑したところです。
以上から次なる課題が見えてきました。
- 温度計測範囲にマイナス温度も含める。
- グラフ表示もマイナス表示が可能なようにする。
(1)については、そもそも温度センサからはマイナス値のデータも送られてきますから、プログラムの改造だけで済みそうでした。ところが、(2)については、MRTG プログラムを覗いてみると改造が困難であることが判明しました。
調べてみると、MRTG プログラムは /usr/bin/ の配下にあって perl で書かれてプログラムでした。もし、測定した温度にあらかじめ10度分を加えて MRTG に渡せば、-10 ℃も 0 ℃のラインに表示されるはずですし、後はグラフのX軸表示を -10 ~ + 40 ℃とかにしてしまえば、これで見掛け上はマイナス温度からの計測表示ができるものと考えました。ところが、グラフ作成部分は、別のプログラム (rateup)に渡されており、この部分をいじるにはソースをもってきて再コンパイルを余儀なくされそうです。
こうして、頭をひねってみたのですが妙案は見つからず、マイナス温度も蓄積とグラフ化ができるプログラムを探すことになりました。見つかったものは rrdtool と呼ばれていて、これへの挑戦は先の記事に譲ります。
もし、居住空間(プラス温度のみ観測できれば十分であるような生活環境)の温度であるとか、負の温度はあり得ないマシンの温度や水槽の温度などでは、MRTG は効果を発揮するでしょうから、以下に玄箱(pro)での導入例を整理しておきました。
●
MRTGのインストール 玄箱(pro)の関連サイトで MRTG のインストール記事を幾つか探すことができます。ここでも簡単に説明しますが、一般的なMRTGのインストール記事も参考にされるとよいと思います。
さて、例によって、
apt-get update
apt-get install mrtg
としてインストールを始めます。途中で一つだけ答えなくてはならない部分がありましたので、YES を入力しておきます。

インストール後に調べてみると、mrtg 関連のユーザは作成されておらず、パーミッションは、
-rw-r----- 1 root root 542 Oct 16 2006 /etc/mrtg.cfg
となっていました。
●
MRTGの設定 MRTG に関係する設定ファイルは /etc/mrtg.cfg となりますが、MRTG を起動する際に設定ファイルを指定できますので、新たな設定ファイルを生成したほうがファイル名の判別を含めてわかりやすいと思います。
冒頭で紹介したグラフのための設定ファイル(/etc/kuro-mrtg.cfg)は、次のものになっています。
WorkDir: /var/www/mrtg
PageTop[^]: <H1>Stats for
#TimeZone[_]: Japan
Options[^]: gauge growright
kilo[_]: 1024
XSize[_]: 600
Target[thermo-hygro]: `/home/k-wada/program/ondo/ds18s20`
MaxBytes[thermo-hygro]: 40
MaxBytes2[thermo-hygro]: 40
Title[thermo-hygro]: Thermometer
Options[thermo-hygro]: absolute, gauge
PageTop[thermo-hygro]:Thermometer</H1>
AbsMax[thermo-hygro]: 40
Ylegend[thermo-hygro]: dig.
ShortLegend[thermo-hygro]: dig
#RouterUptime[thermo-hygro]:public@xxx.xxx.xxx.xxx
Unscaled[thermo-hygro]: dmwy
LegendI[thermo-hygro]: dig.
LegendO[thermo-hygro]: %
Legend1[thermo-hygro]: Thermometer
Legend2[thermo-hygro]: -
ここで若干の補足をしておきます。mrtg.cfg のパラメータ設定のマニュアルがここにありますので、合わせて見比べてみてください。
- WorkDir: /var/www/mrtg の部分が公開データが格納されるディレクトリ指定となります
- Target[thermo-hygro]: `/home/k-wada/program/ondo/ds18s20` の部分が外部プログラムを指定しており、これは前回に作成したプログラムとなります。前回、出力に"おまけ"があると書いたのはここで利用するためでした。
MRTGから起動される外部プログラムの仕様として、以下の4行の値を標準出力に出力するように書いています。
+ 1行目 : 値1 ..... 通常仕様はネットワーク機器の入力トラフィック値で整数値なります。必須項目であってここでは温度値に流用しています。
+ 2行目 : 値2 ..... 通常仕様はネットワーク機器の出力トラフィック値でこちらも整数値の必須です。使っていないので0の値を入れておきました。
+ 3行目 : 経過時間 ..... 通常はシステムが起動してから経過した時間(uptime)が入ります。適当な文字列で済ませています。
+ 4行目 : 値の説明 ..... 通常は値の説明に利用されますが適当な文字列で済ませています。
●
観測を始める 観測を始めるには、mrtg を所定時間ごとに起動すればよいのですが、一般的には5分ごとです。それゆえ、crontab に次のような記述を追加しておきます。先頭の */5 で" 5分ごとに起動"を意味します。
# min hour day month week program
*/5 * * * * /usr/bin/mrtg /etc/kuro-mrtg.cfg
こうして5分ごとにデータ収集動作が行われますが、それに先だって手動で動作確認もしておきましょう。
kurobox:/var/www/mrtg# /usr/bin/mrtg /etc/kuro-mrtg.cfg
2008-01-22 18:21:55, Rateup WARNING: /usr/bin/rateup could not read the primary log file for thermo
2008-01-22 18:21:55, Rateup WARNING: /usr/bin/rateup The backup log file for thermo was invalid as well
2008-01-22 18:21:55, Rateup WARNING: /usr/bin/rateup Can't remove thermo.old updating log file
2008-01-22 18:21:55, Rateup WARNING: /usr/bin/rateup Can't rename thermo.log to thermo.old updating log file
kurobox:/var/www/mrtg# /usr/bin/mrtg /etc/kuro-mrtg.cfg
2008-01-22 18:23:54, Rateup WARNING: /usr/bin/rateup Can't remove thermo.old updating log file
kurobox:/var/www/mrtg# /usr/bin/mrtg /etc/kuro-mrtg.cfg
kurobox:/var/www/mrtg#
当初は収集データがない旨のエラーが表示されますが、3回目には出なくなっています(手動実行と cron 実行が重なるとシリアル・ポートの奪い合いでエラーが発生するので、このことを頭に入れてきましょう)。
●
活用結果 MRTG は、扱う値が二つで、そしてマイナス値を含まなければ簡単にグラフ化できるところに価値がありそうです。その意味で、我々の身近な生活環境には温度と湿度はペアで存在していますし、これらの傾向を通年で観測して活用(自宅の温度観測やサーバ室の管理、栽培ハウスの温度制御)できます。
下図が玄箱(pro)での測定例です。これは2階にある書斎の窓際(窓ガラス面に近接)で試してみたところで、Webブラウザ表示から、1日分を詳しくみることができます。緑色が温度で青色が湿度を現しています。難点としては温度表示のスケールをもう少し拡大(たとえばY軸上限を80にする)したいところですが、そうすると相対的に湿度の上限が下がることになり、夏場での湿度90%といった状況では湿度グラフが天井に付いてしまうことでしょうね。
ただ、計測されている値とグラフ設定は個別の問題なので、冬場用と夏場用のに値設定をすることもできなくはありません。

MRTG は1日、1週間、1ヵ月、1年の数値傾向を知る手段なので、それぞれについて平均値として観測されている点に注意をすれば、以外と面白い観測結果が得られます。

稼働させたばかりなので、上図ではまだ1年間までの計測が済んでいません。他例においてですが、そのグラフから「昨年の冬はこんな感じだったのかぁ」と興味が湧いてきます。
読者の多くは、玄箱(pro)を何らかのサーバとして連続運用されている方が多いと思います。このように簡単に通年での温湿度ができますからお試しください。なお、ここで扱った「温湿度の計測ユニット]については、補足記事として取り上げる予定としましょう。
●rrdtool への誘い MRTG ではマイナス温度の表示が極めて困難でした。もちろん、プログラムの改造次第ではできるのですが、rrdtool という賢い方向に行くのが懸命そうです。
次回は、その rrdtool を使って無事に温度観測ができた報告をします。
<和田 好司>
コメントする