LoginSignup
168
177

More than 5 years have passed since last update.

ElasticSearchとKibana

Posted at

ElasticSearchとは

Elasticsearchは、割と設定とかが簡単で使いやすい全文検索エンジンで、内部でJava実装のLuceneを利用している。
http://www.elasticsearch.org/overview/elasticsearch

Kibana連携の際は、単に検索というより、可視化したいデータを高速にフィルタリングして集計する用途で使われていると思ったほうが良い感じ。

ElasticSearchのインストール

brew install elasticsearch

Kibanaとは

ElasticSearch社が提供している、ログデータの可視化ツール。Apatchなどのシステムログを用いる例ばっかりWeb上で見つかるが、別に検索のクエリログやWebサイトの行動ログだってちゃんと入れて設定すれば使える。

Kibanaのインストール

ElasticSearchのプラグインとしてインストール

plugin -i elasticsearch/kibana

(現在はkibana3としなくても、Kibana3が標準でインストールされる。package.jsonみたら3.0.0pre-milestone5バージョンがインストールされていた。)

とりあえずここまででKibanaを見てみる

http://localhost:9200/_plugin/kibana にアクセス

何かバージョンが古いよみたいなこと言われるけど、気にしないで使える。

kibana1.png

kibana2.png

こうすると、Elasticsearch自身のログを使ってサンプルダッシュボードを表示してくれるため、ElasticSearchを使ってインデックスを作ってみたりしていれば何かが表示されるはず。

Kibanaに関しては、他に何が出来るかなどの公式情報が全然ない。Demoや本番でWebUIで使いつつカスタマイズしていく感じ。

Kibanaで表示できるパネルの種類などは日本語では以下のページがよくまとまっていた。

ここにも書いてあるけど、カスタマイズ後に保存を忘れないように!

Fluentdとは

色んな所からログを集めてきて、必要な部分を必要なところに、出来る限り失敗しないように出力するツール

公式のページの図がわかりやすいので引用

fluentd
http://docs.fluentd.org/ja/articles/quickstart

基本的な、入力元や出力先の設定方法は以下を参照
http://docs.fluentd.org/ja/articles/config-file
(リンクをたどっててエラーになる場合はjaをenに変えると読めます)

Fluentd(td-agent)のインストール

brew install "http://toolbelt.treasuredata.com/brew/td-agent.rb"

fluentdとか言いながらtd-agentって出てくるけど、この2つの関係性ってなんなの?
って思うはず。

td-agentは

Fluentd安定版の配布パッケージ

らしい。
とりあえずは、まぁtd-agent使っとけばfluentdなんだなと思っておいて大丈夫。

詳しくは以下の2つのリンク参照

FluentdによりKibana可視化用データを挿入

Elasticsearchを使ってKibanaで可視化する(外国)人は、普通、ログの収集にLogstashというのを使う。が、日本ではFluentdが人気。開発陣に日本人が多いから日本語のドキュメントやサポートが豊富なことが理由なんだろう。
ちなみにLogstashが普通な理由は、Kibana, ElasticSearch, Logstashは全て同じ人たちが開発しているから。ただ、ここの人たちはデモは作るけどドキュメントは(サポートでお金をとっているからか)わりと適当な傾向がある気がする。

自分の場合は、正直どっちでも良かったのだが、そもそもTDでAnalyzeしたデータを可視化したいという欲求があったため、日本人の主流に乗ることにした。

ElasticSearch+Kibana+Fluentd連携

ElasticSearch+Kibana+Fluentd連携の記事はいくつもあるけど、公式ドキュメントは以下

Fluentd, Elasticearch連携用Fluentdプラグインのインストール

gem install fluentd fluent-plugin-elasticsearch

とドキュメントには書いてあるけれど、これでインストールされる場所はfluentdの起動時に読み込まれるgemの空間と違う可能性があるので以下のようにするのがオススメ。

/usr/local/bin/fluent-gem install fluentd  fluent-plugin-elasticsearch

こうしないと自分は以下の様なエラーが出た。

config error file="/usr/local/etc/td-agent/td-agent.conf" error="Unknown output plugin 'elasticsearch'. Run 'gem search -rd fluent-plugin' to find plugins"

RailsAppからのログデータの送り方

Rubyのプログラムからは、td-logger gemを使うと、データをTreasure Dataに送ることが出来る。
この時デフォルトだとtd-agentを使わないが、これを使うようにすることも出来る。(ドキュメント上ではIndirectUploadと言われている方法)ここらへんの設定は、http://docs.treasuredata.com/articles/rails に詳しい。
なお、Herokuを使っていてtd-agentを使いたい場合はHeroku上に別アプリケーションとしてtd-agent用のプロセスを建てることになる。( http://docs.treasuredata.com/articles/heroku-rails )

このようにtd-agentを利用することにより、TDに送るデータをElasticSearchにも同時に送る事ができるようになる。

ローカル用のtd-agent.confの設定は以下: (linux系だったら/usr/localのプレフィックスを取ると良いはず)

/usr/local/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
</source>
<match td.*.*>
  type copy
  <store>
    type tdlog
    apikey [YOUR_API_KEY]
    auto_create_table
    buffer_type file
    buffer_path /usr/local/var/log/td-agent/buffer/td
    use_ssl true
  </store>
  <store>
    type elasticsearch
    logstash_format true
    include_tag_key true
    tag_key _key
    # id_key user_id
    # host localhost
    # port 9200
  </store>
  flush_interval 10s
</match>

この時、TDとElasticSearchの両方に同時に送るためにcopyアウトプットプラグインを利用している。
http://docs.fluentd.org/en/articles/out_copy

type elasticseachの時に指定できるパラメータ

  • logstash_format: trueにすると、Kibanaが想定しているlogstash形式でログの時間情報を入れる
  • include_tag_key: matchで指定している部分のtag名をデータに含めるかどうか
  • tag_key: include_tag_keyの場合、その時のキーの名前は何にするかを指定
  • id_key: どのフィールドをelasticseachの_idとして使うのか指定。指定しないとランダムになる
  • host: elasticsearchのホスト(default: localhost)
  • port: elasticsearchのポート(default: 9200)

細かいことは解説を読むより以下のコードを読むほうがはやい。
https://github.com/uken/fluent-plugin-elasticsearch/blob/master/lib/fluent/plugin/out_elasticsearch.rb

td-agentを起動

ln -sfv /usr/local/opt/td-agent/homebrew.mxcl.td-agent.plist ~/Library/LaunchAgents/.
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.td-agent.plist

起動しているか確認:

ps aux | grep 'td-agent'

起動していなかったら、

tail /usr/local/var/log/td-agent/td-agent.log

を見てみると良い。

その他、参考になったリンク

TD Queryの結果を別のTDのテーブルに入れる方法
http://docs.treasuredata.com/articles/result-into-td

168
177
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
168
177