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 にシステムログを送信するには、「Amazon Logs ユーザーガイド」のCloudWatch 「ログファイルとログのクォータのモニタリング」を参照してください。 CloudWatch

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

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

タスクで 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 コンテナインスタンスを作成した場合は、このアクセス許可の追加が必要となる場合があります。ecsTaskExecutionRole はタスクに割り当てられた時点で使用され、また、正しいアクセス許可が含まれている必要があります。タスク実行ロールの詳細については、「」を参照してくださいAmazon ECS タスク実行IAM ロール。コンテナインスタンスでコンテナインスタンス用の管理 IAM ポリシーを使用している場合、通常そのコンテナインスタンスには、適切なアクセス許可が付与されています。コンテナインスタンスの マネージド IAM ポリシーの詳細については、「」を参照してくださいAmazon ECS コンテナインスタンスの IAM ロール

ロググループを作成する

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

注記

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

次のコードは、awslogs-create-group オプションの設定方法を示しています。

{ "containerDefinitions": [ { "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } } ] }

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

タスク定義を登録すると、Amazon ECS コンソールで Amazon ECS に CloudWatch ログの自動設定を許可できます。この設定を行うと、ecs をプレフィックスとするタスク定義ファミリー名を使用して、自動的にロググループが作成されます。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。

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

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

awslogs-create-group

必須: いいえ

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

注記

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

awslogs-region

必須: はい

AWS リージョン awslogs ログドライバーが Docker ログを送信する先の を指定します。異なるリージョンのクラスターから ログの単一のリージョンにすべての CloudWatch ログを送信できます。これにより、すべてのログを一元的な場所で確認できるようになります。他にも、リージョンごとにそれらを分離して、より細分化することが可能です。このオプションで指定するリージョンに、対象のロググループが存在することを確認してください。

awslogs-group

必須: はい

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

awslogs-stream-prefix

必須: はい。Fargate 起動タイプを使用する場合。Fargate 起動タイプに必要な EC2 起動タイプのオプション。

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

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

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

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

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

awslogs-datetime-format

必須: いいえ

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

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

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

awslogs-datetime-formatawslogs-multiline-pattern オプションの両方を設定することはできません。

注記

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

awslogs-multiline-pattern

必須: いいえ

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

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

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

awslogs-datetime-formatawslogs-multiline-pattern オプションの両方を設定することはできません。

注記

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

mode

必須: いいえ

有効な値: non-blocking | blocking

デフォルト値: blocking

このオプションは、コンテナから CloudWatch Logs へのログメッセージの配信モードを定義します。選択した配信モードは、コンテナから へのログのフロー CloudWatch が中断された場合のアプリケーションの可用性に影響します。

デフォルトblockingモードを使用し、 へのログのフローCloudWatch が中断されると、コンテナコードからの呼び出しがブロックされ、 stdoutおよび stderr ストリームに書き込まれます。その結果、アプリケーションのロギングスレッドがブロックされます。これにより、アプリケーションが応答しなくなり、コンテナのヘルスチェックが失敗する可能性があります。

non-blocking モードを使用する場合、コンテナのログは代わりに max-buffer-size オプションで設定されたメモリ内の中間バッファに保存されます。これにより、ログを に送信できない場合にアプリケーションが応答しなくなるのを防ぎます CloudWatch。サービスの可用性を確保したいが、多少のログ損失があっても問題ない場合は、このモードを使用することをおすすめします

max-buffer-size

必須: いいえ

デフォルト値: 1m

non-blocking モードが使用されている場合、max-buffer-size ログオプションは、中間メッセージ用のストレージに使用されるバッファのサイズを制御します。アプリケーションに基づいて、必ず適切なバッファサイズを指定してください。バッファがいっぱいになると、それ以上ログを保存できなくなります。保存できないログは失われます。

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

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

下にあるタスク定義 JSON には、各コンテナに指定された logConfiguration オブジェクトが含まれています。1 つは、 というロググループにログを送信する WordPress コンテナ用ですawslogs-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-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": "mysql", "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" }

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