発生した問題
ECS上のSpringアプリのログ監視を導入した際に、CloudWatch Logsに出力されているスタックトレース内のキーワードも対象に抽出されるため、ログレベルで正しく監視できなかった。
対策方針
アプリでの例外ハンドリングにおいて、エラーログとスタックトレースをセットで出力していたので、これを1つのログとしてまとめる
対策前後のログイメージ
対策前:スタックトレースが1行単位でログが出力されている
timestamp | message |
---|---|
2025-01-07T11:10:52.550+09:00 | 2025-01-07 11:10:52.550 INFO XXXXXXX Hoge |
2025-01-07T11:10:52.551+09:00 | 2025-01-07 11:10:52.551 ERROR XXXXXXX Hogehoge |
2025-01-07T11:10:52.551+09:00 | java.lang.HogeException: xxx ERROR xxx... |
2025-01-07T11:10:52.551+09:00 | at com.example.StackTraceTest.... |
2025-01-07T11:10:52.551+09:00 | at com.example.StackTraceTest.... |
2025-01-07T11:10:52.551+09:00 | at com.example.StackTraceTest.... |
2025-01-07T11:10:52.551+09:00 | at com.example.StackTraceTest.... |
2025-01-07T11:10:52.551+09:00 | ... 3 more |
対策後:スタックトレースがエラーログとセットで出力されている
timestamp | message |
---|---|
2025-01-07T11:10:52.550+09:00 | 2025-01-07 11:10:52.550 INFO XXXXXXX Hoge |
2025-01-07T11:10:52.551+09:00 | 2025-01-07 11:10:52.551 ERROR XXXXXXX Hogehoge java.lang.HogeException: xxx ERROR xxx... at com.example.StackTraceTest.... at com.example.StackTraceTest.... at com.example.StackTraceTest.... at com.example.StackTraceTest.... ... 3 more |
対策内容
ECSのタスク定義のログ収集の設定でawslogs-multiline-pattern
の項目を追加します。
項目値には、1行となるログを識別するための表現を指定します。
以下の例だとPrefixが日付になっていた場合を表します(2025-01-07 11:10:52.550
がヒット)
ログのフォーマットを調整している場合は、ここをプロジェクトに合った内容に置き換える必要があります。
参考サイト