メニュー
Amazon EC2 Container Service
開発者ガイド (API Version 2014-11-13)

awslogs ログドライバーを使用する

タスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。こうすることで、コンテナからの異なるログを 1 か所で便利に表示できます。また、コンテナログがコンテナインスタンスのディスク容量を占めることも防止できます。このトピックは、タスク定義で awslogs ログドライバーの使用を開始する役に立ちます。

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

コンテナインスタンスで awslogs を有効にする

Amazon ECS コンテナインスタンスは、awslogs ログドライバーを有効にするために、コンテナエージェントの最低でも 1.9.0 バージョンが必要になります。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。

注記

コンテナインスタンスで Amazon ECS 対応 AMI (ecs-init パッケージのバージョンが最低でも 1.9.0-1) を使用していない場合は、docker run ステートメントで以下の環境変数を使用するか、環境変数ファイルを使用して、エージェントの起動時に awslogs ロギングドライバーがコンテナインスタンスで使用できることを指定する必要があります。詳細については、「Amazon ECS コンテナエージェントのインストール」を参照してください。

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

Amazon ECS コンテナインスタンスでは、コンテナインスタンスとともに起動する IAM ロールに logs:CreateLogStream および logs:PutLogEvents アクセス権限も必要です。Amazon ECS で awslogs ログドライバーのサポートを有効にする前に Amazon ECS コンテナインスタンスを作成した場合は、このアクセス権限を追加する必要がある場合があります。コンテナインスタンスでコンテナインスタンス用のマネージド IAM ポリシーを使用している場合は、コンテナインスタンスに正しいアクセス権限があるはずです。Amazon ECS コンテナインスタンスのロールの確認とコンテナインスタンスのマネージド IAM ポリシーのアタッチについては、「IAM コンソールで ecsInstanceRole を確認するには」を参照してください。

ロググループの作成

awslogs ログドライバーは、CloudWatch Logs の既存のロググループにログストリームを送信できますが、ロググループを作成することはできません。awslogs ログドライバーを使用するタスクを起動する前に、コンテナが使用するロググループを作成する必要があります。

たとえば、MySQL コンテナ (awslogs-mysql ロググループを使用) にリンクする WordPress コンテナ (awslogs-wordpress ロググループを使用) で、タスクを作成できます。以下のセクションで、AWS CLI および CloudWatch コンソールを使用してこれらのロググループを作成する方法を説明します。

AWS CLI を使用してロググループを作成する

AWS Command Line Interface (AWS CLI) は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。詳細については、「AWS Command Line Interface ユーザーガイド」を参照してください。

AWS CLI がインストール済みで使用している場合は、それを使用してロググループを作成できます。次のコマンドは、ap-northeast-1 リージョンに awslogs-wordpress というロググループを作成します。作成するロググループごとにこのコマンドを実行します。ロググループ名をお客様の値に、リージョン名を目的のログ宛先に置き換えてください。

Copy
aws logs create-log-group --log-group-name awslogs-wordpress --region ap-northeast-1

CloudWatch コンソールを使用してロググループを作成する

次の手順で、CloudWatch コンソールにロググループを作成します。

CloudWatch コンソールを使用してロググループを作成するには

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

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

  3. [Actions]、[Create log group] の順に選択します。

  4. [Log Group Name] に、作成するロググループの名前を入力します。

  5. [Create log group] を選択して終了します。

使用できる awslogs ログドライバーのオプション

awslogs ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。

注記

Docker ドキュメントで示されているように、awslogs ログドライバーで使用できるオプションは他にもありますが、それらのオプションのいくつかは Amazon ECS でまだサポートされていません。

awslogs-region

必須: はい

awslogs ログドライバーが Docker ログを送信するリージョンを指定します。異なるリージョンのクラスターからのログをすべて CloudWatch Logs の単一のリージョンに送信する選択もできます。そうすることで、1 か所ですべてを表示できます。あるいは、詳細に確認するためにリージョン別にすることもできます。このオプションで指定するリージョンに、指定されたロググループが存在することを確認してください。

awslogs-group

必須: はい

awslogs ログドライバーがログストリームを送信するロググループを指定する必要があります。詳細については、「ロググループの作成」を参照してください。

awslogs-stream-prefix

必須: いいえ

awslogs-stream-prefix オプションを使用して、指定したプレフィックス、コンテナ名、コンテナの所属先の Amazon ECS タスクの ID に、ログストリームを関連付けることができます。このオプションでプレフィックスを指定した場合、ログストリームの形式は以下のようになります。

prefix-name/container-name/ecs-task-id

このオプションでプレフィックスを指定しない場合、ログストリームの名前は、コンテナインスタンスの Docker デーモンによって割り当てられたコンテナ ID に基づいて付けられます。Docker コンテナ ID (コンテナインスタンスでのみ使用できます) だけでそのログを送信したコンテナを追跡するのは難しいため、このオプションでプレフィックスを指定することをお勧めします。

Amazon ECS サービスの場合は、サービス名をプレフィックスとして使用できます。こうすることで、コンテナが所属するサービスへのログストリームと、それを送信したコンテナの名前、およびそのコンテナが所属するタスクの ID を追跡できます。

タスク定義でログ設定を指定する

コンテナがログを CloudWatch に送信する前に、タスク定義でコンテナの awslogs ログドライバーを指定する必要があります。このセクションでは、コンテナが awslogs ログドライバーを使用するためのログ設定について説明します。詳細については、「タスク定義の作成」を参照してください。

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

Copy
{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-wordpress", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "awslogs-example" } }, "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-mysql", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example" }

Amazon ECS コンソールで、wordpress コンテナのログ設定は次の図のように指定されています。

 コンソールのログ設定

awslogs ログドライバーを使用するタスク定義をコンテナ定義ログ設定に登録すると、タスク定義を使用してタスクを実行またはサービスを作成し、CloudWatch Logs へのログの送信を開始できます。詳細については、「タスクの実行」および「サービスの作成」を参照してください。

CloudWatch Logs で awslogs コンテナログを表示する

コンテナインスタンスロールに CloudWatch Logs にログを送信するために必要な正しいアクセス権限を付与すると、コンテナエージェントが最低でもバージョン 1.9.0 に更新されます。タスクを設定し awslogs ログドライバーを使用するコンテナで開始しているので、設定済みコンテナはログデータを CloudWatch Logs に送信しているはずです。これらのログはコンソールで表示および検索できます。

Amazon ECS コンソールからコンテナの CloudWatch Logs データを表示するには

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

  2. [Clusters] ページで、表示するタスクを含むクラスターを選択します。

  3. [Cluster: cluster_name] ページで、[Tasks] を選択して表示するタスクを選択します。

  4. [Task: task_id] ページで、コンテナ名の左にある矢印を選択してコンテナビューを展開します。

  5. [Log Configuration] セクションで、[View logs in CloudWatch] を選択します。CloudWatch コンソールに関連ログストリームが開きます。

     ログ設定のタスク定義ビュー

CloudWatch コンソールで CloudWatch Logs データを表示するには

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

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

  3. 表示するロググループを選択します。「ロググループの作成」で作成したロググループが表示されます。

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

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