RRDTool を勉強しなおしてみる
参照したサイト様
やったこと
取得した CPU の温度データを RRDTool でグラフ化するところまで。
思ったより簡単に出来て良かった…。
日付を UNIX タイムに変換
データは YYYY/MM/DD hh/mm/ss な形式で記録していたため、RRDTool に投入する前に整形しないとイケなさげ。
ぎゃふん。
どうやら、整形しなくても行けたみたい。
今回は直して進める。
が、こんなことは昔もあった。
出力した内容を Excel に貼り付けたら、日付部分がシリアル値に変換されていることを確認。
過去、備忘で書いた数式を一旦はそのままコピペして、日付部分はシリアル値を参照させるようにしてと。
UNIX タイムと温度データをタブ区切りしたテキストファイルを thermal.dat という名前で作成後、改行コード LF で保存しておく。
データを RRDTool に投入
まずは RRDTool のインストールから。
$ sudo apt-get install rrdtool
やっぱり Debian 系は、インストールが楽すぎる。
で、データの置場所を作って配置。
$ mkdir ~/rrddata $ cd ~/rrddata
ここで SCP により、温度データを Raspberry Pi に投げつける。
それからグラフの描画に必要な情報を、簡単に取得
$ wc -l thermal.dat 3395 thermal.dat $ head -1 thermal.dat 1427612783 46.54
ふむ。
4000ステップあれば足りるし、開始時刻は 1427612783 より前なら OK と。
ならばと参考サイト様を見て、コマンドを作ってみる。
$ rrdtool create thermaltest.rrd \ --start 1427612782 \ --step 60 \ DS:thermal:GAUGE:600:0:U \ RRA:AVERAGE:0.5:1:4000
Raspberry Pi で実行してみると、普通に通った。
やった。
次は、データ投入コマンドのテスト。
$ rrdtool update thermaltest.rrd \ --template thermal \ 1427612783:46.54
うっし。
エラーなく格納されたようだ。
なら、4000行近いデータを、全部放り込んであげれば良い。
…とはいえ、1行目の重複データはエラーになるから、一度 rrd ファイルを削除して作り直した。
シェルスクリプトを作って、回してみる。
$ while read Line; do pTIME=$(echo ${Line} | awk '{print $1}') pDATA=$(echo ${Line} | awk '{print $2}') echo ${pTIME}:${pDATA} done < thermal.dat $
う…遅い…。
シェルスクリプトの宿命だよねぇ… perl で書けば、全然違うんだろうけど。
perl かぁ… perl かぁ… orz
せめて、進捗率だけは出そうか。
$ i=1 $ while read Line; do pTIME=$(echo ${Line} | awk '{print $1}') pDATA=$(echo ${Line} | awk '{print $2}') echo "(${i})rrdtool update thermaltest.rrd --template thermal ${pTIME}:${pDATA}" rrdtool update thermaltest.rrd --template thermal ${pTIME}:${pDATA} i=$(($i + 1)) $ done < thermal.dat
終わったら、中身を dump してみる。
$ rrdtool dump thermaltest.rrd | more
XML形式で、
(以上略) <database> <!-- 2015-03-29 06:07:00 JST / 1427576820 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:08:00 JST / 1427576880 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:09:00 JST / 1427576940 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:10:00 JST / 1427577000 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:11:00 JST / 1427577060 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:12:00 JST / 1427577120 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:13:00 JST / 1427577180 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:14:00 JST / 1427577240 --> <row><v>NaN</v></row> <!-- 2015-03-29 06:15:00 JST / 1427577300 --> <row><v>NaN</v></row> (以下略)
うん、最初こんなんなってて、ビビった。
NaN って何で〜?
入力したデータは 2015/3/29 16:06 からのもの。
つまり 2015-03-29 06:07:00 なんて時間のデータなんざ入れてないわけで、無くて当たり前だった。
心臓に悪いわぁ…
もう少し、読み進めてみる。
(以上略) <!-- 2015-03-29 16:01:00 JST / 1427612460 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:02:00 JST / 1427612520 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:03:00 JST / 1427612580 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:04:00 JST / 1427612640 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:05:00 JST / 1427612700 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:06:00 JST / 1427612760 --> <row><v>NaN</v></row> <!-- 2015-03-29 16:07:00 JST / 1427612820 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:08:00 JST / 1427612880 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:09:00 JST / 1427612940 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:10:00 JST / 1427613000 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:11:00 JST / 1427613060 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:12:00 JST / 1427613120 --> <row><v>4.6010966667e+01</v></row> <!-- 2015-03-29 16:13:00 JST / 1427613180 --> <row><v>4.6531033333e+01</v></row> <!-- 2015-03-29 16:14:00 JST / 1427613240 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:15:00 JST / 1427613300 --> <row><v>4.6540000000e+01</v></row> <!-- 2015-03-29 16:16:00 JST / 1427613360 --> <row><v>4.6540000000e+01</v></row> (以下略)
該当部分は、きちんとデータが入ってて一安心。
…まぁ、平均値を出す設定だし、多少の時間のズレはあるだろう。
グラフの生成
データを入れたんだから、次はグラフの生成。
これも、読み替えで対応。
(勉強になってるか疑問…)
とりあえず、気を付ける場所はグラフの上限かな。
上限は、100℃。
下限は、0℃
それを意識して、コマンドを作る。
$ rrdtool graph thermal.png \ --title "CPU Thermal Average" \ --vertical-label "Thermal Average" \ --width 500 \ --upper-limit 100.0 \ --lower-limit 0 \ --rigid \ --imgformat PNG \ DEF:thermal=thermaltest.rrd:thermal:AVERAGE \ LINE1:thermal#00FF00:"CPU thermal" \ GPRINT:thermal:LAST:"cur\: %2.2lf /" \ GPRINT:thermal:AVERAGE:"ave\: %2.2lf /" \ GPRINT:thermal:MAX:"max\: %2.2lf /" \ GPRINT:thermal:MIN:"min\: %2.2lf\n" $ ll total 108 -rw-r--r-- 1 pi pi 60313 Apr 1 02:01 thermal.dat -rw-r--r-- 1 pi pi 12482 Apr 1 02:30 thermal.png -rw-r--r-- 1 pi pi 32556 Apr 1 02:13 thermaltest.rrd $
やったぜ。
画像ファイルが出来たっぽいぞ。
…………げ。
どうやって表示しよう。
どうやって PC に持ってこよう(^^;
PC を買ったときにオマケで貰った 8GB USBメモリがあった。
あっぶな。
これの為だけにファイルサーバを立てるところだった。
(立ててもいいんだけど…)
もしくは、Webサーバを仕立てて、ブラウザで確認?
$(sudo apt-get install apache2) だけで公開まで設定は済んじゃうハズ…。
それでもよかったかなと思う自分がいるけれども。
閑話休題。
一応、USB メモリの存在を思い出したし、データを吸い出して PC で確認。
$ sudo mount /dev/sda1 /mnt $ sudo cp thermal.png /mnt $ sudo umount /mnt
持ってきたグラフデータは、こんな感じ。
ふ〜ん…。
生データを見ると、たまーに 49℃ まで上がってるんだけど、やっぱり平均に丸めちゃうと大した起伏でもないね〜。
いろいろ突っ込みどころのあるグラフだけど、初回にしてはよくできた。
うん。
次やるとしたら、cron で取得するデータを直接グラフにぶっこむところかな。
グラフの幅とか、いろいろ考えなきゃだけど。