定期的に処理を実行するものがあって、その結果や中間結果を可視化したいなーと思うときがあるわけです。表示したい値は簡単に出せますが、それを見やすい形で出すのってけっこう面倒なものです。ログファイルを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