awslogs ログドライバーを使用する
タスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。これを行うと、Fargate タスク内のコンテナのログを表示できるようになります。このトピックでは、タスク定義で awslogs
ログドライバーの使用を開始する方法を説明します。
注記
タスクのコンテナによってログ記録される情報のタイプは、ENTRYPOINT
コマンドによって大きく異なります。デフォルトでは、キャプチャされるログには、コンテナをローカルに実行した場合に通常はインタラクティブターミナルに表示されるコマンド出力 (STDOUT
および STDERR
I/O ストリーム) が表示されます。awslogs
ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。Docker ログの処理方法 (ファイルデータやストリームをキャプチャする別の方法) の詳細については、Docker ドキュメントの「コンテナまたはサービスのログを表示する
コンテナ用の awslogs ログドライバーを有効にする
タスクで Fargate 起動タイプを使用する場合、awslogs
ログドライバーを有効化するには、必要な logConfiguration
パラメータをタスク定義に追加する必要があります。詳細については、「タスク定義でログ設定を指定する」を参照してください。
ロググループを作成する
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 Logs の自動設定を許可することができます。この設定を行うと、ecs
をプレフィックスとするタスク定義ファミリー名を使用して、自動的にロググループが作成されます。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。
使用できる awslogs ログドライバーのオプション
awslogs
ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs ロギングドライバー
awslogs-create-group
-
必須: いいえ
ロググループを自動的に作成させるかどうかを指定します。このオプションを指定しない場合、デフォルトは [
false
] です。注記
awslogs-create-group
を使用する前に、IAM ポリシーにはアクセス許可logs:CreateLogGroup
が含まれている必要があります。 awslogs-region
-
必須: はい
awslogs
ログドライバが Docker ログを送信する先の、AWS リージョン を指定します。CloudWatch Logs では、異なるリージョンのクラスターからすべてのログを 1 つのリージョンに送信するように選択できます。これにより、すべてのログを一元的な場所で確認できるようになります。他にも、リージョンごとにそれらを分離して、より細分化することが可能です。このオプションで指定するリージョンに、対象のロググループが存在することを確認してください。 awslogs-group
-
必須: はい
awslogs
ログドライバーがログストリームを送信する先の、ロググループを指定する必要があります。詳細については、「ロググループを作成する」を参照してください。 awslogs-stream-prefix
-
必須:はい。Fargate 起動タイプを使用する場合は必須です。EC2 launch タイプの場合は
指定したプレフィックス、コンテナ名、コンテナが属する Amazon ECS タスクの ID にログストリームを関連付けるには、
awslogs-stream-prefix
オプションを使用します。このオプションでプレフィックスを指定した場合、ログストリームの形式は以下のようになります。prefix-name
/container-name
/ecs-task-id
Amazon ECS サービスでは、サービス名をプレフィックスとして使用できます。これにより、コンテナが属するサービスへのログストリームと、それを送信したコンテナの名前、そのコンテナが所属するタスクの ID を追跡できます。
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 つは、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-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" }
CloudWatch Logs での コンテナログの表示
awslogs
ログドライバーを使用する Fargate タスクを起動した後、設定済みコンテナはログデータを CloudWatch Logs に送信する必要があります。これらのログはコンソールで表示および検索できます。
Amazon ECS コンソールからコンテナの CloudWatch Logs データを表示するには
コンソール (https://console.aws.amazon.com/ecs/v2
) を開きます。 -
[Clusters] ページで、表示するタスクを含むクラスターを選択します。
-
[Cluster:
cluster_name
] ページで、[タスク] を選択して表示するタスクを選択します。 -
[タスク:
task_id
] ページの [コンテナの詳細] で、[ログ設定] を選択してログを表示します。 -
[Log Configuration (ログ設定)] セクションで、[CloudWatch のログを表示] を選択します。CloudWatch コンソールに関連ログストリームが開きます。
CloudWatch コンソールで CloudWatch Logs データを表示するには
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
左のナビゲーションペインで [Logs] (ログ) を選択します。
-
表示するロググループを選択します。「ロググループを作成する」で作成したロググループが表示されます。
-
表示するログストリームを選択します。