Railsの監視ツールであるSentryを導入した際に、まとまっていて欲しかった情報をまとめました。
環境
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]
$ rails -v
Rails 5.2.5
事前準備
- sentryの公式ページからアカウントを発行しておくこと
公式:
https://sentry.io/auth/login/o/
インストール
- 旧式でRavenという名前になっているが、今はSentryに統一されている
- Sentryの公式ドキュメントを参照するとよい
- 以下はマニュアル通り
まずはライブラリをインストール
Gemfile.rb
gem "sentry-ruby"
gem "sentry-rails"
$ bundle install
設定ファイルに、Sentry公式で取得したdnsファイルを指定する。
下は公式ドキュメントをコピペしてとってきたものなので、各自Sentryの公式から取ってきてください。
config/initializers/sentry.rb
Sentry.init do |config|
config.dsn = 'https://ae057caa888143fd8aaca98d4be139d7@o1185973.ingest.sentry.io/6305953' #ここは環境変数なりに入れる
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
# To activate performance monitoring, set one of these options.
# We recommend adjusting the value in production:
config.traces_sample_rate = 0.5
# or
config.traces_sampler = lambda do |context|
true
end
end
これでとりあえず500エラーなどを起こすと、Sentry側で通知されるようになります。
Sentry.capture_message("test message")
例外が発生した箇所に入れてあげると、Sentry側で捕捉します。
def import
...
...
#何かしら失敗する処理
rescue StandardError => e
Sentry.capture_message(e)
end
環境ごとのエラーの出しわけ
- productionやstaging環境などで、エラーを出し分けたい場合、sentryがよしなに
SENTRY_ENVIRONMENT
という環境変数で切り分けてくれます。 - 弊社ではHeroku上にステージング環境と本番環境が存在するので、それぞれstaging, productionを環境変数に入れています。
.env
SENTRY_ENVIRONMENT = production
SENTRY_ENVIRONMENT = staging
- このように環境変数を指定すると、Environmentごとにどこでエラーが発生したのかがわかるようになります。
Slack連携
- Alertという機能を使うと、Slackと連携してエラーを送ることができます。
- 上記で作成したEnvironmentごとにエラー通知先を切り分けることができるので、ステージングで起こったエラーと本番で起こったエラーなどが簡単に通知先分けられるのがよいです。
- ただしSlack連携は有料化しないとできないため注意が必要です。
SentryでSlackにエラーを送るAlertの設定方法
https://zenn.dev/a_ichi1/articles/0ffcadd00de3e5