翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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-format
とawslogs-multiline-pattern
オプションの両方を設定することはできません。注記
複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。
awslogs-multiline-pattern
-
必須: いいえ
このオプションでは、正規表現を使用する複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。一致する 1 行とは、ログメッセージ間の区切りです。
詳細については、「」を参照してくださいawslogs-multiline-pattern
。 awslogs-datetime-format
も設定されている場合は、このオプションは無視されます。awslogs-datetime-format
とawslogs-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 タスクとしてアプリケーションを実行するおよびコンソールを使用したサービスの作成を参照してください。