LoginSignup
1
0

Sentry カスタマイズ

Last updated at Posted at 2024-03-13

スコープを区切ってカスタマイズ

SQSのキューイングが失敗した際の例

Sentry.with_scope do |scope| を利用するとこの中で set_したものは
このスコープの中でだけ有効になります。

failed_context = response.successful.map { |entry| [entry[:id], entry] }.to_h
message = "SQS送信に失敗したユーザID: #{failed_context.keys}"

Sentry.with_scope do |scope|
  scope.set_tags(failed_ids: "タグ")
  scope.set_context('送信に失敗したID', failed_context)
  Sentry.capture_message("SQSへの登録に失敗しました")
end

メソッド名 説明
configure_scope このメソッドを使うと、その後発生する全てのエラーログに対して適用されるグローバルなスコープを設定することができます。例えば、すべてのエラーに共通のユーザ情報を追加したいときに使います。
with_scope このメソッドを使うと、一時的(そのブロック内限定)なスコープを作成できます。ブロックが終了すると、そのブロック内で設定したスコープはクリアされます。独自のエラーメッセージや一時的なエラー処理に追加情報を提供したい場合に使います。
push_scope push_scopeも新たなスコープを作るメソッドで、with_scopeと同様に一時的なスコープを作成します。ただし、push_scopeは新たなスコープをスタックに積む(push)ため、複数のスコープを重ねて利用することができます。そのため、深いネストの中で一時的なスコープを作成しつつ、外側のスコープへの影響を避けたい場合に有用です。

意図的な raise とともにエラーを送りたい

raise すると Sentry に自動で通知されると思います
なので Sentry capture exception を実行すると多重送信になってしまうのを
こちらで防いでます。

failed_context = errors.index_by { |entry| entry[:id] }

Sentry.with_scope do |scope|
  scope.set_context("送信に失敗したID", failed_context)
  begin
    raise "SQSへの登録に失敗しました"
  rescue StandardError => e
    Sentry.capture_exception(e)
    raise e
  end
end
1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0