search
LoginSignup
66

More than 5 years have passed since last update.

posted at

updated at

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

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では以下のエラーはキャッチしないようにデフォルトで設定している。

    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にし、テストをすると良い。

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
What you can do with signing up
66