公式ドキュメントに載っている可視化ツールの比較です。 @toritori0318 さんのログ集計/時系列DB/可視化ツールの調査結果 に大体まとまっているので、詳しくはそこを見てください。
今日は主に Grafana と Influga を扱います。
- 見た目がきれい!(Kibana を fork したので、まんま Kibana)
- ひと通りの機能は揃っているので、迷ったらこれ!
- 公式 SaaS にも組み込まれているので、本命です。開発も活発
- インストールが面倒(HTTPサーバ、elasticsearch)
- Kibana の残骸が罠。例えば、nginx のサンプル設定ファイルは間違っている!
- ソースに kibana が残ったままのやつは要注意!
- Graphite に特化していくのか、InfluxDB に特化していくのか将来性が若干微妙。最近は InfluxDB 寄りなので、安心ではある。
- 1グラフ=1クエリなので、すごいダッシュボードをつくると、容易にブラウザ/サーバクラッシャーと化す => と思っていたけど、最新版では良くなってた!
npm
パッケージとして提供されているので、インストールが簡単
$ npm install -g influga
- ちょっと高機能な Explorer Interface 程度を目指しているので、使い方が簡単
- SQL(InfluxDB Query)が直接書け、複数のグラフを1クエリで取得できる
- まだ、開発途上でバグ多い、機能が足りない
Vagrant でセットアップできる環境を用意しました。
https://github.com/hakobera/influxdb-visualize-playground
fill
を上手く使うと、0フィルが簡単に書けるよ。
http://influxdb.com/docs/v0.7/api/query_language.html#filling-intervals-with-no-data
Kibana はユニークカウントが取れないので、elasticsearch と同じデータを InfluxDB に流して、Influga でユニークユーザ数などを可視化してます。
Locustという Python で書かれた負荷テストツールがあり、カスタマイズできるので InfluxDB の Python クライアントを使って直接 InfluxDB にリクエストの結果(成否、レスポンスタイムなど)を突っ込んで、後で分析しています。
from influxdb import InfluxDBClient
client = InfluxDBClient(host, port, user, password, dbname)
def output_request_log(request_type, name, response_time, response_length, **kw):
json_body = [{
"points": [[ request_type, name, response_time, response_length ]],
"name": "loadtest_result",
"columns": [ "request_type", "name", "response_time", "response_length" ]
}]
client.write_points(json_body)
events.request_success += output_request_log