ローカルで動かしているRailsアプリでfluentd+elasticsearch+kibana3と連携させてみる
fluentdとかelasticsearchとか触ってみたくなったので、全てをローカルのMacの中に入れて触ってみた。
以下作業ログです。
fluentdのインストール
fluentdをgemから入れて起動する とりあえずconfファイルはいじらないで動かす
$gem install fluentd
$fluentd --setup ./fluent #./fluent/fluent.confを作成
$fluentd -c ./fluent/fluent.conf #fluentdを起動
railsの修正
fluentdにログを流す方法はいろいろあるみたいだけど、ログをLTSV(Labeled Tab Separated Value)形式に変えてからそれをfluentdのsourceで読み込ませることにした。
Gemfileにltsv-loggerを追加
gem 'ltsv-logger'
config/environments/development.rbに以下を追加
config.logger = LTSV::Logger.open("log/development.log")
これでdevelpment.logはLTSV形式で出力されるようになった。
fluentdのコンフィグファイルを修正
sourceに以下を追加。 pathとかtagとらposファイル名は環境に合わせて変える。 とりあえずstdoutで確認したいからtagにはdegbugをつけてる。
<source>
type tail
format ltsv
path /path/to/log.log
tag debug.app.log
pos_file /tmp/application_name.log.pos
</source>
この状態でrailsにアクセスするとfluentdを起動していたターミナルにログが流れてくるのが確認できる。
elasticserachをインストール
手元のマシンがmacなのでとりあえずjavaが動くか確認。
$java --version
なんかいつの間にかインストールしてたみたいなのでそれでいくけど、javaが入ってなければまずインストールする。
次にelasticsearchをダウンロードhttp://www.elasticsearch.org/overview/elkdownloads/
ここからzipをダウンロードして解凍したものをいい感じの場所に置く。 置いたらbinのelasticsearchをターミナルから起動する
$mv Downloads/elasticsearch-1.1.1 work/bin/elasticsearch
$work/bin/elasticsearch/bin/elasticsearch
起動したら以下のコマンドを打って正常に動いているか確認
$ curl -X GET http://localhost:9200/
以下のようなレスポンスが帰ってくれば起動OK
{
"status" : 200,
"name" : "Mindmeld",
"version" : {
"number" : "1.1.1",
"build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc",
"build_timestamp" : "2014-04-16T14:27:12Z",
"build_snapshot" : false,
"lucene_version" : "4.7"
},
"tagline" : "You Know, for Search"
}
一度elasticsearchを止めて日本語を解析するプラグインも入れておく
$work/bin/elasticsearch/bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.0.0
でもう一度起動
$work/bin/elasticsearch/bin/elasticsearch
fluentdからelasticsearchにログを流す
fluentdのプラグインを入れる
$gem install fluent-plugin-elasticsearch
fluentdのコンフィグファイルにmatchディレクティブを追加
<match debug.app.log>
host localhost
port 9200
index_name fluentd
type_name fluentd
type elasticsearch
</match>
kibana3のダウンロードと設定
ここからkibana3をダウンロードしておくhttp://www.elasticsearch.org/overview/kibana/installation/
手元で解凍したら中にあるconfig.jsの中の
elasticsearch: "http://"+window.location.hostname+":9200",
となっている箇所を
elasticsearch: "http://localhost:9200",
に書き換えてindex.htmlを直接開くとelastincsearchの内容がいい感じのUIでみれる。
一通り動いたのであとはこの設定をいじって複数のサーバからfluentdでログを飛ばしたり、kibanaはnginxで配信するようにしたりとかいろいろ簡単にできそうな感じ。