Help us understand the problem. What is going on with this article?

RailsアプリケーションにSentryを導入する

More than 1 year has passed since last update.

railsアプリケーションにSentryを導入する。

Sentry とは

https://sentry.io/welcome/
エラーログ収集に使うツールである。slack通知などもできるので便利。

Railsアプリケーションに導入

基本的にはドキュメントのとおり。
https://docs.sentry.io/clients/ruby/integrations/rails/

installation

ruby用のSentryクライアントとして、 raven-ruby gemを使う。

gem "sentry-raven"
bundle install

Configuration

config/initializers 配下などにraven.rbなど適当な名前で作成する。

Raven.configure do |config|
  config.dsn = 'https://<key>:<secret>@sentry.io/<project>'
end

'https://<key>:<secret>@sentry.io/<project>' はSentryの任意のプロジェクトに接続するためのAPIキーである。
このAPIキーはRailsアプリケーションの場合、dotenvなどで環境変数として設定するのが良いだろう。

Parameters Filtering

パスワード等の情報をフィルタリングしている(このような設定をしている↓)場合
http://qiita.com/kakkunpakkun/items/4639bc653924e2dc8dbe

Raven.configure do |config|
  config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s)
end

とすることでその内容をSentryに送らないようにできる。

environment

環境によってSentryを使用するか選択する場合、以下のように設定する。
(例)test, production環境で動かす場合

Raven.configure do |config|
  config.environments = %w[test production]
end

開発環境で確認したい場合、config.environments = 'development' を追加する。

Test

rubyでテスト

単純にrubyコードでテストしたい場合、以下のようなコードを実行する。

Raven.capture { 1 / 0 } 

rake taskでテスト

bundle exec rake raven:test["https://<key>:<secret>@sentry.io/<project>"]

でSentryと接続テストを行うことができる。

アプリケーション上でテスト

Railsアプリケーションでは上の設定のみで、Raven.capture を呼ばなくてもSentryにエラーログを収集できる。試しにアプリケーションコード内で1/0のような例外を発生させれば良い。

またエラーハンドリングしたい場合は、Raven.capture_exception(e) メソッドを使用する。

気をつける点

エラーキャッチから除外されているものがある

sentry-ravenでは以下のエラーはキャッチしないようにデフォルトで設定している。

https://github.com/getsentry/raven-ruby/blob/a80cf01488b5dc7f3930975274c4d109816dd258/lib/raven/configuration.rb#L152-L161

    IGNORE_DEFAULT = [
      'AbstractController::ActionNotFound',
      'ActionController::InvalidAuthenticityToken',
      'ActionController::RoutingError',
      'ActionController::UnknownAction',
      'ActiveRecord::RecordNotFound',
      'CGI::Session::CookieStore::TamperedWithCookie',
      'Mongoid::Errors::DocumentNotFound',
      'Sinatra::NotFound'
    ].freeze

開発環境で動かない

自動でエラーキャッチできるはずが動かない場合、

gem 'better_errors'
gem 'binding_of_caller'

のようなgemがデバッグ用に使われるのでそこで処理が止まってしまい、ravenがcallされないことがあるかもしれない。

config.consider_all_requests_local = true にしている

詳細なデバッグ情報をHTTPレスポンスとして出力するかどうかのフラグで、development環境ではデフォルトでtrueになっている。
これが邪魔をする可能性があるので一時的にfalseにし、テストをすると良い。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした