今更ですけど、fluentdについてマトメてみる(その3)

今回は前回の応用としてrailsアプリのログの集計をしてkibanaで見るというところまでやります。

# 前提
以下のものを使います

- Rails 4.1
- ruby  2.1.5
- fluentd
- elasticsearch 1.4.4
- kibana 4

# 設定
## rails
以下のgemを使います

### gemの追加
```
gem 'act-fluent-logger-rails'
gem 'lograge'
```

このgemはfluentdのホームページにrailsアプリのログを収集する場合にはこれを使うとよいと書かれていたので、こちらを採用しました。Gemfileに書いたら<code>bundle install</code>して入れてしまいましょう

### config/application.rbにログの定義を追記
config/application.rbに以下のコードを追加します

```rb:config/application.rb
  config.log_level = :info
  config.logger = ActFluentLoggerRails::Logger.new
  config.lograge.enabled = true
  config.lograge.formatter = Lograge::Formatters::Json.new
```
ここではログをjson形式で出力するようにしています。本番ではlogstash形式にしようと思っています。

### config/fluent-logger.ymlを追加
fluentdへの接続設定を定義したyamlファイルを作成しconfig以下に配置します。

```yaml:config/fluent-logger.yml
development:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'rails.log'
  messages_type: 'string'

test:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'rails.log'
  messages_type: 'string'

production:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'rails.log'
  messages_type: 'string'
```

今回はローカルの設定になっていますが、本番ではここは用意されたfulentdサーバのipや指定されポートになります。

以上でrails側の設定は終わり！

## fluentd
続いてfluentdです。このfulentdはTreasure dataで開発されたログ収集ツールです。様々な形式のログに対応し、rubyで作成されています。プラグインも色々あり必要があれば自分で機能を追加することもできます。今回はfluent-elasticsearchプラグインを使います。

## fluentdのインストール
[本家のページ](http://docs.fluentd.org/ja/articles/install-by-gem)の通りにやればできます。

```
gem install fluentd --no-ri --no-rdoc
fluentd --setup ./fluent
```
ここまでやるとfluentディクレトリ以下に<code>fluent.conf</code>が作成されるので、それを以下のように編集します。

```rb:flunet/fluent.conf
<source>
  type forward
  port 24224
  tag rails.log
</source>

<match rails.*>
  host localhost
  port 9201
  index_name fluentd
  type_name fluentd
  type elasticsearch
</match>
```

まず<code>sourceタグ</code>の中でfluentdで受け付けるログの定義をかきます。今回はrailsのログを24224ポート（ちなみにこのポート番号はデフォルト）で起動したfluentdが受け付けるという設定です。次に<code>matchタグ</code>は受け取ったログをどうするか定義しています。今回はローカルで起動しているelasticsearchに入れる設定になっています。

### elasticsearchプラグインをいれる
以下のコマンドを入力し、elasticsearchプラグインを入れます。

```
gem install fluent-plugin-elasticsearch
```

起動は以下のようにしてfluentdで起動します。-cで先ほど作成したconfファイルを指定します。

```
fluentd -c ./fluent/fluent.conf -vv &
```

## eltsticsearch
続いてelasticsearchです。インストールにはJavaが必要です。javaはoracleからダウンロードしてきて入れます。で、elasticsearchは[本家](http://www.elasticsearch.org/overview/elkdownloads/)からダンロードするのでもいいですし、macならHomebrewから入れるのでも良いとおもいます。今回はローカルのmacで取り敢えず確認したかったので、<code>brew install elasticsearch</code>で入れてしまいました。

### プラグインインストール
日本語対応のためelasticsearch-analysis-kuromojiを入れます

```
plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.3.0
```

※TODO: 起動時にエラーがあったので、後で調査。

またelasticsearchの設定やデータが入っているかをブラウザで確認できるようにするためにelasticsearch-headも入れておきます。

```
plugin --install mobz/elasticsearch-head
```

これでelasticsearchを起動してlocalhost:9200/_plugin/headを起動するとelasticsearchの内容がみれます。

![スクリーンショット 2015-03-01 0.26.23.png](https://qiita-image-store.s3.amazonaws.com/1448/1686/0ffed547-01d0-847b-05a1-12e074ffd2de.png)


## kibana4
kibana4を[こちら](http://www.elasticsearch.org/overview/kibana/installation/)からダウンロードしてきます。ダウンロードしたら、解凍し<code>config/kibana.yml</code>を開いて、上の方に書いてある<code>elasticsearch_url</code>にelasticsearchの接続URLをかきます。

```yaml:config/kibana.yml
# Kibana is served by a back end server. This controls which port to use.
port: 5601

# The host to bind the server to.
host: "0.0.0.0"

# The Elasticsearch instance to use for all your queries.
elasticsearch_url: "http://localhost:9201"

# preserve_elasticsearch_host true will send the hostname specified in `elasticsearch`. If you set it to false,
# then the host you use to connect to *this* Kibana instance will be sent.
elasticsearch_preserve_host: true

# Kibana uses an index in Elasticsearch to store saved searches, visualizations
# and dashboards. It will create a new index if it doesn't already exist.
kibana_index: ".kibana"

# If your Elasticsearch is protected with basic auth, this is the user credentials
# used by the Kibana server to perform maintence on the kibana_index at statup. Your Kibana
# users will still need to authenticate with Elasticsearch (which is proxied thorugh
# the Kibana server)
# kibana_elasticsearch_username: user
# kibana_elasticsearch_password: pass
.....
以下省略
..

```

書いた後、起動(bin/kibanaとうつだけ)すれば、elasticsearchに入っているログデータを見ることができます！！！！

![スクリーンショット 2015-03-01 0.35.00.png](https://qiita-image-store.s3.amazonaws.com/1448/1686/00301101-c7a8-73e1-904a-af8654d49055.png)

と、思ったら、ダッシュボードの設定がkibana3と比べて難しくなっていたので、ちょっと調べます。
取り敢えず起動してlocalhost:5601にアクセスしたら、

1. Index contains time-based eventsのチェックボックスをオフする
2. Index name or patternにfluentdと入力してから、Createボタンをクリック
3. 多分elasticsearchの設定読み込んでいるので左上の「discover」ボタンを押す

とそこまでやったら、上記のような画面になるはずです。

次回はelasticsearch周りの設定について、より深く調べて書いていこうとおもいます。