Flex SDK テスト3 rrdtoolにデータをつっこんでみる

前回言っていたrrdtoolを使ってsnmpトラフィックをグラフ化しよっかなーと思ったけど、そんなのMRTGcactiやMUNINとかHotSaNICとかとかGangliaもやってくれそうだし、つまんないかなと思ってきたからpingしてRTTの値をrrdにつっこんでグラフ化するくらいなら単純だし、良いかなと思ったのでとりあえずrrdtool触るの久しぶりだし思い出しがてらつっこんでみよっかなと思ったのでやってみた。


どうも。僕です。
(このネタがわかるあなた。さてはテレビっ子ですね? (゚∀゚)人(゚∀゚)ナカーマ)


ということで長ったらしい文章でrrdtoolのフロントエンドを知ってる限り並べたりしてみましたがcactiMRTGしか使ったことあません。しったかぶってスミマセン。

ということでコードです。今回はシェルスクリプトです。
まずはrrdデータを作るスクリプトから


#!/bin/sh

RRDTOOL=/usr/bin/rrdtool
RRDDATA=/tmp/rtt.rrd
START=`date +%s`

$RRDTOOL create $RRDDATA --start $START --step 300 DS:RTT:GAUGE:600:0:U RRA:AVERAGE:0.5:12:720

5分毎 1時間分のデータで平均値を取って1データとし、1ヶ月分保存します。
この辺りの細かい引数は

http://www.itmedia.co.jp/enterprise/articles/0705/30/news022.html

この辺りを読めば良いかと。続いてgoogle様にpingを放ってRTTを取得してrrdデータにつっこむ(update)するスクリプトです。


#!/bin/sh

PING=/bin/ping
AWK=/bin/awk
RRDTOOL=/usr/bin/rrdtool

DATE=`date +%s`
TARGET=www.google.co.jp
RRDDATA=/tmp/rtt.rrd

RTT=`$PING -c 1 $TARGET | grep rtt | $AWK '{print $4}' | $AWK -F/ '{print $2}'`

$RRDTOOL update $RRDDATA $DATE:$RTT

awk様大活躍です。他のOSに持てったら動かないかも。pingの出力が違う気がするので。ポータビリティを保つのは大事だと思いますが、まあ似たような事をやってみたい方は自分でかんばって書いて見てください。(まあrrdtoolに興味あるような人なら書ける気がしますが...) 日々是勉強也。
データを5分おきに突っ込むためにこのスクリプトをcronに登録しておきます。


*/5 * * * * /home/admin/bin/updaterrd.sh

こんな感じです。最後にデータが正しくつっこまれているか確認するスクリプトです。rrdtoolのfetchを使えばデータを取り出す事ができます。


#!/bin/sh

RRDTOOL=/usr/bin/rrdtool

RRDDATA=/tmp/rtt.rrd
END=`date +%s`
START=`expr $END - 2592000`

$RRDTOOL fetch $RRDDATA AVERAGE --start $START --end $END

といった感じ。さてこれをPerlで読み込んでxmlにしてflexに渡せばグラフにできるでしょう。横軸が時間軸になるのはずですが、flexのグラフは軸を時間軸として扱うための何かははたしてあるのでしょうか。たぶんあると思いますがどーだろう。まあrrdのデータがある程度たまるまで時間を要しますし、まったり調べますかね。

ファー( ̄△ ̄)y─┛~~~~~

なんか他にグラフにしたら面白い時系列データないかなぁ。