定期的に処理を実行するものがあって、その結果や中間結果を可視化したいなーと思うときがあるわけです。表示したい値は簡単に出せますが、それを見やすい形で出すのってけっこう面倒なものです。ログファイルをgrepしろやーはちょっと嫌です。グラフ表示する場合はCactiあたりが有名だと思いますが、グラフの追加に手間がかかるのがツライのです。とりあえずサクッと表示したいのです。
噂によるとkazeburoさんのGrowthForecastというものが便利という事なのでさっそく試してみました。
今回cpanmも初めて入れました。これも便利です。
まずはcpanmのインストール。Fedora17くらいだとyumにあります。CentOSだと無かったので手動で入れます。
cd ~/ mkdir bin && cd bin curl -LOk http://xrl.us/cpanm chmod +x cpanm
環境変数の設定。みんなのBLOGを見ると~/perl5を指定するのがお作法みたいですが、home直下にlsで見えるディレクトリが増えるの嫌だったので適当に変更。
export PERL_CPANM_OPT="--local-lib=/home/libido/.perl5_extlib" export PERL5LIB=/home/libido/.perl5_extlib/lib/perl5:$PERL5LIB export PATH="/home/libido/.perl5_extlib/bin:$PATH";
RRDToolのインストール
wget http://search.cpan.org/CPAN/authors/id/G/GF/GFUJI/Alien-RRDtool-0.03.tar.gz cpanm Alien-RRDtool-0.03.tar.gz
GrowthForecastのインストール
git clone git://github.com/kazeburo/GrowthForecast.git cd GrowthForecast cpanm --installdeps .
GrowthForecastの起動
# ForeGroundで起動 perl ./growthforecast.pl # BackGroundで起動する場合はこんな感じ? perl ./growthforecast.pl > /home/libido/log/growthforecast/gf.log 2>&1 &
後は以下のようにHTTPのPOSTで値を送りつけます。実際はURLのservice_nameとsection_nameとgraph_nameの部分をそれっぽい名前で指定してあげます。
これだけです。
事前にグラフの設定とかは要りません。POSTすると勝手に作ってくれます。
パラメータのmodeは、count, gauge(省略するとこれになる), modifiedを指定できます。numberが送りつける実際の値です。
$ curl -X POST -F number=10 -F mode=count "https://tamsvr03:5125/api/service_name/section_name/graph_name"
{
"data": {
"adjust": "*",
"adjustval": "1",
"color": "#9933cc",
"created_at": "2012/06/05 17:06:10",
"description": "",
"gmode": "gauge",
"graph_name": "graph_name",
"id": 31,
"llimit": -1000000000,
"md5": "c16a5320fa475530d9583c34fd356ef5",
"meta": "",
"mode": "count",
"number": 10,
"section_name": "section_name",
"service_name": "service_name",
"sllimit": -100000,
"sort": 0,
"stype": "AREA",
"sulimit": 100000,
"type": "AREA",
"ulimit": 1000000000,
"unit": "",
"updated_at": "2012/06/05 17:06:10"
},
"error": 0
}
これでブラウザから見えるようになります。↓こんな感じ。クローラーのログを可視化してみました。一部ぼかしてあります。
綺麗な構成としては、ログファイルをFluentで~みたいになるのかもしれませんが、今回はプログラムが小さかったのでクローラーが定期的にGrowthForecastに直接投げるようにしました。
APIの注意点としては、numberは整数じゃないとダメです。floatはNG。
ちなみに、時間を指定(後から集計して○時のデータはこれだぜーみたいな)してグラフを描画したい場合は、HRForecast というものがあって、そっちを使うと良いみたいです。
インストールも、使い方も簡単なので、とりあえずさくっと見えるようにする場合にすごく使えるツールです。
参考にしたページ
http://blog.nomadscafe.jp/2011/12/growthforecast.html
http://d.hatena.ne.jp/oranie/20120517/1337225732
http://www.omakase.org/perl/cpanm.html