🐈

Slackに流しているアラートをいい感じに集計するActionsを作成しました!

2024/08/18に公開

はじめに

稼働中のアプリケーションのアラートをSlackに通知し、その通知のたびに何かしらの対策を講じるチームは多いと思います。しかし、これらのアラートを集計し、動向や傾向を把握したのちに、改善に役立てているチームはそれほど多くはないのではないでしょうか。

その改善を支援するために、アラートをざっくりと集計するGitHub Actionsを作成しました。

https://github.com/marketplace/actions/aggregate-alerts

2024年8月時点では以下のサービスからのアラートを集計できます。

  • Datadog
  • Sentry
  • PagerDuty
  • AWS Chatbot
  • digdag-alert

事前準備

Slack Appを作成し、適切な権限を設定する必要があります。

  1. Slack Appを作成し、パブリックチャンネルの場合はchannels:history、プライベートチャンネルの場合はgroups:historyの権限を付与します。
  2. 集計結果をSlackに送信したい場合は、chat:writeの権限も追加してください。
  3. 作成したSlack Appをアラートが流れているチャンネルに招待します。
  4. 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の確認方法はこちらの記事が参考になると思います。

sinceuntilを指定しない場合は、実行日の前日から1週間前までのアラートを集計します。タイムゾーンは実行時のサーバーに依存しているため、日本時間に設定したい場合はこちらの例のようにenv.TZ: 'Asia/Tokyo'を指定してください。

以下のアラートを集計した結果はこんな感じで表示されます。

SEND_CHANNEL_IDに送信先のチャンネルIDを指定すれば、集計結果をSlackに送信することもできます。

今後の展望

まだ、いくつかの改善点があるためv0として公開していますが、テストを充実させ、チャンネル名を表示できるようになったらv1に更新する予定です。

需要があれば送信用のSlack Appを別で指定できるようにしたり、集計結果をoutputsとして出力できるようにしたり、日本語で表示できるようにしていきたいです。

おわりに

このActionsが、皆さんの改善活動に少しでも貢献できれば幸いです!

GitHubで編集を提案

Discussion