Configuración de los registros de Amazon ECS para conseguir un alto rendimiento - Amazon Elastic Container Service

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 en la documentación de Docker.

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 en awsfirelens.

  • 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 registro 536870912.

  • 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áximo 8 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 entorno FLUENT_HOST del contenedor de aplicaciones puede dejar de ser precisa tras reiniciar el contenedor del router de registro de FireLens (el contenedor con el objeto firelensConfiguration en su definición de contenedor). Esto se debe a que FLUENT_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 IP FLUENT_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 en GitHub.

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 } ] }