ECS Fargate で Windows コンテナを実行した場合にログが記録されないときの対処方法

2022.03.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Fargate が Windows コンテナをサポートしたので、IIS のようこそ画面を表示する簡単なコンテナを構築しました。タスクのIPアドレスにアクセスすると、ようこそ画面は表示されたのですが、CloudWatch Logs にログが記録されていません。
タスク定義でawslogsを設定しているのですが、なぜログは記録されないのでしょうか?

どう対応すればいいの?

ログの出力方法を確認してください。

awslogs ログドライバーは標準出力・標準エラー出力の内容を CloudWatch Logs に転送しますが、IIS などの Windows アプリケーションの多くは Windows イベントログやログファイルにログを記録します。

awslogs ログドライバーを使用する - Amazon Elastic Container Service

デフォルトでは、キャプチャされるログは、コンテナをローカルに実行した場合にインタラクティブターミナルに表示されるコマンド出力 (STDOUT および STDERR I/O ストリーム) を示します。awslogs ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。

そのため、ログの出力方法を確認して、awslogs ログドライバーがログを収集できるように出力方法の変更をご検討ください。

Windows ログを標準出力に出力する方法

ひとつの手段として、Microsoftがオープンソースとして公開している「Microsoft Log Monitor」があります。

Microsoft Log Monitor は、ETW、イベントログ、カスタムログファイルを標準出力に転送するツールで、Windows、Server Core、Nanoイメージがサポートされています。

Windows Containers Log Monitor Opensource Release - Microsoft Tech Communityより引用

出力例

# イベントログ
<Source>EventLog</Source><Time>2022-01-01T01:02:03.000Z</Time><LogEntry><Channel>System</Channel><Level>Information</Level><EventId>7036</EventId><Message>The Windows Insider Service service entered the running state.</Message></LogEntry>

# カスタムログファイル
2022-01-01 01:02:03 10.0.1.2 GET / - 80 - 203.0.113.100 Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_15_7)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/98.0.4758.102+Safari/537.36 - 200 0 0 631

参考資料