SentryのIssueの容疑者をSlackで個別メンションしてみた
こんにちは、Buzoです。
最近エラー監視のためにSentryを導入しました。
SentryのアラートをSlackのチャンネルに流す基本的な連携は簡単に設定できますが、「誰がこのエラーに対応すべきか」が明確でないケースが出てくることが予想されます。
チャンネルに流れるアラートを開発者全員が確認し、自分に関係ありそうなものを探して対応する方法では、対応漏れや効率の低下につながる可能性があります。
そこで、Sentryの「Suspect Commits」機能を活用して、エラーに関連する可能性が高いコミットの作成者に直接Slackでメンションする仕組みを作りました。この記事ではその実装方法を紹介します。
Sentryとは
Sentryは、アプリケーションのエラー監視とパフォーマンス計測を行うためのオープンソースのモニタリングツールです。
やりたいこと
Sentryではエラー監視を行い、Issueがある一定の条件に達したらアラートを出すように設定できます。
(例えば、1時間以内に100件同じエラーが発生したら〜など)
Issueが発生したら、SentryのSlack連携機能を使ってSlackチャンネルにメッセージを出すようにしてます。
SentryにはSuspect commitという便利な機能が合って、GitHubと連携することであるIssueに対する疑わしいコミットを検出することができます。
そのコミットの作成者に直接Slackメンションをすることができれば、運用としてスムーズになりそうということです。
作ったもの
色々調べた結果、SentryのSlack連携だけではやりたいことはできなそうだったのでCloud functionsを作って対応しました。
実装の大まかな流れは以下の通りです。
- SentryのWebhook受信: Sentryからのアラート情報を受け取る
- Suspect Commits情報の取得: Sentry APIを使って関連する疑わしいコミット情報を取得
- コミッター情報の取得: GitHub APIを使ってコミットの作者情報を取得
- Slack IDのマッピング: GitHubユーザー名からSlack IDへの変換
- 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であり、予告なく変更または削除される可能性があるため注意が必要です。
Slack IDのマッピングについて
GitHubユーザー名からSlack IDへのマッピングについては、社内に既存のAPIがあったため活用しました。このAPIは、NotionでGitHubアカウント名とSlack IDをマッピングしたデータベースを基にしており、他の社内エンジニアリングツールでも利用されています。
新しく入社したメンバーについては、オンボーディングの際にNotionデータベースに情報を追加してもらうフローになっているため、メンテナンスの手間も最小限に抑えられています。
おわりに
Suspect Commits機能を活用して個人にメンションを送ることで、より迅速にエラーに対応できる仕組みを構築しました。
これにより以下のメリットが期待できると考えています。
- エラー対応の責任の明確化
- チーム全体の通知疲れの軽減
- 対応漏れの低減
本格的な運用はこれから始まるところなので、実際の効果測定はこれからです。
運用を続けて得られた知見や、効果測定の結果については、また別の記事で共有したいと思います。
Discussion