運用に携わっていると、何かの数値をグラフ化しておきたいなんてことが良くあります。
グラフ化しておくメリットは
- 視覚化することで変化を見やすくする
- 異常な数値があればすぐに気がつくことが出来る
- 複数の値の関係を見つけやすい
- 非エンジニアでも直感的に解りやすい
- エライ人が喜ぶので評価される(かもしれない)
辺りでしょうか。最後のやつは実際どうかは解りませんが、上4つだけでもかなりのメリットがあります。
ただ、結構描画系ツールの選定やら準備やらが面倒だったりします。が、最近はではkazeburoさんが作ったGrowthForecastとHRForecastがあって、すっごく簡単にグラフ生成ができるのでかなりお手軽になりました。今年のYAPCでも良く名前が出ていました。
Perl言語圏だったらおそらく聞いたことはあるんじゃないかな?と思うんですが、先月別の言語圏の方達と話をしていたら知らないという人が居たので、紹介エントリ書こうかなと思った次第です。
GrowthForecast
Cronなどで定期的にデータを投げてあげれば上記のようなグラフを良い感じに表示してくれます。複合グラフも簡単に作れるのがとても素敵。特徴としては、
- 定期的にAPI叩くことで簡単にデータを登録できる
- RRDToolを使ったカッコイイグラフ表示
- 過去にさかのぼってデータを投入出来ない
- 扱えるのは整数のみ
上のグラフは適当に投入したPVのデータとUUのデータを一つにグラフに表示している例。実際はPVとか取るならUUは後述のHRForecastの方が向いています。あくまでグラフとして見る物を投入するのが良くて、特定の箇所のイベント数とか、エラー数、たとえばログインユーザーと非ログインユーザーの比率など、数値として持っておくことが必ずしも重要で無いものが向いているような気がします。
データの投入は本当に簡単でcurl辺りで
$curl -F number=10 http://hf.example.com/api/[大カテゴリ]/[中カテゴリ]/[項目名]
インストール
githubに詳しく書いてあったのでそちらを参照。ちなみに、自分でsakuraVPSに入れたときはパッケージ群はcairo-devel入れたぐらいだった気がします。
cpanm無ければ入れておくとインストールが楽になります。perlbrewなんかでシステムperlと分けておくのが最近の主流ですけど、その辺りはperlbrewあたりで探して貰うと出てくると思います。(書くと長い・・・)
HRForecast
HRForecastは過去にさかのぼってデータ登録出来たり、CSVダウンロードやグラフの埋め込みが出来たりします。
- 定期的にAPI叩くことで簡単にデータを登録できる
- javascriptを使った動的なグラフ表示
- 過去にさかのぼってデータを投入出来る
- データダウンロードやグラフの埋め込みが出来る
- データの丸めが発生する
- 扱えるのは整数のみ
前述のGrowthForecastとの違いは遡ってデータを投入できることと、丸めが発生(もっとも細かい粒度で1時間でまとめられる)することです。またグラフ自体もRRDtoolとJavascriptとの違いがあります。こちらはある程度数値が指標となるようなデータPVとかUUとかを取っておくのに向いています。丸めは発生しますが、むしろdailyで取っておきたい事が多いでしょう。
インストール
自分のやった手順を書いておきます。mysqlが入っている前提なので無ければ入れてください。
$git clone git://github.com/kazeburo/HRForecast.git
$cd HRForecast
$cpanm --installdeps .
データベースの作成と権限の追加をしておきます
CREATE DATABASE hrforecast;
GRANT CREATE, ALTER, DELETE, INSERT, UPDATE, SELECT \\
ON hrforecast.* TO 'www'\@'localhost' IDENTIFIED BY xxxxx;
付属するschema.sqlを実行
$mysql -D hrforecast -u www < schema.sql
後は設定をいじるだけ
$vi config.pl
{
dsn => 'dbi:mysql:hrforecast;hostname=127.0.0.1',
username => 'www',
password => 'xxxxxx',
port => '5127',
host => '127.0.0.1',
front_proxy => [],
allow_from => [],
};
リバースプロキシを使う場合はfront_proxyにipを設定します。自分はdaemontoolsでプロセスを起動して、nginxをフロントにしてます。
どちらもPSGIアプリとして書かれていて、起動するためのHTTPサーバまで付属しているので簡単に試すことができると思います。ドキュメントは起動後アクセスしたページにDocsがついているので(これスバラシイと思いました)、それを見れば簡単に使えると思います。
とにかく便利なのでオススメです。