awslogs ログドライバーを使用する - Amazon Elastic Container Service

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

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

注記

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

Amazon ECS コンテナインスタンスから CloudWatch Logs にシステムログを送信するには、「コンテナインスタンスのモニタリング」を参照してください。CloudWatch Logs の詳細については、Amazon CloudWatch Logs User Guide の「ログファイルのモニタリング」および「CloudWatch Logs クォータ」を参照してください。

コンテナで 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 の既存のロググループにログストリームを送信することも、ユーザーに代わって新しいロググループを作成することもできます。AWS Management Console には、タスク定義ファミリー名を ecs でプレフィックスとして使用して、自動的にロググループを作成する自動設定オプションが用意されています。または、手動でログ設定オプションを指定し、値 trueawslogs-create-group オプションを指定することもできます。これにより、ロググループが自動的に作成されます。

注記

awslogs-create-group オプションを使用してロググループを作成するには、IAM ポリシーに logs:CreateLogGroup アクセス許可が含まれている必要があります。

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

Amazon ECS コンソールでタスク定義を登録する際、Amazon ECS で CloudWatch ログを自動設定することができます。このオプションでは、ecs をプレフィックスとして指定し、タスク定義ファミリー名を使用して自動的にロググループが作成されます。

Amazon ECS コンソールでロググループの自動設定オプションを使用するには

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

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

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

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

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

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

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

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

awslogs ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs logging driver」を参照してください。

awslogs-create-group

必須: いいえ

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

注記

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

awslogs-region

必須: はい

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

awslogs-group

必須: はい

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

awslogs-stream-prefix

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

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

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

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

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

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

awslogs-datetime-format

必須: いいえ

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

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

詳細については、「awslogs-datetime-format」を参照してください。

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

注記

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

awslogs-multiline-pattern

必須: いいえ

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

詳細については、「awslogs-multiline-pattern」を参照してください。

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

注記

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

mode

必須: いいえ

有効な値: non-blocking | blocking

デフォルト値: blocking

コンテナから awslogs へのログメッセージの配信モード。詳細については、「ログドライバーを設定する」を参照してください。

max-buffer-size

必須: いいえ

デフォルト値: 1m

non-blocking モードが使用されている場合、max-buffer-size ログオプションは、中間メッセージストレージに使用されるリングバッファのサイズを制御します。

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

コンテナがログを 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": "us-west-2", "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": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example" }

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


					コンソールのログ設定

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

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

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

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

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

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

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

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

  5. [Log Configuration (ログ設定)] セクションで、[CloudWatch のログを表示] を選択します。CloudWatch コンソールに関連ログストリームが開きます。

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

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

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

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

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

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

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