「GrowthForecastというグラフ表示ツールで捗る話」で紹介したGrowthForecastですが、モリス氏のfluent meetupでの発表やriywo氏の発表で少し紹介されていたりするわけですが、社内でも少しずつメトリクスが増えて活用されています。
データが既に入っているので大きな変更はできないのですが、少し機能追加をしています。
ソースコード
https://github.com/kazeburo/GrowthForecast
1分更新グラフ
GrowthForecast はWebアプリケーションとWorkerの2つから構成されています。APIに対してPOSTされたデータは、一旦SQLiteのDBに格納され、Workerがそれを取得、RRDファイルを更新します。これまでは5分毎に動くworkerがいるだけでしたが、そこに1分毎動くworkerを追加しました。
上の図のようにworkerが2つ動くようになりました。すぐに結果が知りたいとき、5分よりも高い解像度でデータがみたいときに利用できます。
画面では、とりあえず感が強いけどボタンが追加されています。
デフォルトでこの機能が有効になっていますが、以下のように起動することで、これまでと同じ5分更新だけにできます
$ perl growthforecast.pl --disable-1min-metrics
JSONフォーマットでの出力機能追加
これまでGrowthForecastはデータを溜め込んでグラフとして表示するだけでしたが、これだけではせっかく貯めたデータの再利用ができず捗りません。そこでRRDファイルに保存されているデータをJSONにて出力できるAPIを作りました。
APIは2種類。1つ目はグラフの凡例にでているサマリー取得API
$ curl http://example.com/summary/path/to/graph
{"graph":["0.00000000","0.09241971","5.91815168","0.00000000"]}
レスポンスのデータは指定期間中の「現在」「平均」「最大」「最小」となります。
もう一つのAPIは、グラフデータのエクスポート。
$ curl http://gf.ops.dev.livedoor.net/xport/path/to/graph?t=d&gmode=subtract
{"column_names":["graph"],"step":600,"columns":1,"end_timestamp":1329790200,"start_timestamp":1329671400,"rows":[[0.499581818333333],[0],[0],[0],[0],[0],[0],[0],[0],...,[null]]}
このようにグラフを描く際に使う値が取得できます。2つのAPIは複合グラフでも利用可能です。
これらのAPIを使って、以下のような監視をすることを妄想中です。
アクセスログからステータスコードごとにまとめて件数をGrowthForecastになげて、エラーの割合が一定を超えたらアラートを出すとか、ツールを連携させることで実現できそうですね
合わせて読みたい
fluent-plugin-flowcounter および fluent-plugin-growthforecast released! #fluentd - tagomorisのメモ置き場