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

WebアプリでもインフラでもAIエージェントでも大事なのはログ!

Avatar for くらっち くらっち
October 29, 2026
150

 WebアプリでもインフラでもAIエージェントでも大事なのはログ!

JAWS-UG初心者支部 #93 Short Session大会

Avatar for くらっち

くらっち

October 29, 2026

More Decks by くらっち

Transcript

  1. 自己紹介 普段の業務 趣味 Railsアプリのエンジニア スポーツ QAエンジニア 野球, ソフトボール AIエンジニア マラソン

    インフラはちょっと! ビーチラグビー スキー, スノボ 好きなAWSサービス くらっち @kuracchi_enj 23卒の25歳 JAWS-UG 東京支部 運営メンバー 好きなRubyライブラリ Bedrock AgentCore ActiveRecord Lambda ruby-sdk CDK(OSSだけど!)
  2. 調査に使えるログ例! 21:03:10 INFO request_id=abc step=stock_check result=success 21:03:10 INFO request_id=abc step=payment

    result=started 21:03:15 ERROR request_id=abc step=payment error=timeout ERRORレベルのログにtimeoutって書いてある! stepがpaymentだから決済処理で落ちたんだな! ってことは 「決済処理でタイムアウトになったんだな!」
  3. ざっくりで失礼! 先ほどのシステムが以下の構成だったとします API Gatewayには 「アクセスログ」が溜まっているはず! 注文ボタンを クリック ① リクエストが API

    Gatewayへ ② Lambdaを発火 ③ 在庫確認 ⑥ レスポンス ⑤ 注文を保存 ④ 決済実行 Lambdaには 「実行環境」「在庫確認処理」「決済処理」「注文保存処理」のログが溜まっているはず! オレンジ・・・インフラ側のログ ブルー・・・・アプリ側のログ
  4. これらのログは、CloudWatch Logsへ! ざっくりで失礼! CloudWatch Logs アクセスログ 注文ボタンを クリック ① リクエストが

    API Gatewayへ ② Lambdaを発火 ③ 在庫確認 ⑥ レスポンス ⑤ 注文を保存 ④ 決済実行 「実行環境」「在庫確認処理」 「決済処理」「注文保存処理」 のログ CloudWatch Logs
  5. インフラ側のログ設計のコツ アクセスログ 注文ボタンを クリック ① リクエストが API Gatewayへ ② Lambdaを発火

    ③ 在庫確認 ⑥ レスポンス ⑤ 注文を保存 ④ 決済実行 例えば、 API Gatewayのアクセスログ Lambda Event Functionsの 実行環境ログ 実行環境ログ 以下を押さえておきましょう! インフラのどこで何が発生しているのか、わかるようにする! インフラのログからアプリのログ調査に繋げられるようにする! デフォルトでAWSが用意したログが出力されるようになってたりしますが、 有効化や記録項目の設定を考える必要があります!
  6. アプリ側のログ設計のコツ アクセスログ 注文ボタンを クリック ① リクエストが API Gatewayへ ② Lambdaを発火

    ③ 在庫確認 ⑥ レスポンス ⑤ 注文を保存 ④ 決済実行 ここでは Lambda関数内で動いている アプリのログを指します 実行環境ログ 以下を押さえておきましょう! タイミング, 結果, 理由, 一連の処理を把握できるようにする! 「エラーが起きた」だけでなく、 「どの処理で、何が起きたか」を残すようにしましょう!
  7. 例えば 参考までに、以下のようにログレベルを定義します。 FATAL, CRITICAL アプリ全体の継続に関わる重大な障害が発生している状態 例)アプリにアクセスできない ERROR ある処理が失敗した状態 例)注文を完了できない WARN,

    WARNING 処理は続けられるが、注意が必要な状態 例)再試行したら注文できた INFO 通常の運用だが、動作を把握したいイベント 例)DBへの保存リクエスト DEBUG, TRACE 詳しく調査するときに必要な情報 例)開発環境デバッグ用
  8. FATALやERRORには、エラーコードも定義! INFO 「200系」「300系」の HTTPステータスが一般的 FATAL/ERROR 「400 系」「500系」のHTTPステータスが一般的 よく使われるエラーコードは、 「E」+「HTTPステータス」+「エラーを表す番号」 例えば、

    ログを見た時にわかるように 自分で決める E400001・・・必須のカラムが未指定です E404001・・・指定したIDのデータがない E500002・・・INSERT手前で想定外のエラー