為高輸送量設定 Amazon ECS 日誌 - Amazon Elastic Container Service

為高輸送量設定 Amazon ECS 日誌

在建立任務定義時,您可以指定記憶體中緩衝的事件數,方法是在 log-driver-buffer-limit 中指定值。如需詳細資訊,請參閱 Docker 文件中的 Fluentd 登入驅動程式

請在有高輸送量時使用此選項,原因是 Docker 可能會耗盡緩衝區記憶體,並捨棄緩衝區訊息,以便新增新訊息。

使用 FireLens for Amazon ECS 搭配緩衝區限制選項時,請考量下列 :

  • EC2 與具有平台版本 1.4.0 或更新版本的 Fargate 類型支援此選項。

  • 只有在 logDriver 設定為 awsfirelens 時,此選項才有效。

  • 預設的緩衝區上限為 1048576 日誌行。

  • 緩衝區限制必須大於或等於 0 且小於 536870912 日誌行。

  • 此緩衝區使用的記憶體容量上限,為每個日誌行大小與緩衝區大小的乘積。例如,應用程式的日誌行平均為 2 KiB,設定 4096 行的緩衝區限制時,最多將使用 8 MiB。在任務層級配置的記憶體總量,應大於為所有容器配置的記憶體容量與日誌驅動程式記憶體緩衝區用量的總和。

在任務定義中指定 awsfirelens 日誌驅動程式時,Amazon ECS 代理程式會將下列環境變數插入容器中:

FLUENT_HOST

指派給 FireLens 容器的 IP 位址。

注意

如果搭配 bridge 網路模式使用 EC2,應用程式容器中的 FLUENT_HOST 環境變數可能會在重新啟動 FireLens 日誌路由器容器 (容器定義中具有 firelensConfiguration 物件的容器) 之後變得不準確。這是因為 FLUENT_HOST 是動態 IP 位址,重新啟動之後可能發生變更。從應用程式容器直接向 FLUENT_HOST IP 位址寫入日誌的操作,可能會在該位址變更後開始失敗。如需有關重新啟動個別容器的詳細資訊,請參閱使用容器重新啟動政策在 Amazon ECS 任務中重新啟動個別容器

FLUENT_PORT

流利轉送通訊協定正在接聽的連接埠。

您可以使用 FLUENT_HOSTFLUENT_PORT 環境變數從程式碼直接登入日誌路由器,而不是透過 stdout。如需詳細資訊,請參閱 GitHub 上的 流利記錄器 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": "public.ecr.aws/docker/library/httpd:latest", "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 } ] }