Amazon ECS コンテナログが Amazon CloudWatch Logs に配信されないのはなぜですか?

最終更新日時: 2022 年 3 月 9 日

Amazon Elastic Container Service (Amazon ECS) タスクのコンテナログが Amazon CloudWatch Logs で見つかりません。

簡単な説明

Amazon ECS コンテナログが CloudWatch Logs に配信されない原因として、次の 1 つまたは複数が考えられます。

  • Amazon ECS タスク定義で、awslogs ログドライバーが正しく設定されていない。
  • AWS Identity and Access Management (IAM) ロールに必要なアクセス許可がない。
  • ネットワーク設定に問題がある。
  • コンテナのログレベルが正しく設定されていない。

解決方法

awslogs ログドライバーが正しく設定されていない

  • コンテナのログ情報を CloudWatch Logs に送信するには、タスク内のコンテナを正しく設定する必要があります。コンテナのパラメータを定義する際には、logConfiguration パラメータが正しく設定されていることを確認してください。Amazon ECS タスク定義に複数のコンテナが含まれる場合は、コンテナごとにこのパラメータを設定する必要があります。
  • awslogs ログドライバーをタスク定義の logConfiguration パラメータに追加したことを確認してください。
  • Amazon Elastic Compute Cloud (Amazon EC2) 起動タイプの場合は、次の追加チェックを行います。
    • Amazon ECS コンテナインスタンスに、バージョン 1.9.0 以降のコンテナエージェントが含まれていることを確認します。エージェントのバージョンを確認し、最新バージョンに更新する方法については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。
    • コンテナインスタンスに Amazon ECS に最適化された AMI を使用していない場合は、次の環境変数を使用してエージェントを起動する際に、awslogs ログドライバーがコンテナインスタンスで指定されていることを確認します。詳細については、「Amazon ECS コンテナエージェントをインストールする」を参照してください。
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

IAM ロールに必要なアクセス許可がない

  • Amazon ECS コンテナインスタンスの IAM ロールに、logs:CreateLogStream および logs:PutLogEvents のアクセス許可があることを確認してください。
  • Fargate 起動タイプの場合は、logs:CreateLogStream および logs:PutLogEvents のアクセス許可を持つ Amazon ECS タスク実行 IAM ロールを使用します。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。
  • Amazon EC2 起動タイプの場合は、以下を確認します。
    • タスク定義で Amazon ECS タスク実行 IAM ロールを使用していない場合は、コンテナインスタンスが使用する IAM ロールlogs:CreateLogStream および logs:PutLogEvents のアクセス許可が付与されていることを確認してください。
    • Amazon ECS タスク実行 IAM ロールを使用している場合は、コンテナエージェントパラメータ「ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE」の値が「true」に設定されていることを確認してください。
      注: ecs-init パッケージのバージョン 1.16.0 -1 以降で Amazon ECS に最適化された AMI を使用する場合、このパラメータのデフォルト値は「true」です。Windows では、このパラメータのデフォルト値は「false」です。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

ネットワーク設定に問題がある

Amazon Virtual Private Cloud (Amazon VPC) にインターネットゲートウェイがなく、タスクで awslogs ログドライバーを使用してログ情報を CloudWatch Logs に送信する場合は、CloudWatch Logs 用のインターフェイス Amazon VPC エンドポイントを作成していることを確認してください。詳細については、「インターフェイス VPC エンドポイントでの CloudWatch Logs の使用」を参照してください。

コンテナのログレベルが正しく設定されていない

awslogs ログドライバーは、Docker から CloudWatch Logs に STDOUT および STDERR I/O ストリームであるコンテナログを渡すだけです。そのため、アプリケーションが STDOUT および STDERR I/O ストリームにログを送信していることを確認してください。コンテナの構築時に、アプリケーションのログレベルを正しく設定するようにしてください。お使いのアプリケーションによっては、環境変数あるいは設定ファイルでログレベルを設定する場合があります。