Amazon ECS ログを CloudWatch に送信する - Amazon Elastic Container Service

Amazon ECS ログを CloudWatch に送信する

タスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。タスクで Fargate 起動タイプを使用すると、コンテナからログを表示できます。EC2 起動タイプを使用すると、コンテナからの異なるログを 1 か所で便利に表示できます。また、コンテナインスタンスのディスク容量をコンテナログが占有してしまうことも防止できます。

注記

タスクのコンテナによってログ記録される情報のタイプは、ENTRYPOINT コマンドによって大きく異なります。デフォルトでは、キャプチャされるログには、コンテナをローカルに実行した場合に通常はインタラクティブターミナルに表示されるコマンド出力 (STDOUT および STDERR I/O ストリーム) が表示されます。awslogs ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。Docker ログの処理方法 (ファイルデータやストリームをキャプチャする別の方法) の詳細については、Docker ドキュメントのコンテナまたはサービスのログを表示するを参照してください。

your Amazon ECS コンテナインスタンスから CloudWatch Logs にシステムログを送信するには、Amazon CloudWatch Logs ユーザーガイドの「ログファイルをモニタリングする」と「CloudWatch Logs クォータ」を参照してください。

Fargate 起動タイプ

タスクで Fargate 起動タイプを使用する場合、awslogs ログドライバーを有効化するには、必要な logConfiguration パラメータをタスク定義に追加する必要があります。詳細については、「Amazon ECS タスク定義の例: CloudWatch にログをルーティングする」を参照してください。

Fargate の Windows コンテナでは、タスク定義パラメータに & \ < > ^ | などの特殊文字が含まれている場合は、次のいずれかのオプションを実行します。

  • パラメータ文字列全体を二重引用符で囲んだエスケープ (\) を追加する

    "awslogs-multiline-pattern": "\"^[|DEBUG|INFO|WARNING|ERROR\"",
  • 各特殊文字の周囲にエスケープ (^) 文字を追加する

    "awslogs-multiline-pattern": "^^[^|DEBUG^|INFO^|WARNING^|ERROR",

EC2 起動タイプ

タスクで EC2 起動タイプを使用する場合、awslogs ログドライバーをオンにするには、Amazon ECS コンテナインスタンスに、コンテナエージェントのバージョン 1.9.0 以降が必要です。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

注記

Amazon ECS に最適化された AMI か、もしくは少なくともバージョン 1.9.0-1ecs-init パッケージを含むカスタム AMI を使用する必要があります。カスタム AMI を使用する場合、docker run ステートメント内で以下の環境変数を使用するか、または環境変数ファイルを使用することにより、エージェントの起動時に Amazon EC2 インスタンス上で awslogs ロギングドライバーが使用可能となることを指定する必要があります。

ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]

Amazon ECS コンテナインスタンスでは、コンテナインスタンスで起動する IAM ロールに logs:CreateLogStream および logs:PutLogEvents アクセス許可も必要になります。Amazon ECS で awslogs ログドライバーのサポートを有効にする前に Amazon ECS コンテナインスタンスを作成した場合は、このアクセス許可の追加が必要となる場合があります。ecsTaskExecutionRole はタスクに割り当てられた時点で使用され、また、正しいアクセス許可が含まれている必要があります。タスクの実行ロールの詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。コンテナインスタンスでコンテナインスタンス用の管理 IAM ポリシーを使用している場合、通常そのコンテナインスタンスには、適切なアクセス許可が付与されています。コンテナインスタンスのマネージド IAM ポリシーについては、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。