Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Enrutamiento de registros personalizados
Puede utilizar Amazon ECSFireLens para utilizar parámetros de definición de tareas para dirigir registros a unAWS servicio de o al destino de red deAWS socios (APN) de para el almacenamiento y el análisis de registros. FireLensfunciona conFluentd yFluent Bit. Proporcionamos AWS para la imagen de Fluent Bit o puede utilizar su propia imagen de Fluentd o Fluent Bit.
La creación de definiciones de tareas de Amazon ECS con una configuración de FireLens se admite mediante los SDK de AWS, AWS CLI y AWS Management Console.
Consideraciones
Al utilizar Amazon ECS, tengaFireLens en cuenta lo siguiente:
-
FireLens para Amazon ECS es compatible con tareas que están alojadas en AWS Fargate en Linux y Amazon EC2 en Linux. Los contenedores de Windows no son compatibles con FireLens.
Para obtener información sobre cómo configurar el registro centralizado para contenedores de Windows, consulte Centralized logging for Windows containers on Amazon ECS using Fluent Bit
(Registro centralizado para contenedores de Windows en Amazon ECS con Fluent Bit). -
FireLens para Amazon ECS es compatible con las plantillas de AWS CloudFormation. Para obtener más información, consulte AWS::ECS::TaskDefinitionFirelensConfigurationla GuíaAWS CloudFormation del usuario
-
FireLensescucha en el puerto
24224
, para asegurarse de que elFireLens direccionador de registros no sea accesible fuera de la tarea, debe permitir la entrada de tráfico en el puerto24224
en el grupo de seguridad que utiliza la tarea. Para tareas que utilizan el modo de redawsvpc
, es el grupo de seguridad asociado a la tarea. Para tareas que utilizan el modo de redhost
, es el grupo de seguridad asociado a la instancia de Amazon EC2 que aloja la tarea. Para tareas que utilizan el modo de redbridge
, no cree asignaciones de puertos que utilicen el puerto24224
. -
Para las tareas que utilizan el modo
bridge
de red, el contenedor con laFireLens configuración debe iniciarse antes de que se inicie cualquier contenedor de aplicaciones que dependa de él. Para controlar el orden de inicio de los contenedores, utilice las condiciones de dependencia en la definición de la tarea. Para obtener más información, consulte Dependencia de contenedor.nota
Si utiliza parámetros de condición de dependencia en las definiciones de contenedores con unaFireLens configuración, asegúrese de que cada contenedor tenga un requisito de
HEALTHY
condiciónSTART
O. -
Por defecto, FireLens agrega el nombre de definición de clúster y tarea y el nombre de recurso de Amazon (ARN) del clúster como claves de metadatos a los registros de contenedor de stdout/stderr. A continuación se muestra un ejemplo del formato de los metadatos.
"ecs_cluster": "
cluster-name
", "ecs_task_arn": "arn:aws:ecs:region
:111122223333
:task/cluster-name
/f2ad7dba413f45ddb4EXAMPLE
", "ecs_task_definition": "task-def-name:revision",Si no quiere que los metadatos estén en los registros, establezca
enable-ecs-log-metadata
enfalse
en lafirelensConfiguration
de la definición de tareas."firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"false", "config-file-type":"file", "config-file-value":"/extra.conf" }
Permisos de IAM necesarios
Para utilizar esta característica, debe crear un rol de IAM para las tareas, que proporcione los permisos necesarios para utilizar los servicios de AWS que las tareas requieran. Por ejemplo, si un contenedor dirige los registros a Kinesis Data Firehose, la tarea necesita permiso para llamar a la API de firehose:PutRecordBatch
. Para obtener más información, consulte Adición y eliminación de permisos de identidad de IAM en la Guía del usuario de IAM.
La siguiente política de IAM de ejemplo agrega los permisos necesarios para dirigir registros a Kinesis Data Firehose.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
firehose:PutRecordBatch
" ], "Resource": [ "*" ] } ] }
Es posible que la tarea también requiera el rol de ejecución de tareas de Amazon ECS en las condiciones que se describen a continuación. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS.
-
Si la tarea está alojada en Fargate y se están extrayendo imágenes de contenedor de Amazon ECR o haciendo referencia a información confidencial de AWS Secrets Manager en la configuración de registro, debe incluir el rol de IAM de ejecución de tareas.
-
Si especifica un archivo de configuración personalizado alojado en Amazon S3, el rol de IAM de ejecución de tareas debe incluir el permiso
s3:GetObject
para el archivo de configuración y el permisos3:GetBucketLocation
en el bucket de Amazon S3 en el que se encuentra el archivo. Para obtener más información, consulte Especificación de permisos en una política en la Guía del usuario de Amazon Simple Storage Service.La siguiente política de IAM de ejemplo agrega los permisos necesarios para recuperar un archivo de Amazon S3. Especifique el nombre del bucket de Amazon S3 y el nombre del archivo de configuración.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
s3:GetObject
" ], "Resource": [ "arn:aws:s3:::examplebucket
/folder_name
/config_file_name
" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket
" ] } ] }
Límite de búfer de Fluentd
Al crear una definición de tarea, puede especificar el número de eventos que se almacenan en búfer en la memoria especificando el valor (en bytes) 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. Los registros perdidos pueden dificultar la solución de problemas. Establecer el límite de búfer podría ayudar a evitar este problema.
A continuación, se muestra la sintaxis para especificar el log-driver-buffer-limit
:
{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "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": "2097152" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }
Al utilizar Amazon ECS con la opciónFireLens 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
1
MiB. -
Los valores válidos son
0
y536870912
(512 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 límite de búfer de memoria. La cantidad total de memoria de búfer especificada debe ser inferior a
536870912
(512 MiB) cuando no se especifica los valores de contenedormemory
ymemoryReservertion
. Más concretamente, puede tener un contenedor de aplicaciones con el controlador de registroawsfirelens
y la opciónlog-driver-buffer-limit
establecida en 300 MiB. Sin embargo, no se le permitirá ejecutar tareas si tiene más de dos contenedores conlog-driver-buffer-limit
establecido en 300 MiB (300 MiB * 2 > 512 MiB).
Uso de bibliotecas de registradores Fluent o Log4j sobre TCP
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 alFireLens contenedor.
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