Raven+fluentd+Elasticsearch/KibanaでRailsの例外を集約する

SentryというPythonRubyなど様々な言語の例外を集約して閲覧するWebサービス/OSSがあります。個々のログを検知・閲覧するにはいいんですが、全体を俯瞰して分析するならKibanaの方が良さそうだったので、Sentryに集めているログをKibanaに流してみました。

用意するもの

セットアップ

Rails

まず、Railsを壊します。

class ItemsController < ApplicationController
  def index
    1 / 0 # ZeroDivisionError
  end

Raven::Transports::Fluentdのドキュメントにしたがって、config/initializers/raven.rbを作成。

require 'raven'
require 'raven/transports/fluentd'

Raven.configure do |config|
  config.dsn = "fluentd://SENTRY_PUBLIC_KEY:SENTRY_SECRET_KEY@localhost:24224/2"
end

それからRailsアプリを起動します。

fluentd・Elasticsearch/Kibana

以下の設定でfluentdを起動します。

<source>
  type forward
</source>

<match sentry.error>
  type raven_decoder
  prefix decoded
</match>

<match decoded.**>
  type elasticsearch
  logstash_format true
  logstash_prefix sentry_error
  host localhost
  port 9200
</match>

またElasticsearch/Kibanaも起動しておきます。

動作確認

http://localhost:3000/items にアクセスすると当然エラーになります。 f:id:winebarrel:20150523013651p:plain

そうしてしばらく待つとElasticsearchにエラーが記録されます。

Kibanaにあくせすして、インデックスの設定を行うと f:id:winebarrel:20150523020758p:plain

KibanaでRailsのエラーが閲覧できるようになります。 f:id:winebarrel:20150523013738p:plain f:id:winebarrel:20150523013745p:plain