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

CDK 一発で全てのエラーログを Slack に流す

acomagu
May 20, 2023
2k

CDK 一発で全てのエラーログを Slack に流す

acomagu

May 20, 2023
Tweet

Transcript

  1. Agenda - やりたいこと
 - 背景
 - 検討した方法
 - Lambda error

    metric → CloudWatch Alarm → Chatbot 
 - CloudWatch Metrics Filter → CloudWatch Alarm → Chatbot 
 - Datadog
 - Sentry
 - 自作→公開
 - その後
 - まとめ

  2. 背景 - 副業先でエラーログを全て Slack に流していて、とても体験が良かった
 - 本番環境/開発環境でのエラーにいち早く気づける 
 - 担当エンジニア以外も簡単にアクセスできる/

    障害発生時のコミュニケーションに便利 
 - 開発中もフロントエンドエンジニアさんがサーバーのエラーを見れると便利 
 - 年1件ほど新規プロジェクトの立ち上げに関わる(受託開発のため)
 - 複数プロジェクトの監視を続けていく必要がある→ エラーが出たら何らかの通知が欲しい 
 - 毎回監視をポチポチ作るのは大変なため、できる限り IaC 化しておきたい 
 - 使っている AWS サービスは様々
 - AppRunner, Lambda, Step Functions, Elastic Beanstalk, API Gateway 
 - 可能な限り「全て」のサービスのエラーログを読みたい 
 → アプリケーション内に通知の仕組みを作るのではなく、 CloudWatch Logs 経由 で通知する仕組 みが必要

  3. 改めてやりたいこと - エラーログを全て Slack に流す
 - できれば StepFunctions や AppSync

    等、いろいろな AWS サービスのエラーログを 集約したい
 - CDK でセットアップの大部分が終わるようにしたい

  4. 検討した方法① Lambda error metric → CloudWatch Alarm → Chatbot Lambda

    エラーメトリクスが1件で発火する Alarm を作成して、Chatbot に連携する方 法
 - “Show logs” のボタンを押すことでロ グを表示できる
 - グラフが表示される
 - datapoint ごとにしか通知されない(最 小10秒)
 - Lambda にしか使えない
 - Lambda がエラー状態で終了した場合 しかカウントされない(console.error が 通知されない)

  5. - Lambda Error Metrics はエラーログを見ているのではなく、Lambda Runtime API に 通知されたエラーの数を見ている
 -

    (尚、CloudWatch Logs にはそもそもログレベルの概念が無いので、標準出力も標 準エラー出力も同等に扱われるイメージ)
 console.error が通知されない?
  6. 検討した方法② CloudWatch Metrics Filter → CloudWatch Alarm → Chatbot 文字列

    “ERROR” が含まれているログを 検知する Metrics Filter を作成して、エラー ログが1件で発火する Alarm を作成し、 Chatbot に連携する方法
 - Lambda 以外でも使える
 - ログを表示できない(Slack 上でも見れ ないし、リンクも無い)
 - グラフが表示される
 - datapoint ごとにしか通知されない

  7. 検討した方法③ Datadog SDK もしくは CloudWatch 経由で Datadog にログを送信する
 - Lambda

    以外でも使える
 - Slack に全てのログを送信する方法は 無く、こちらもアラートのみ
 - ログの内容が Slack で見れる
 - Monitor Window ごとにしか通知され ない(最小1分)

  8. 検討した方法④ Sentry SDK 経由で Sentry にログを送信する
 - Step Functions 等のエラーは補足でき

    ない
 - Slack に全てのエラーログを送信でき る
 - ログへのリンクも(一応)通知に含めら れる
 - ただしアプリケーション側で URL をタグとし て注入しておくというトリッキーな方法 
 - URL を 200 字に収めなければならない 

  9. 何が言いたいか 一度書いた CDK のコードを
 「リファクタリングする → ライブラリとして切り出す → 公開する」
 この一連の流れが言語の知識さえあればできる(手癖でできる)


    追加で学ばなければならない CDK の知識はほとんどない!
 なぜか?
 ひとつは Stack と L3 Construct がほぼ同じものだから
 Stack を書く感覚で L3 Construct も書けてしまう
 ↑CDK is Beautiful ポイント

  10. まとめ - エラーログを Slack に流す機構を CDK で構築した
 - ライブラリ化によって、あらゆるプロジェクトで CDK

    コードに数行追加するだけでエ ラーログを Slack に流せるようになった
 - CDK の美しさのひとつは、Stack、L3 Construct、L2 Construct の違いがほとんど 無いこと
 それによって CDK Construct ライブラリを作成するハードルがとても低い