ECSコンソールからコンテナのログをCloudWatch Logsにコンテナ単位で配信する方法を教えてください

ECSでコンテナのログをコンテナごとにロググループに振り分けてCloudWatch Logsに配信する際に、コンソール画面から設定する方法をご紹介します。
2023.08.04

困っていた内容

ECSコンソール上で、「新しいタスク定義の作成」にて2つ以上のコンテナを作成しましたが、コンテナのログが1つのロググループに配信されてしまいます。

ログ出力をコンテナごとに振り分けてCloudWatch Logsに配信したいのですが、コンソールから設定ができません。

どう対応すればいいの?

コンテナのログ情報を CloudWatch Logs に送信するには、logConfiguration パラメータを設定する必要があります。

コンソール上で、「新しいタスク定義の作成」にて2つ以上のコンテナを作成した場合、ログ配信先は1つしか設定できないため、 どのコンテナにも同じlogConfiguration パラメータが設定されてしまいます。

そのため、タスク定義のJSONを修正する必要があります。

手順

[1] 事前にCloudWatchにて、配信先のロググループを作成しておきます。

[2] 「ECS」→「タスク定義」→「新しいリビジョンの作成」→「JSON で新しいリビジョンを作成」 を選択します。

[3] 以下のようなlogConfigurationパラメーターがコンテナごとに設定されているので、各値を「手順1」で作成したロググループに変更します。

     "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/test",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "ecs"
                }
            }

[4] 新規作成されたリビジョンをタスクに設定します。

結果

ログがコンテナごとに別々のロググループに配信されていることが、CloudWatchで確認できました。

参考資料

コンソールを使用したタスク定義の更新 - Amazon Elastic Container Service

awslogs ログドライバーの使用 - Amazon Elastic Container Service

ECS コンテナログが CloudWatch Logs に配信されない原因のトラブルシューティング | AWS re:Post