Slackに流しているアラートをいい感じに集計するActionsを作成しました!
はじめに
稼働中のアプリケーションのアラートをSlackに通知し、その通知のたびに何かしらの対策を講じるチームは多いと思います。しかし、これらのアラートを集計し、動向や傾向を把握したのちに、改善に役立てているチームはそれほど多くはないのではないでしょうか。
その改善を支援するために、アラートをざっくりと集計するGitHub Actionsを作成しました。
2024年8月時点では以下のサービスからのアラートを集計できます。
- Datadog
- Sentry
- PagerDuty
- AWS Chatbot
- digdag-alert
事前準備
Slack Appを作成し、適切な権限を設定する必要があります。
- Slack Appを作成し、パブリックチャンネルの場合は
channels:history
、プライベートチャンネルの場合はgroups:history
の権限を付与します。 - 集計結果をSlackに送信したい場合は、
chat:write
の権限も追加してください。 - 作成したSlack Appをアラートが流れているチャンネルに招待します。
- Slack Appの
Bot User OAuth Token
をリポジトリのSecretsに追加します。
詳しい手順は公式のQuickstartを参考にしてください。
使い方
Slack Appの招待とSecretsの登録が済んだら、あとは上記のActionsを呼び出すだけです。
以下のコードは、PRの作成・更新・再オープン時にトリガーされますが、スケジュールや手動でのトリガーの方が適していると思います。
on:
pull_request:
branches:
- main
jobs:
aggregate-alerts:
name: Aggregate alerts
runs-on: ubuntu-latest
steps:
- uses: kohei-kohei/alert-aggregator@v0
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GET_CHANNEL_ID: ${{ secrets.GET_CHANNEL_ID }}
with:
since: '2024-08-01T00:00:00+09:00'
until: '2024-08-08T00:00:00+09:00'
env.SLACK_BOT_TOKEN
には先ほどSecretsに登録したトークンを指定し、GET_CHANNEL_ID
にはアラートを集計したいチャンネルIDを指定してください。チャンネルIDの確認方法はこちらの記事が参考になると思います。
since
とuntil
を指定しない場合は、実行日の前日から1週間前までのアラートを集計します。タイムゾーンは実行時のサーバーに依存しているため、日本時間に設定したい場合はこちらの例のようにenv.TZ: 'Asia/Tokyo'
を指定してください。
以下のアラートを集計した結果はこんな感じで表示されます。
SEND_CHANNEL_ID
に送信先のチャンネルIDを指定すれば、集計結果をSlackに送信することもできます。
今後の展望
まだ、いくつかの改善点があるためv0
として公開していますが、テストを充実させ、チャンネル名を表示できるようになったらv1
に更新する予定です。
需要があれば送信用のSlack Appを別で指定できるようにしたり、集計結果をoutputs
として出力できるようにしたり、日本語で表示できるようにしていきたいです。
おわりに
このActionsが、皆さんの改善活動に少しでも貢献できれば幸いです!
Discussion