Fluentd
Elasticsearch
graphite
Kibana
influxdb

ログ集計/時系列DB/可視化ツールの調査結果

More than 3 years have passed since last update.

近年、自分の中で集計/可視化は

Fluentd(datacounter)+Growthforecast

で定番化していました。

しかしプロダクトで新たに集計/可視化の要件が出てきたことと、

最近可視化ツール周りで

「Kibanaってなんじゃ?」「Graphiteってなんじゃ?」「InfluxDBってなんじゃ?」

など、このツール達は一体何なんだろう…?というのが前々から気になっていました。

今回良い機会なので

◯◯は何をするものなのか?

というのを一つ一つ調べてみました。

いわゆる「触ってみた系」の記事なので

だいぶ浅い感じです。



大分類

大きく分けると、可視化ツールは以下の3つに分けられそうです。


  • ログ収集/集計

  • 時系列DB(+API)の担当。バックエンド側。

  • 可視化部分の担当。

今回は バックエンド可視化部分 に焦点を当ててみます。



バックエンド


Elasticsearch

全文検索時エンジン+RestfullAPI。

最近人気急上昇らしく事例も増えてきている様子。

安定感ありそう。1


Fluentdプラグイン

https://github.com/uken/fluent-plugin-elasticsearch


Graphite

リアルタイムにグラフを生成するためのバックエンド。

python製であり、以下の3つのコンポーネントで構成されている。


  • graphite webapp

    グラフ描画/APIを提供するDjangoアプリ。


  • carbon

    時系列DBを提供するバックエンド。


  • whisper

    RRDToolsの代替?


Graphite単体でもグラフを生成できるが「時系列DBのAPI」として使われることが多いのかな?

API部分がapache+python(wsgi)なので、慣れていないと導入が多少面倒かも。

また、いろんなコンポーネントで構成されているので少しfatな印象を受けた。


Fluentdプラグイン

https://github.com/studio3104/fluent-plugin-graphite


InfluxDB

時系列データベース+API。

Go製。

Database/series(Table)というRDBMSっぽい管理ができる。でもスキーマレス。

SQLクエリを発行してグラフを表示する、というWeb画面もついてくる。

勢いを感じるが、安定度はどうなんだろうか。


Fluentdプラグイン

https://github.com/fangli/fluent-plugin-influxdb



可視化ツール


Kibana

※2014/10/17追記:kibana4がベータリリースされました

いくつか大きな変更点があるようです。詳しくは以下の参考URLをご参照下さい。

Kibana 4 Beta 1 released

Kibana 4 BETAファーストインプレッション

※以下、kibana3の説明です

ログ解析&可視化ツール。

Kibana+Elasticsearchというのが今の流行りっぽい1

KibanaはただのWebページ(ブラウザから直接Elasticsearchを参照する)。

バックエンドはElasticsearch。

ダッシュボードを自分でカスタマイズできる(逆に、ある程度自分で作りこむ必要がある)

luceneクエリで集計/フィルタ出来る。

集計だけでなく、生ログ検索が出来るのが良い。

あとTopN分析などもKibanaの設定で可能。

今回紹介する中では一番柔軟に出来そうなイメージ。

Splunkに近い?という印象。

kibana.png


Grafana

Graphiteをバックエンドとし、Kibanaっぽいダッシュボードを生成するためのソリューション。

(というか、Kibanaがお父さん)

元々はGraphite用であったが、最近InfluxDBにも対応した様子。

Kibanaと同様に、GrafanaもただのWebページで構成されている。

バックエンドはGraphite or InfluxDB。ただしダッシュボードの保存にはElasticsearchを利用しているらしい。

以下は、Kibanaと比べて地味に嬉しい点。


  • パネルのコピーが出来る

  • ダッシュボード変更してから未保存でページ閉じる時、きちんとアラートを出してくれる

grafana-bks.png


Tasseo

Graphite/InfluxDBのリアルタイムダッシュボード生成ツール。

Ruby製のwebサーバ。

出来ることは少ないが、config.jsにメトリクスを羅列するだけで

リアルタイムグラフが描けるお手軽さは良い。

サーバのリソース監視には向いて無いかも…1

コメント で補足して頂きました

tasseo.png


Giraffe

Graphiteのダッシュボード生成ツール。

dashboard.jsを設定するだけでいい感じに可視化出来る。

以下で「ユーザデータ集計/サーバリソース監視/HTTPリクエスト集計」 などのダッシュボードデモが見れる。

とても良さそうな印象1

Giraffeデモサイト

giraffe.png


Influga

InfluxDBのダッシュボード生成用ツール。Grafanaの対抗馬?

Node製。

設定は画面からポチポチ系だが

Kibanaなどと比べるとだいぶお手軽にグラフを作ることが出来る1

まだリリースされたばかりということもあり、表示が微妙なところもあったり。

しかし開発は活発なようです。

influga.png



番外編:Norikra

ストリーム集計ツール。SQLっぽく検索集計出来るのが特徴。

上記とは少しロールが異なり、直接バックエンドになるという感じではなく

集計する部分にのみ特化しているツール。

ログ収集の途中に差し込んで集計を柔軟/楽にする、という立ち位置?

(Fluentdでいうところのdatacounterとかその辺りをさらに柔軟に書くことが出来る)

また、JVMを運用したことがないのでその辺りが不安ポイント。


Fluetndプラグイン

https://github.com/norikra/fluent-plugin-norikra



まとめ


表にしてみた

可視化ツール名
構成要素
時系列DB

Kibana4
JRuby
Elasticsearch

Grafana
webページ
Graphite/InfluxDB

Tasseo
Ruby
Graphite/InfluxDB

Giraffe
webページ
Graphite

Influga
Node.js
InfluxDB


雑感

今回、元々の要件ではリアルタイムログ表示+集計がしたかったので、

Kibana+Elasticsearchが合ってるのかなぁと思いました。

お手軽さ優先ならInfluxDB+Tasseo/Influga。

Graphite+Giraffeも軽く触った印象は良かったのでもう少し試す予定。

ちなみに性能/安定性は考慮していません。

ログが集中するとどうなるか、またはメトリクスの数を増やした時にどうなるか、は気になるところ。


補足

いろいろ調べているうちに

ログ集計だけでなくてリソースモニタリングも出来そうということがわかり

そうなるとSensuも紹介したほうがいいのかなぁと思いましたが

そこまで調べるとだいぶ大変そうだったので今回は入れておりません。

またの機会に触ってみたいと思います。


参考

1. 個人の感想です