Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

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

Avatar for acomagu acomagu
May 20, 2023
2.2k

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

Avatar for acomagu

acomagu

May 20, 2023
Tweet

More Decks by acomagu

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 ライブラリを作成するハードルがとても低い