SentryというPythonやRubyなど様々な言語の例外を集約して閲覧するWebサービス/OSSがあります。個々のログを検知・閲覧するにはいいんですが、全体を俯瞰して分析するならKibanaの方が良さそうだったので、Sentryに集めているログをKibanaに流してみました。
用意するもの
- 壊れたRailsアプリ
- Raven-Ruby
- Sentryのクライアント(Ruby版)
- Raven::Transports::Fluentd
- Ravenの出力をfluentdに向けるためのライブラリ
- fluentd
- fluent-plugin-elasticsearch
- fluent-plugin-raven-decoder
- Elasticsearch/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 にアクセスすると当然エラーになります。
そうしてしばらく待つとElasticsearchにエラーが記録されます。
Kibanaにあくせすして、インデックスの設定を行うと
KibanaでRailsのエラーが閲覧できるようになります。