Configuración de los registros de Amazon ECS para conseguir un alto rendimiento
Al crear una definición de tareas, puede indicar el número de líneas de registro que se almacenan en búfer en la memoria mediante la especificación del valor en el log-driver-buffer-limit
. Para obtener más información, consulte Controladores de registro Fluentd
Utilice esta opción cuando haya un alto rendimiento, ya que Docker podría quedarse sin memoria de búfer y descartar mensajes de búfer para poder agregar nuevos mensajes.
Al utilizar FireLens para Amazon ECS con la opción de límite de búfer, tenga en cuenta lo siguiente:
-
Esta opción se admite en el tipo de lanzamiento de Amazon EC2 y en el tipo de lanzamiento de Fargate con versión de plataforma
1.4.0
o posterior. -
La opción solo es válida cuando
logDriver
se establece enawsfirelens
. -
El límite de búfer predeterminado es de
1048576
líneas de registro. -
El límite del búfer debe ser igual o mayor que
0
y menor que las líneas de registro536870912
. -
La cantidad máxima de memoria utilizada para este búfer es el producto del tamaño de cada línea de registro y el tamaño del búfer. Por ejemplo, si las líneas de registro de la aplicación tienen un promedio de
2
KiB, un límite de búfer de 4096 utilizaría como máximo8
MiB. La cantidad total de memoria asignada a nivel de tarea debe ser superior a la cantidad de memoria asignada a todos los contenedores, además del búfer de memoria del controlador de registro.
Cuando se especifica el controlador de registros awsfirelens
en una definición de tarea, el agente de contenedor de Amazon ECS introduce las siguientes variables de entorno en el contenedor:
FLUENT_HOST
-
La dirección IP que está asignada al contenedor FireLens.
nota
Si utiliza el tipo de lanzamiento EC2 con el modo de red
bridge
, la variable de entornoFLUENT_HOST
del contenedor de aplicaciones puede dejar de ser precisa tras reiniciar el contenedor del router de registro de FireLens (el contenedor con el objetofirelensConfiguration
en su definición de contenedor). Esto se debe a queFLUENT_HOST
es una dirección IP dinámica y puede cambiar tras un reinicio. El registro directo desde el contenedor de la aplicación en la dirección IPFLUENT_HOST
puede empezar a fallar después de que la dirección cambie. Para obtener más información acerca de cómo reiniciar contenedores individuales, consulte Reinicio de contenedores individuales en tareas de Amazon ECS con políticas de reinicio de contenedores. FLUENT_PORT
-
El puerto en el que se está escuchando el protocolo Fluent Forward.
Puede utilizar las variables de entorno FLUENT_HOST
y FLUENT_PORT
para iniciar sesión directamente en el enrutador de registros desde el código en lugar de pasar por stdout
. Para obtener más información, consulte fluent-logger-golang
A continuación, se muestra la sintaxis para indicar la propiedad log-driver-buffer-limit
. Sustituya my_service_
por el nombre del servicio:
{ "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": "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 } ] }