配置 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
-
分配给 FirelLens 容器的 IP 地址。
FLUENT_PORT
-
Fluent Forward 协议正在侦听的端口。
您可以使用 FLUENT_HOST
和 FLUENT_PORT
环境变量直接从代码登录到日志路由器,而不是通过 stdout
。有关更多信息,请参阅 GitHub 上的 fluent-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 } ] }