Zenn
🕵️

SentryのIssueの容疑者をSlackで個別メンションしてみた

に公開
1

こんにちは、Buzoです。
最近エラー監視のためにSentryを導入しました。
SentryのアラートをSlackのチャンネルに流す基本的な連携は簡単に設定できますが、「誰がこのエラーに対応すべきか」が明確でないケースが出てくることが予想されます。
チャンネルに流れるアラートを開発者全員が確認し、自分に関係ありそうなものを探して対応する方法では、対応漏れや効率の低下につながる可能性があります。

そこで、Sentryの「Suspect Commits」機能を活用して、エラーに関連する可能性が高いコミットの作成者に直接Slackでメンションする仕組みを作りました。この記事ではその実装方法を紹介します。

Sentryとは

Sentryは、アプリケーションのエラー監視とパフォーマンス計測を行うためのオープンソースのモニタリングツールです。
https://sentry.io/welcome/

やりたいこと

Sentryではエラー監視を行い、Issueがある一定の条件に達したらアラートを出すように設定できます。
(例えば、1時間以内に100件同じエラーが発生したら〜など)
Issueが発生したら、SentryのSlack連携機能を使ってSlackチャンネルにメッセージを出すようにしてます。

SentryにはSuspect commitという便利な機能が合って、GitHubと連携することであるIssueに対する疑わしいコミットを検出することができます。
そのコミットの作成者に直接Slackメンションをすることができれば、運用としてスムーズになりそうということです。

作ったもの

色々調べた結果、SentryのSlack連携だけではやりたいことはできなそうだったのでCloud functionsを作って対応しました。
実装の大まかな流れは以下の通りです。

  1. SentryのWebhook受信: Sentryからのアラート情報を受け取る
  2. Suspect Commits情報の取得: Sentry APIを使って関連する疑わしいコミット情報を取得
  3. コミッター情報の取得: GitHub APIを使ってコミットの作者情報を取得
  4. Slack IDのマッピング: GitHubユーザー名からSlack IDへの変換
  5. Slackへの通知: 上記情報を整形してSlackにメンション付きで通知

このようにSlackにメンション付きのメッセージを送れるようになりました。


(アラート内容は動作確認のためのダミー情報です)

実装の工夫点

Suspect Commits情報の取得

実を言うと、Suspect Commits情報を直接取得するAPIは公開されていませんでした。
↓にSentryのGitHubに挙げられていたIssueのコメントを参考にGET /api/0/projects/{organization_slug}/{project_slug}/events/{event_id}/committers/というAPIを利用しました。
これはプライベートAPIであり、予告なく変更または削除される可能性があるため注意が必要です。
https://github.com/getsentry/sentry/issues/80771

Slack IDのマッピングについて

GitHubユーザー名からSlack IDへのマッピングについては、社内に既存のAPIがあったため活用しました。このAPIは、NotionでGitHubアカウント名とSlack IDをマッピングしたデータベースを基にしており、他の社内エンジニアリングツールでも利用されています。

新しく入社したメンバーについては、オンボーディングの際にNotionデータベースに情報を追加してもらうフローになっているため、メンテナンスの手間も最小限に抑えられています。

おわりに

Suspect Commits機能を活用して個人にメンションを送ることで、より迅速にエラーに対応できる仕組みを構築しました。
これにより以下のメリットが期待できると考えています。

  • エラー対応の責任の明確化
  • チーム全体の通知疲れの軽減
  • 対応漏れの低減

本格的な運用はこれから始まるところなので、実際の効果測定はこれからです。
運用を続けて得られた知見や、効果測定の結果については、また別の記事で共有したいと思います。

1
コミューン株式会社

Discussion

ログインするとコメントできます