Uso del enrutamiento de registros personalizado - Amazon Elastic Container Service

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.

Uso del enrutamiento de registros personalizado

Puede utilizar Amazon ECS FireLens para utilizar los parámetros de definición de tareas para enrutar los registros a un AWS servicio o destino AWS Partner Network (APN) para el almacenamiento y el análisis de los registros. AWS Partner Network Se trata de una comunidad global de socios que aprovecha los programas, la experiencia y los recursos para crear, comercializar y vender ofertas para los clientes. Para obtener más información, consulte AWS Partner. FireLens trabaja con Fluentd y Fluent Bit. Proporcionamos AWS para la imagen de Fluent Bit o puede utilizar su propia imagen de Fluentd o Fluent Bit.

Consideraciones

Tenga en cuenta lo siguiente cuando lo utilice FireLens para Amazon ECS:

  • Le recomendamos que añada un nombre my_service_ al contenedor de registro para poder distinguir fácilmente los nombres de los contenedores en la consola.

  • Amazon ECS añade una dependencia de orden de contenedores inicial entre los contenedores de la aplicación y el FireLens contenedor de forma predeterminada. Al especificar un orden de contenedores entre los contenedores de la aplicación y el FireLens contenedor, se anula el orden de contenedores inicial predeterminado.

  • FireLensfor Amazon ECS es compatible con las tareas que se alojan tanto AWS Fargate en Linux como en 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).

  • FireLenspara Amazon ECS se admite en AWS CloudFormation las plantillas. Para obtener más información, consulte AWS::ECS::TaskDefinition FirelensConfigurationla Guía AWS CloudFormation del usuario

  • FireLensescucha en el puerto24224, por lo que, para garantizar que no se pueda acceder al router de FireLens registro fuera de la tarea, no debe permitir el tráfico entrante 24224 en el puerto del grupo de seguridad que utilice su tarea. Para tareas que utilizan el modo de red awsvpc, es el grupo de seguridad asociado a la tarea. Para tareas que utilizan el modo de red host, es el grupo de seguridad asociado a la instancia de Amazon EC2 que aloja la tarea. Para tareas que utilizan el modo de red bridge, no cree asignaciones de puertos que utilicen el puerto 24224.

  • En el caso de las tareas que utilizan el modo de bridge red, el contenedor con la FireLens 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 condiciones de dependencia en las definiciones de contenedores con una FireLens configuración, asegúrese de que cada contenedor tenga un requisito de HEALTHY condición START 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 en false en la firelensConfiguration 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 usar esta función, debe crear un rol de IAM para sus tareas que proporcione los permisos necesarios para usar cualquier AWS servicio que requieran las tareas. Por ejemplo, si un contenedor envía registros a Firehose, la tarea requiere permiso para llamar a la firehose:PutRecordBatch API. 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.

El siguiente ejemplo de política de IAM agrega los permisos necesarios para enrutar los registros a Firehose.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

El siguiente ejemplo de política de IAM añade los permisos necesarios para enrutar los registros a Amazon CloudWatch Logs.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "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 su tarea está alojada en Fargate y extrae imágenes de contenedores de Amazon ECR o hace referencia a datos confidenciales de su configuración de AWS Secrets Manager registro, debe incluir la función 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 permiso s3: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 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. 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 my_service_Sustitúyalo por el nombre de su servicio. :

{ "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": "2097152" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

Tenga en cuenta lo siguiente cuando lo utilice FireLens para Amazon ECS con la opción de límite de búfer:

  • 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 1 MiB.

  • Los valores válidos son 0 y 536870912 (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 contenedor memory y memoryReservation. Más concretamente, puede tener un contenedor de aplicaciones con el controlador de registro awsfirelens y la opción log-driver-buffer-limit establecida en 300 MiB. Sin embargo, no se le permitirá ejecutar tareas si tiene más de dos contenedores con log-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 se asigna al FireLens 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 GitHub.

Temas