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

  • 862
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

近年、自分の中で集計/可視化は
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. 個人の感想です