概要
-
FluentBit
からCloudWatch Logs
に送信される情報が非常に見づらいです - 上記を、
Logs Insights
でLogStream
単位のフィルタリングを行うことにより解決します
前置き
記事にするほどのことではない気もしますが、社内で実際に困っている人がいたので記事化しておきます
誰かの参考になれば嬉しいです
想定ケース
本記事は、以下のようなケースを想定しています
- ECS on Fargateにおいて、FluentBitを利用してログを送信
- 送信先としてCloudWatch Logsを指定
問題のシナリオ
以下のようなシナリオにおいて注意が必要です
-
ECS on Fargate
のデプロイにおいてトラブルが発生 - タスク起動後、例外が発生してタスクがキルされ続けている
- 上記を調査するために、タスクに紐づく
LogStream
上のログをCloudWatch
上で参照したい
何が問題なのか?
-
FluentBit
のログはJSON形式で構造化されています -
CloudWatch Logs
でこれを閲覧する場合、デフォルトで各行のトグルが閉じられています - 本来閲覧したいログそのものの情報を参照するには、時系列順にトグルを開いて
log
の項目を参照する必要があります - 全行を一度に展開することも可能ですが、時系列でログ出力を観察したい場合には、ログ以外の付帯情報がノイズになってしまいます
- これは、ローカルのターミナル等でログを見る場合に比較して、一覧性に欠けます
解決方法
これを解決するために、CloudtWatch Logs Insights
を活用します
具体的には以下のクエリにより、LogStream
でフィルタリングし、参照したいlog項目のみを時系列順に出力します
fields @timestamp, log
| filter @logStream = "your_log_stream_id"
| sort @timestamp
こうすることで、時系列で本来見たいログ情報のみを一覧で見ることができ、ローカルに近い開発体験が得られ、調査が捗ります
注意
クエリ発行にはコストがかかるのでご注意ください
# 2024/09/23現在
分析 (Logs Insights のクエリ) USD 0.005/スキャンされたデータの GB