LoginSignup
40
42

More than 5 years have passed since last update.

fluentdとKibanaでRailsのログを簡単に可視化

Last updated at Posted at 2015-01-30

昨年の秋から,学生プロジェクトで学内向けのRailsアプリを開発しています.
2月からオープンベータで公開されるので,それに向けてログの収集と可視化をしてみました.

環境は下記の通りです.

  • Ubuntu Server 14.04
  • Ruby 2.2.0 & Ruby on Rails 4.2.0
  • td-agent 0.10.58
  • Elasticsearch 1.4.1
  • Kibana 3.1.2

fluentdのインストール

fluentdはOSSなログ収集ツールです.
Rubyで書かれているので,gemでpluginを追加したりします.

今回はRailsアプリを動かすサーバにtd-agentを入れました.
td-agentは,Treasure Dataがメンテナンスしているfluentdの安定板です.

公式のマニュアルに従って,debパッケージをインストール.
スタートアップに登録して,Elasticsearch用のpluginをインストールします.
(libcurl4-openssh-devを入れないとcurl-configでエラーが出ました.)

$ curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
$ sudo update-rc.d td-agent defaults
$ sudo apt-get install -y libcurl4-openssl-dev
$ sudo td-agent-gem install fluent-plugin-elasticsearch

td-agentの設定は以下のようにしました.
formatでは,ログのステータスコードと応答時間だけを取っています.
(非力なVMでElasticsearchを動かしているため,ログは最小限に.)

/etc/td-agent/td-agent.conf
<source>
  type tail
  format /^I, \[(?<time>[^\.]+).+\]  INFO -- : Completed (?<status>[^ ]+) .+ in (?<benchmark>[^m]+)ms.*$/
  time_format %Y-%m-%dT%H:%M:%S
  path /path/to/app/log/production.log
  pos_file /tmp/app.log.pos
  tag app.rails.access
</source>

<match *.rails.*>
  type elasticsearch
  host 127.0.0.1
  port 9200
  type_name ruby-on-rails
  include_tag_key true
  tag_key @log_name
  logstash_format true
  logstash_prefix ruby-on-rails
  flush_interval 10s
</match>

Elasticsearchの設定

Elasticsearchは既にSensuのメトリクス収集に使っています.
追加で設定は必要ないのですが,一応マッピングだけ定義しておきます.

mapping.sh
curl -XPUT http://127.0.0.1:9200/_template/ruby-on-rails -d '{
  "template": "ruby-on-rails-*",
  "mappings": {
    "_default_": {
      "numeric_detection" : true,
      "properties": {
        "@timestamp": { "type":"date", "format":"dateOptionalTime" },
        "@log_name": {type: "string"},
        "status": {type: "integer"},
        "benchmark": {type: "integer"}
      }
    }
  }
}'

Kibanaの設定

KibanaもSensuのメトリクス可視化のために導入済です.

今回は新しくRails用にダッシュボードを作りました.
コード量が多いので,Gistに上げています

rails_fluentd_kibana.png

上のカラムがステータスコードの割合のヒストグラムとパイチャート.
下のカラムが応答時間のヒストグラムです.
シンプルですが,当面はこのくらいの情報量で十分かなと思っています.

まとめ

fluentdとElasticsearch,Kibanaというオーソドックスな構成で可視化してみました.
一番大変だったのは,fluentdのformatを作るところでしょうか….
このノウハウは他にも応用が効きそうなので,色々ログ収集と可視化をしてみたいですね.

また,今回は以下の記事を参考にしました.

40
42
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
40
42