ローカルで動かしている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で配信するようにしたりとかいろいろ簡単にできそうな感じ。