コンテナベースの Web アプリケーションでは標準出力にログを吐かせることになる。例えば ECS + Fargate なら、標準出力が自動的に CloudWatch Logs へと送信されて蓄積されるので、ほぼリアルタイムに確認できるし、後でまとまったデータから統計を取ることもできる。
リアルタイムなログ監視
じゃあどうやって tail -f
してログ見るの?ってなったときは、CloudWatch Logs の場合、AWS Console からだと見にくいので、cw
コマンドみたいな外部ツールで見ると便利。
$ cw tail -f /ecs/my-application
ある期間から特定のログを探したい
一方で、「○月○日 XX時XX分頃にエラーでてアイテムもらえなかったらしいんだけど、調べてくれない?」 みたいな、障害調査だったりサポート対応するときに CloudWatch Logs Insights はすごく便利。
ECS + Fargate の場合、CloudWatch Logs には下記 3 カラムが出力される。
@message
@timestamp
@logStream
正規表現でフィルタリング
アプリケーションで出力しているものは @message
に含まれる。例えばエラーログを探したいなら filter コマンドと正規表現を使う。
fields @timestamp, @message
| filter @message like /(?i)error/
@message
内の文字列に対して、like /文字列/
と記述することで正規表現が使用できる。(?i)
の部分は「埋め込みフラグ表現」と呼ばれるもので、大文字小文字を区別しない指定。
特定のログレベルから探す
ログ出力時に info:
, debug:
, warn:
, error:
, query:
みたいな、特定のワードで始まるなら、以下のような指定ができる。
fields @timestamp, @message
| filter @message like /debug:|query:/
これで debug ログと query ログのみが対象となる。