配置 Amazon ECS 日志,以实现高吞吐量 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置 Amazon ECS 日志,以实现高吞吐量

创建任务定义时,您可以通过在 log-driver-buffer-limit 中指定值来指定将在内存中缓冲的日志行数。有关更多信息,请参阅 Docker 文档中的 Fluentd 日志记录驱动程序

建议在吞吐量高时使用此选项,因为 Docker 可能会耗尽缓冲区内存并丢弃缓冲区消息,以便添加新消息。

将 FireLens for Amazon ECS 与缓冲区限制选项结合使用时考虑以下事项:

  • Amazon EC2 启动类型和带平台版本 1.4.0 或更高版本的 Fargate 启动类型支持此选项。

  • 该选项仅在 logDriver 设置为 awsfirelens 时有效。

  • 默认缓冲区限制为 1048576 个日志行。

  • 有效值为 0536870912 个日志行。

  • 用于此缓冲区的最大内存量是每个日志行的大小与缓冲区大小的乘积。例如,假设应用程序的日志行大小平均为 2 KiB,则缓冲区限制为 4096 时最多只能使用 8 MiB。除了日志驱动程序的内存缓冲区外,在任务级别分配的内存总量必须大于为所有容器分配的内存量。

在任务定义中指定 awsfirelens 日志驱动程序时,Amazon ECS 容器 代理会将以下环境变量注入容器中:

FLUENT_HOST

分配给 FirelLens 容器的 IP 地址。

FLUENT_PORT

Fluent Forward 协议正在侦听的端口。

您可以使用 FLUENT_HOSTFLUENT_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 } ] }