高スループットの 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 アドレス。

FLUENT_PORT

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

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

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

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "my_service_log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "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 } ] }