概要

アプリのイベントデータを可視化するのにGrowthForecastを使っていたのですが、elasticsearch + kibana3を使うと奇麗なグラフを簡単に出せるよというのを聞いたので試してみました。

前提知識

  • fluentd: ログ集約ミドルウェア
  • elasticsearch: 全文検索エンジン
  • kibana3: ログのビジュアライゼーションツール

elasticsearchが全文検索のインデックスを作成し、kibana3がインデックスのデータを使って時系列のグラフを表示します。GrowthForecastと比べてリアルタイム性に優れ、グラフの内容も詳細です。

kibana2はrubyで作られていましたが、kibana3からはhtml+jsで動いているみたいです。

手順

elasticsearchの準備

elasticsearchをインストールします。
→ Amazon Linuxにelasticsearchをインストールする

fluentdの準備

fluentdのプラグインをインストールします。

$ /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch

アプリのイベントログをelasticsearchに投げるように変更します。

<source>
  type forward
  port 24224
</source>

<match clean_them_all.**>
  type elasticsearch
  include_tag_key true
  tag_key @log_name
  host localhost
  port 9200
  logstash_format true
  flush_interval 10s
</match>

kibana3のインストール

公式サイトからkibana3をダウンロードします。
Elasticsearch.org Kibana

elasticsearchが動いているサーバの9200番ポートにアクセスできればどこで動いていてもかまいません。
僕はsinatraアプリ化したkinaba3をPowで動かし、EC2上にインストールしたelasticsearchにSSHのトンネルを掘って接続しました。

config.jsにelasticsearch接続先の設定があるので必要があれば修正します。

- elasticsearch:    "http://"+window.location.hostname+":9200",
+ elasticsearch: "http://localhost:9200",

kibana3にアクセス

kibana3にアクセスします。
画面中央あたりの「 (Logstash Dashboard)」を選択するとグラフが表示されます。

感想

GrowthForecastと比べて詳細で美しいグラフが描画され、導入も簡単にできました。GrowthForecastの競合かなと思ったのですが世間的にはそうではないらしく、一時的なデータ分析に使えるという評判のようです。

  • グラフの粒度の設定がめんどう(kibana3)
  • インデックスの管理機能が貧弱(elasticsearch)
  • 安定性がイマイチでたまに落ちる(elasticsearch)

というような問題があるらしく、メインのストレージからデータを流して使うのが一般的なようです。MongoDBのレプリケーションもできるらしいので、次はそれを試してみたいと思います。