高スループットの Amazon ECS ログの設定
タスク定義を作成する際は、値 (log-driver-buffer-limit
) を指定することで、メモリにバッファリングされるログの行数を指定できます。詳細については、Docker ドキュメントの「Fluentd ロギングドライバー
このオプションは、スループットが高いために Docker がバッファメモリを使い果たし、新しいメッセージを追加するためにバッファメッセージを破棄する可能性がある場合に使用します。
バッファ制限オプションを指定して FireLens for Amazon ECS を使用する場合は、以下の点を考慮してください。
-
このオプションは、Amazon EC2 起動タイプおよび プラットフォームバージョン
1.4.0
以降の Fargate 起動タイプでサポートされています。 -
このオプションは、
logDriver
がawsfirelens
に設定されている場合にのみ有効です。 -
デフォルトのバッファ制限は
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 } ] }