Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アラート疲れからの脱却 - リソースタグで仕分けるSlack通知戦略 / Breaking F...

アラート疲れからの脱却 - リソースタグで仕分けるSlack通知戦略 / Breaking Free from Alert Fatigue – A Slack Notification Strategy Using Resource Tags for Routing

More Decks by コドモン開発チーム

Transcript

  1. 5 CONFIDENTIAL - © 2022 CoDMON Inc. 5 はじめに:今日話すこと •

    Amazon EventBridge で検知できる異常イベントを、担当チーム毎 にSlackでアラート通知できるようにした話
  2. 7 CONFIDENTIAL - © 2022 CoDMON Inc. 7 Amazon EventBridge

    を用いた異常検知 • EventBridge Rule を定義することにより、様々なイベントを捕捉して、次 のアクションを実行することができる • リソース異常検知・通知に用いることが可能
  3. 8 CONFIDENTIAL - © 2022 CoDMON Inc. 8 現状のアラート通知機構 •

    ECSタスクの異常終了検知に利用 • タスクの状態変更を検知して、Lambda関数を実行し、共通のSlackチャンネ ルに「@here」メンションで通知するシンプルな構成 { "source": ["aws.ecs"], "detail-type": ["ECS Task State Change"], "detail": { "containers": { "exitCode": [1, 137, 139, 255] }, "lastStatus": ["STOPPED"], "stoppedReason": ["Essential container in task exited"] } }
  4. 9 CONFIDENTIAL - © 2022 CoDMON Inc. 9 現状の課題 •

    運用当初はこの構成で問題なかったが、ECS Clusterの数が増えていくにつ れて、アラート通知の数が増加 • 自チームに関係のないECSタスク異常停止についても「@here」メンション で通知されるので、次第に「アラート疲れ」の状態に陥っていき、通知がス ルーされることも増えた
  5. 10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 現状の課題 •

    運用当初はこの構成で問題なかったが、ECS Clusterの数が増えていくにつ れて、アラート通知の数が増加 • 自チームに関係のないECSタスク異常停止についても「@here」メンション で通知されるので、次第に「アラート疲れ」の状態に陥っていき、通知がス ルーされることも増えた 「@here」メンションを脱却し、 通知先をチーム毎に仕分ける施策を実施
  6. 12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 実装方針 •

    単純な方法だと、Slack通知部分を担うLambda関数内で愚直に条件分岐を書 いていけばできそうだが、メンテナンスが辛そう...
  7. 13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 実装方針 •

    「通知先の情報」「通知内容」が変更入りやすい部分なので、共通基盤から 切り出したい • 以下の方法でうまくできそう! ◦ 通知対象のECSタスクに、担当チーム名 を表すリソースタグを付与 ◦ そのタグ情報に従って、外部機構にてSlack通知を行う
  8. 16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 実装詳細 ①ECSタスク定

    義に「Owner」 タグを付与 ②タスク異常終了 をEventBridgeが 検知
  9. 17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 実装詳細 ①ECSタスク定

    義に「Owner」 タグを付与 ②タスク異常終了 をEventBridgeが 検知 ③StepFunctions内で、タス クARNからdescribeTasks実 行して「Owner」タグ値を取 得
  10. 18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 実装詳細 ①ECSタスク定

    義に「Owner」 タグを付与 ②タスク異常終了 をEventBridgeが 検知 ③StepFunctions内で、タス クARNからdescribeTasks実 行して「Owner」タグ値を取 得 ④「Owner」タグ情報, その他タスク情報を添 えて、DataDog Event に送信
  11. 19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 実装詳細 ①ECSタスク定

    義に「Owner」 タグを付与 ②タスク異常終了 をEventBridgeが 検知 ③StepFunctions内で、タス クARNからdescribeTasks実 行して「Owner」タグ値を取 得 ④「Owner」タグ情報, その他タスク情報を添 えて、DataDog Event に送信 ⑤「Owner」タグ値毎に DataDog Monitor Alertを作成 し、担当チーム毎の通知を実現
  12. 20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 実装ポイント①:StepFunctions •

    EventBridge → DataDogに直接イベント送信する方式だと、ECSタスク状 態変更イベントにはタグ情報が含まれないため、タグ値を連携できない • そこで、間にStepFunctionsを入れて、DescribeTasksを実行し、 リソース タグ値を取得している
  13. 21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 実装ポイント②:DataDogとの連携 •

    https://event-management-intake.datadoghq.com/api/v2/events に Postして、DataDog Eventを送信可能 ◦ リソースタグ情報・AWSアカウントID・クラスター名 等を付与 • DataDog Monitor Alertで、リソースタグ値で条件指定することで、タグの 値毎に異なる通知(メンション・通知先)を実現可能
  14. 22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 実装ポイント③:「Owner」タグ指定がない場合 •

    新規作成された場合や、担当チーム不在等で、担当チームを示すタグがECS タスク定義に付与されていない場合 • StepFunctions内で連携するタグ値に「none」を設定してDataDog Event に送信 & DataDog Monitor Alertに流すことで、通知漏れを回避
  15. 24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 実施結果 •

    ECSタスク定義に専用のリソースタグを設定するだけで、担当チーム毎のメ ンション・通知先でのアラート通知を実現 • ノイズが減ったことにより、自チームのアラート対応に集中できるようにな り、「アラート疲れ」状態を解消できた
  16. 25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 実施結果 •

    リソースタグが設定されていない場合は、共通チャンネル & メンションなし で通知させている • ↑をSREチームで検知後、担当チームにタグ設定を依頼するフローにしている • ある程度運用が固まってきたら、ECSタスク新設時はタグ付与ポリシー等で タグ設定を強制すると良さそう
  17. 27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 まとめ •

    リソースタグ × DataDog Monitor Alert を組み合わせることで、セルフ サービス性を保ちつつ、Slack通知先の分割を実現することができる • 今回はECSタスク異常停止を例に紹介したが、他リソースにも横展開可能 ◦ 例)ECRレポジトリにレポジトリタグを付与した上で、Insepctorによる脆弱性検 知をEventBridgeで拾い、レポジトリタグに従った通知先にアラート通知する