Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

コンテナインスタンスでの CloudWatch Logs の使用

ログ情報を CloudWatch Logs に送信するように、コンテナインスタンスを設定できます。これにより、1 つの便利な場所でコンテナインスタンスからのさまざまなログを表示できます。このトピックは、Amazon ECS-optimized Amazon Linux AMI で起動されたコンテナインスタンスでの CloudWatch Logs の使用開始に役立ちます。

タスクのコンテナログを CloudWatch Logs に送信に関する詳細については、「awslogs ログドライバーを使用する」を参照してください。CloudWatch Logs の詳細については、Amazon CloudWatch ユーザーガイド の「ログファイルのモニタリング」を参照してください。

CloudWatch Logs IAM ポリシー

コンテナインスタンスが CloudWatch Logs にログデータを送信する前に、コンテナインスタンスに CloudWatch Logs API の使用を許可する IAM ポリシーを作成し、そのポリシーを ecsInstanceRole にアタッチする必要があります。

ECS-CloudWatchLogs IAM ポリシーを作成するには

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [ポリシーの作成]、[JSON] を選択します。

  4. 以下のポリシーを入力します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] }
  5. [ポリシーの確認] を選択します。

  6. [ポリシーの確認] ページで、[名前] に ECS-CloudWatchLogs を入力し、[ポリシーの作成] を選択します。

ECS-CloudWatchLogs ポリシーを ecsInstanceRole にアタッチするには

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. ecsInstanceRole を選択します。ロールが存在しない場合は、「Amazon ECS コンテナインスタンス IAM ロール」の手順に従ってロールを作成します。

  4. [アクセス許可]、[ポリシーのアタッチ] を選択します。

  5. アタッチする使用可能なポリシーを絞り込むために、[フィルター] に「ECS-CloudWatchLogs」と入力します。

  6. [ECS-CloudWatchLogs] ポリシーの左側にあるチェックボックスをオンにし、[ポリシーのアタッチ] を選択します。

CloudWatch Logs エージェントのインストール

ecsInstanceRoleECS-CloudWatchLogs ポリシーを追加した後、コンテナインスタンスに CloudWatch Logs エージェントをインストールできます。

注記

この手順は、Amazon ECS-optimized Amazon Linux AMI 用に書かれたもので、他のオペレーティングシステムには使用できない場合があります。他のオペレーティングシステムへのエージェントのインストールについては、Amazon CloudWatch ユーザーガイド の「CloudWatch Logs の開始方法」を参照してください。

CloudWatch Logs エージェントをインストールするには

  • 以下のコマンドを実行して、CloudWatch Logs エージェントをインストールします。

    [ec2-user ~]$ sudo yum install -y awslogs

エージェントをインストールしたら、以下のセクションに進んでエージェントを設定します。

CloudWatch Logs エージェントの設定と開始

CloudWatch Logs エージェント設定ファイル (/etc/awslogs/awslogs.conf) では、CloudWatch Logs に送信するログファイルが定義されています。エージェント設定ファイルの [general] セクションでは、すべてのログストリームに適用される共通設定を定義し、モニタリングするコンテナインスタンスのファイルごとに個別のログストリームセクションを追加できます。詳細については、Amazon CloudWatch ユーザーガイド の「CloudWatch Logs エージェントリファレンス」を参照してください。

以下の例の設定ファイルでは、Amazon ECS-optimized Amazon Linux AMI 用に設定されており、共通のログファイルのログストリームを指定しています。

/var/log/dmesg

Linux カーネルのメッセージバッファ。

/var/log/messages

グローバルシステムメッセージ。

/var/log/docker

Docker デーモンからのログメッセージ。

/var/log/ecs/ecs-init.log

ecs-init upstart ジョブからのログメッセージ。

/var/log/ecs/ecs-agent.log

Amazon ECS コンテナエージェントからのログメッセージ。

/var/log/ecs/audit.log

タスク認証情報プロバイダーの IAM ロールからのログメッセージ。

以下の例のファイルを Amazon ECS コンテナインスタンスに使用できますが、{cluster} エントリと {container_instance_id} エントリをクラスターの名前と各コンテナインスタンスの ID に置き換えて、ログストリームをクラスター名でグループ化し、個々のコンテナインスタンスによって識別する必要があります。以下の設定ファイルの例で、クラスター名とコンテナインスタンス ID のプレースホルダーを置き換える手順があります。

[general] state_file = /var/lib/awslogs/agent-state [/var/log/dmesg] file = /var/log/dmesg log_group_name = /var/log/dmesg log_stream_name = {cluster}/{container_instance_id} [/var/log/messages] file = /var/log/messages log_group_name = /var/log/messages log_stream_name = {cluster}/{container_instance_id} datetime_format = %b %d %H:%M:%S [/var/log/docker] file = /var/log/docker log_group_name = /var/log/docker log_stream_name = {cluster}/{container_instance_id} datetime_format = %Y-%m-%dT%H:%M:%S.%f [/var/log/ecs/ecs-init.log] file = /var/log/ecs/ecs-init.log log_group_name = /var/log/ecs/ecs-init.log log_stream_name = {cluster}/{container_instance_id} datetime_format = %Y-%m-%dT%H:%M:%SZ [/var/log/ecs/ecs-agent.log] file = /var/log/ecs/ecs-agent.log.* log_group_name = /var/log/ecs/ecs-agent.log log_stream_name = {cluster}/{container_instance_id} datetime_format = %Y-%m-%dT%H:%M:%SZ [/var/log/ecs/audit.log] file = /var/log/ecs/audit.log.* log_group_name = /var/log/ecs/audit.log log_stream_name = {cluster}/{container_instance_id} datetime_format = %Y-%m-%dT%H:%M:%SZ

CloudWatch Logs エージェントを設定するには

  1. 既存の CloudWatch Logs エージェント設定ファイルをバックアップします。

    [ec2-user ~]$ sudo mv /etc/awslogs/awslogs.conf /etc/awslogs/awslogs.conf.bak
  2. 空の設定ファイルを作成します。

    [ec2-user ~]$ sudo touch /etc/awslogs/awslogs.conf
  3. テキストエディタで /etc/awslogs/awslogs.conf ファイルを開き、上記の例のファイルをコピーします。

  4. jq JSON クエリユーティリティをインストールします。

    [ec2-user ~]$ sudo yum install -y jq
  5. Amazon ECS イントロスペクション API を照会してクラスター名を見つけ、環境変数に設定します。

    [ec2-user ~]$ cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster')
  6. ファイル内の {cluster} プレースホルダーを、前の手順で設定した環境変数の値に置き換えます。

    [ec2-user ~]$ sudo sed -i -e "s/{cluster}/$cluster/g" /etc/awslogs/awslogs.conf
  7. Amazon ECS イントロスペクション API オペレーションをクエリしてコンテナインスタンス ID を見つけ、環境変数に設定します。

    [ec2-user ~]$ container_instance_id=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $2}' )
  8. ファイル内の {container_instance_id} プレースホルダーを、前の手順で設定した環境変数の値に置き換えます。

    [ec2-user ~]$ sudo sed -i -e "s/{container_instance_id}/$container_instance_id/g" /etc/awslogs/awslogs.conf

CloudWatch Logs エージェントのリージョンを設定するには

デフォルトでは、CloudWatch Logs エージェントは us-east-1 リージョンにデータを送信します。クラスターが存在するリージョンなど、別のリージョンにデータを送信するには、/etc/awslogs/awscli.conf ファイルでリージョンを設定できます。

  1. テキストエディタで /etc/awslogs/awscli.conf ファイルを開きます。

  2. [default] セクションで、us-east-1 を、ログデータを表示するリージョンに置き換えます。

  3. ファイルを保存し、テキストエディタを終了します。

CloudWatch Logs エージェントを開始するには

  1. 以下のコマンドを使用して CloudWatch Logs エージェントを開始します。

    • Amazon Linux

      [ec2-user ~]$ sudo service awslogs start
    • Amazon Linux 2

      [ec2-user ~]$ sudo systemctl start awslogsd
  2. chkconfig コマンドを使用して、システム起動時に CloudWatch Logs エージェントが開始されるようにします。

    • Amazon Linux

      [ec2-user ~]$ sudo chkconfig awslogs on
    • Amazon Linux 2

      [ec2-user ~]$ sudo systemctl enable awslogsd.service

CloudWatch Logs の表示

CloudWatch Logs にログを送信するための適切なアクセス権限をコンテナインスタンスロールに付与し、エージェントを設定して開始した後、コンテナインスタンスからそのログデータが CloudWatch Logs に送信されるようになります。これらのログは AWS マネジメントコンソール で表示および検索できます。

注記

新しいインスタンスの起動では、CloudWatch Logs へのデータの送信に数分かかることがあります。

CloudWatch Logs のデータを表示するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. 左のナビゲーションペインで [Logs] を選択します。

    CloudWatch Logs エージェントの設定と開始」で設定したロググループが表示されます。

    
                        CloudWatch コンソールのメトリクスビュー
  3. 表示するロググループを選択します。

  4. 表示するログストリームを選択します。ストリームは、ログの送信元のクラスター名とコンテナインスタンス ID によって識別されます。

    
                        CloudWatch コンソールのメトリクスビュー