高スループットの Amazon ECS ログの設定 - Amazon Elastic Container Service

高スループットの Amazon ECS ログの設定

タスク定義を作成する際は、値 (log-driver-buffer-limit) を指定することで、メモリにバッファリングされるログの行数を指定できます。詳細については、Docker ドキュメントの「Fluentd ロギングドライバー」を参照してください。

このオプションは、スループットが高いために Docker がバッファメモリを使い果たし、新しいメッセージを追加するためにバッファメッセージを破棄する可能性がある場合に使用します。

バッファ制限オプションを指定して FireLens for Amazon ECS を使用する場合は、以下の点を考慮してください。

  • このオプションは、Amazon EC2 起動タイプおよび プラットフォームバージョン 1.4.0 以降の Fargate 起動タイプでサポートされています。

  • このオプションは、logDriverawsfirelens に設定されている場合にのみ有効です。

  • デフォルトのバッファ制限は 1048576 (ログの行数) です。

  • バッファ制限は、0 ログ行以上、536870912 ログ行未満である必要があります。

  • このバッファに使用されるメモリの最大量は、各ログ行のサイズとバッファのサイズ積です。例えば、アプリケーションのログ行が平均 2 KiB の場合、4096 のバッファ制限では最大 8 MiB を使用します。タスクレベルで割り当てられるメモリの合計量は、ログドライバーのメモリバッファに加えて、すべてのコンテナに割り当てられたメモリ量よりも大きくなければなりません。

awsfirelens ログドライバーがタスク定義で指定されている場合、Amazon ECS コンテナエージェントは次の環境変数をコンテナに挿入します。

FLUENT_HOST

FireLens コンテナに割り当てられた IP アドレス。

注記

bridge ネットワークモードの EC2 起動タイプを使用している場合、FireLens ログルーターコンテナ (コンテナ定義に firelensConfiguration オブジェクトがあるコンテナ) を再起動した後で、アプリケーションコンテナの FLUENT_HOST 環境変数が不正確になる可能性があります。これは、FLUENT_HOST が動的 IP アドレスであり、再起動後に変更される場合があるためです。アプリケーションコンテナから FLUENT_HOST IP アドレスへの直接的なロギングは、アドレスの変更後に失敗することがあります。個々のコンテナの再起動に関する詳細については、「コンテナ再起動ポリシーを使用して Amazon ECS タスク内の個々のコンテナを再起動する」を参照してください。

FLUENT_PORT

Fluent Forward プロトコルがリッスンしているポート。

FLUENT_HOST 環境変数および FLUENT_PORT 環境変数を使用すると、stdout を介することなく、コードからログルーターに直接ログを記録できます。詳細については、GitHub の「flluent-logger-golang」 を参照してください。

以下に、log-driver-buffer-limit を指定するための構文を示します。my_service_ をユーザー自身のサービス名に置き換えます。

{ "containerDefinitions": [ { "name": "my_service_log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "cpu": 0, "memoryReservation": 51, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "user": "0", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-aws-firelens-sidecar-container", "mode": "non-blocking", "awslogs-create-group": "true", "max-buffer-size": "25m", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "firelens" }, "secretOptions": [] }, "systemControls": [], "firelensConfiguration": { "type": "fluentbit" } }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "51200" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }