ようへいの日々精進XP

よかろうもん

fluentd と Elasticsearch と kibana の組み合わせがとても気に入ったのでメモ

きっかけ

fluentd で集めたログを GUI で簡単に見ることが出来ないかと悩んでいたら、以下の参考にしたサイトのように良い事例があるではないですかということで早速チャレンジ。


参考にしたサイト


うんちく

自分なりに整理した Elasticsearchkibana について。

Elasticsearch

  • Apache Lucene をベースに作られた RESTful な検索エンジン
  • JSON で設定や検索が可能
  • スキーマレスなのでデータをジャンジャン放り込める(?)

kibana

  • Elasticsearch のフロントエンドとして動作する
  • ログを検索したりトレンドをグラフ化する Web アプリケーション(以下はスクリーンショット

f:id:inokara:20130907124404p:plain


設定

環境

  • Debian 6.0.7
  • 既に td-agent がインストール済み(fluentd 0.10.38)
  • 既に Apache もインストール済み

準備

openjdk-6-jdk のインストール

ElasticSearch をいきなりインストールしようとしたところ、

Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME
invoke-rc.d: initscript elasticsearch, action "start" failed.

Java の実行環境が見つからないと怒られてしまったので openjdk-6-jdk をインストールする。

sudo apt-get install openjdk-6-jdk

bundler のインストール

kibana のセットアップには bundler が必要なのでこやつもインストールしておく。

sudo gem install bundler --no-ri --no-rdoc -V

ElasticSearch の設定

インストール

deb パッケージがあるのでそちらを利用させて頂く。

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.3.deb
sudo dpkg -i elasticsearch-0.90.3.deb

ちょっと困った

ElasticSearchinit スクリプトで使われている start-stop-daemon のオプションの一部が Debian 6.0.7 では非対応らしく、以下のようなエラーを吐いて ElasticSearch が起動しない。

Starting ElasticSearch Server:start-stop-daemon: unrecognized option '--status'
Try 'start-stop-daemon --help' for more information.
start-stop-daemon: unrecognized option '--status'
Try 'start-stop-daemon --help' for more information.
 failed!

仕方ないので以下のように修正して起動出来るようにした。ちなみに Debian 7Ubuntu 13.04 で使われている start-stop-daemon では --status オプションがサポートされているのでこの対応は不要。

kibana の設定

kibana ユーザーを作成

root ユーザーで色々とやるのが嫌なので kibana を動作させるユーザーを作る。

adduser kibana

一応、sudo 権限も与えておく。(後から削除しても良いかと。)

git clone

こちらを参考にして kibanaリポジトリを clone してくる。

sudo su - kibana
git clone --branch=kibana-ruby https://github.com/rashidkpc/Kibana.git

bundle install

bundle install を実行する。

sudo bundle install

最後に以下のようなメッセージが表示される。

あわせて tzinfo-data という gem もインストールする。

sudo gem install tzinfo-data --no-ri --no-rdoc -V

kibana を起動してみる

cd ~/Kibana
ruby kibana.rb

を実行すると以下のようなメッセージが表示される。

f:id:inokara:20130907121925p:plain

ブラウザでは $Server_IP:5601 にアクセスすると以下のように表示されて嬉しい。

f:id:inokara:20130907122138p:plain

fluent-plugin-elasticsearch の設定

fluent-plugin-elasticsearch のインストール

Elasticsearch と kibana の組み合わせで fluentd を利用する為に fluent-plugin-elasticsearch をインストールする。

/usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch --no-ri --no-rdoc -V

td-agent.conf の設定

fluent-plugin-elasticsearch を扱う為に td-agent を以下のように設定する。

設定のキモとしては include_tag_key truetag_key @log_name で、上記例の場合、これらを設定することで @tag_keydebian.apache.access となり、複数のホストからログが送られても kibana 上で tag_key で絞り込むことが可能となる。

(以下、追記)

  • logstash_format true の場合 index_name 不要

使ってみる

実際にログを見てみる

ab で適当にアクセスを偽装してログを出力してみる。

適当にアクセスしてみる

ab で適当にアクセスを偽装してみる。

ab -c 10 -n 10 http://xxx.xxx.xxx.xxx/

kibana にアクセスする

kibana にアクセスしてログが記録されているかを確認する。

f:id:inokara:20130907124404p:plain


ということで

  • fluentd と Elasticsearch と kibana の組み合わせっていい!