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

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

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

注記

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

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

コンテナで awslogs ログドライバーを有効にする

タスクで Fargate 起動タイプを使用する場合、タスク定義に必要な logConfiguration パラメータを追加するだけで、awslogs ログドライバーを有効にできます。詳細については、「タスク定義でログ設定を指定する」を参照してください。

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

注記

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

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 ログドライバーを使用するタスクを起動する前に、コンテナが使用するロググループを確実に作成する必要があります。コンソールには、自動設定オプションがついています。コンソールでタスク定義を登録し、[Auto-configure CloudWatch Logs (CloudWatch Logs の自動設定)] オプションを選択すると、ロググループが作成されます。または、次のステップを使用してロググループを手動で作成できます。

たとえば、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 がインストール済みで使用している場合は、それを使用してロググループを作成できます。次のコマンドは、us-west-2 リージョンに awslogs-wordpress というロググループを作成します。作成するロググループごとにこのコマンドを実行します。ロググループ名をお客様の値に、リージョン名を目的のログ宛先に置き換えてください。

aws logs create-log-group --log-group-name awslogs-wordpress --region us-west-2

自動設定機能を使用してロググループを作成する

Amazon ECS コンソールでタスク定義を登録する際、Amazon ECS で CloudWatch ログを自動設定することができます。また、このオプションでも、指定されたロググループが作成されます。自動設定オプションでは、使いやすいように、指定されたプレフィックスで CloudWatch ログおよびロググループが設定されます。

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

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

  2. 左のナビゲーションペインで、[Task Definitions]、[Create new Task Definition] の順に選択します。

  3. 互換性オプションを選択し、[Next Step (次のステップ)] を選択します。

  4. [Add container] を選択します。

  5. [Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、[Auto-configure CloudWatch Logs (CloudWatch Logs の自動設定)] を選択します。

  6. awslogs ログドライバーのオプションを入力します。詳細については、「タスク定義でログ設定を指定する」を参照してください。

  7. タスク定義ウィザードの残りの手順を完了します。

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 タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs ロギングドライバー」を参照してください。

awslogs-create-group

必須: いいえ

自動的に作成されたロググループが必要かどうかを指定します。このオプションを指定しない場合、デフォルトは false です。

注記

awslogs-create-group を使用しようとする前に、IAM ポリシーには logs:CreateLogGroup アクセス権限が含まれている必要があります。

awslogs-datetime-format

必須: いいえ

このオプションは、Python strftime 形式で複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。

この形式を使用する場合のユースケースの例としては、スタックダンプなどの解析された出力があり、これを使用しなければ、複数のエントリに記録されることになります。適切なパターンにより、単一のエントリにキャプチャさせます。

awslogs-datetime-format および awslogs-multiline-pattern の両方が設定されている場合、このオプションは常に優先されます。

注記

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これにより、ログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

awslogs-region

必須: はい

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

awslogs-group

必須: はい

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

awslogs-multiline-pattern

必須: いいえ

このオプションでは、正規表現を使用して複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。

awslogs-datetime-format も設定されている場合は、このオプションは無視されます。

注記

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

awslogs-stream-prefix

必須: Fargate 起動タイプの場合はオプション、EC2 起動タイプの場合は必須。

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

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

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

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

Amazon ECS コンソールを使用するときに [Log] ペインにログを表示するためには、ログのストリームプレフィックスを指定する必要があります。

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

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

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

{ "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 コンソールのメトリクスビュー