

# Amazon ECS ログを CloudWatch に送信する
<a name="using_awslogs"></a>

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

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

your Amazon ECS コンテナインスタンスから CloudWatch Logs にシステムログを送信するには、「*Amazon CloudWatch Logs ユーザーガイド*」の「[ログファイルをモニタリングする」](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)と「[CloudWatch Logs クォータ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)」を参照してください。

## Fargate
<a name="enable_awslogs"></a>

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

Fargate の Windows コンテナでは、タスク定義パラメータに `& \ < > ^ |` などの特殊文字が含まれている場合は、次のいずれかのオプションを実行します。
+ パラメータ文字列全体を二重引用符で囲んだエスケープ (`\`) を追加する

  例

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

  例

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

## EC2
<a name="ec2-considerations"></a>

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

**注記**  
Amazon ECS に最適化された AMI か、もしくは少なくともバージョン `1.9.0-1` の `ecs-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 ロール](task_execution_IAM_role.md)」を参照してください。コンテナインスタンスでコンテナインスタンス用の管理 IAM ポリシーを使用している場合、通常そのコンテナインスタンスには、適切なアクセス許可が付与されています。コンテナインスタンスのマネージド IAM ポリシーについては、「[Amazon ECS コンテナインスタンスの IAM ロール](instance_IAM_role.md)」を参照してください。

# Amazon ECS タスク定義の例: CloudWatch にログをルーティングする
<a name="specify-log-config"></a>

コンテナがログを CloudWatch に送信する前に、タスク定義でコンテナの `awslogs` ログドライバーを指定する必要があります。ログパラメータの詳細については、「[ストレージとログ記録](task_definition_parameters.md#container_definition_storage)」を参照してください

下にあるタスク定義 JSON には、各コンテナに指定された `logConfiguration` オブジェクトが含まれています。その 1 つは、`awslogs-wordpress` というロググループにログを送信する WordPress コンテナ用です。もう 1 つは、`awslogs-mysql` というロググループにログを送信する MySQL コンテナ用です。どちらのコンテナも `awslogs-example` ログストリームプレフィックスを使用します。

```
{
    "containerDefinitions": [
        {
            "name": "wordpress",
            "links": [
                "mysql"
            ],
            "image": "public.ecr.aws/docker/library/wordpress:latest",
            "essential": true,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80
                }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "awslogs-wordpress",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "awslogs-example"
                }
            },
            "memory": 500,
            "cpu": 10
        },
        {
            "environment": [
                {
                    "name": "MYSQL_ROOT_PASSWORD",
                    "value": "password"
                }
            ],
            "name": "mysql",
            "image": "public.ecr.aws/docker/library/mysql:latest",
            "cpu": 10,
            "memory": 500,
            "essential": true,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "awslogs-mysql",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "awslogs-example",
                    "mode": "non-blocking", 
                    "max-buffer-size": "25m" 
                }
            }
        }
    ],
    "family": "awslogs-example"
}
```

## 次のステップ
<a name="specify-log-config-next-steps"></a>
+ CloudWatch AWS CLI または API を使用してロググループの保持ポリシーを設定できます (オプション)。詳細は「*AWS Command Line Interfaceリファレンス*」の「[put-retention-policy](https://docs.aws.amazon.com/cli/latest/reference/logs/put-retention-policy.html)」を参照してください。
+ `awslogs` ログドライバーを使用するタスク定義をコンテナ定義ログ設定に登録すると、タスク定義を使用してタスクを実行またはサービスを作成し、CloudWatch Logs へのログの送信を開始できます。詳細については、「[Amazon ECS タスクとしてのアプリケーションの実行](standalone-task-create.md)」および「[Amazon ECS のローリング更新デプロイの作成](create-service-console-v2.md)」を参照してください。