ウェブサービスを作っています。

Sidekiq でリトライが起きたときだけ Sentry に送信する

エラートラッキングサービスの Sentry ですが、 一時的な通信エラーなど、Sidekiq で 1 回リトライすれば解決するようなエラーまで捕捉されると、通知が多くて厄介です。

そこで、リトライが起きたときだけ Sentry に送信されるようにしてみます。


まず、sentry-sidekiq gem を入れます。

Gemfile

gem 'sentry-rails'
gem 'sentry-ruby'
gem 'sentry-sidekiq'

次に、Sentry 設定の before_send を使ってフィルタ設定をします。

config/initializers/sentry.rb

Sentry.init do |config|
  ...

  if Sidekiq.server?
    config.before_send = ->(event, hint) {
      sidekiq_context = event.contexts[:sidekiq]

      # sidekiq_context['retry_count'] が nil => リトライ前
      (sidekiq_context && sidekiq_context['retry_count'].nil?) ? nil : event
    }
  end
end

以上で、リトライが起きたときだけ Sentry にエラーが送信されるようになります。