Quiero que el contenedor de aplicaciones que se ejecuta en AWS Fargate reenvíe los registros a varios destinos, como Amazon CloudWatch, Amazon Data Firehose o Splunk.
Descripción corta
Una definición de tarea de Amazon Elastic Container Service (Amazon ECS) le permite especificar solo un objeto de configuración de registro para un contenedor determinado. Este límite significa que puede reenviar los registros a un solo destino. Para reenviar registros a varios destinos en Amazon ECS en Fargate, puede usar FireLens.
Nota: FireLens funciona con los reenviadores de registro Fluent Bit y Fluentd. La siguiente resolución usa Fluent Bit, porque este consume menos recursos que Fluentd.
Resolución
Requisitos previos:
Revise la siguiente información:
- FireLens usa los pares clave-valor especificados como opciones en el objeto LogConfiguration de la definición de tareas de ECS para generar la definición de salida de Fluent Bit. El destino al que se envían los registros se especifica en la sección de definición [OUTPUT] de un archivo de configuración de Fluent Bit. Para más información, consulte Output (Salida) en el sitio web de Fluent Bit.
- FireLens crea un archivo de configuración en su nombre, pero también puede especificar un archivo de configuración personalizado. Puede hospedar este archivo de configuración en Amazon Simple Storage Service (Amazon S3). O bien, puede crear una imagen de Docker personalizada de Fluent Bit con el archivo personalizado de configuración de salida que haya agregado.
- Si usa Amazon ECS en Fargate, no podrá extraer un archivo de configuración de Amazon S3. En su lugar, debe crear una imagen de Docker personalizada con el archivo de configuración.
Creación de permisos de IAM
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors (Solución de problemas con errores de AWS CLI). Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Cree permisos de AWS Identity and Access Management (IAM) para permitir que su rol de tarea envíe sus registros a diferentes destinos. Por ejemplo, si el destino es Data Firehose, debe dar permiso a la tarea para que llame a la API firehose:PutRecordBatch.
Nota: Fluent Bit admite varios complementos como destinos de registro. Los destinos como CloudWatch y Kinesis requieren permisos que incluyen logs:CreateLogGroup, logs:CreateLogStream, logs:DescribeLogStreams, logs:PutLogEvents y kinesis:PutRecords. Para más información, consulte Permisos para CloudWatch y Kinesis en el sitio web de GitHub.
Creación de una imagen de Docker de Fluent Bit con un archivo de configuración de salida personalizado
-
Cree un archivo de configuración personalizado de Fluent Bit denominado LogDestinations.conf con las definiciones de [OUTPUT] que elija. Por ejemplo, el siguiente archivo de configuración incluye las configuraciones definidas para CloudWatch, Data Firehose y Splunk:
[OUTPUT] Name firehose
Match YourContainerName*
region us-west-2
delivery_stream nginx-stream
[OUTPUT]
Name cloudwatch
Match YourContainerName*
region us-east-1
log_group_name firelens-nginx-container
log_stream_prefix from-fluent-bit
auto_create_group true
[OUTPUT]
Name splunk
Match <ContainerName>*
Host 127.0.0.1
Splunk_Token xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
Splunk_Send_Raw On
Nota: Los diferentes destinos requieren que se especifiquen diferentes campos en la definición de [OUTPUT]. Para ver ejemplos, consulte amazon-ecs-firelens-examples en el sitio web de GitHub.
-
Utilice el siguiente ejemplo de Dockerfile para crear una imagen de Docker con un archivo personalizado de configuración de salida de Fluent Bit:
FROM amazon/aws-for-fluent-bit:latestADD logDestinations.conf /logDestinations.conf
Nota: Para más información, consulte la referencia de Dockerfile en el sitio web de Docker.
-
Para usar el elemento Dockerfile que utilizó para crear la imagen de Docker personalizada de Fluent Bit, ejecute el siguiente comando:
docker build -t custom-fluent-bit:latest .
Importante: Ejecute el comando docker build en la misma ubicación que el elemento Dockerfile.
-
Para confirmar que la imagen de Docker está disponible en Amazon ECS, incluya la imagen de Docker en Amazon Elastic Container Registry (Amazon ECR). O bien, suba su imagen de Docker a su propio registro de Docker. Por ejemplo, para enviar una imagen de Docker local a Amazon ECR, ejecute el siguiente comando:
docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
-
En la definición de la tarea, actualice las opciones de la configuración de FireLens:
{
"containerDefinitions": [
{
"essential": true,
"image": "aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest",
"name": "log_router",
"firelensConfiguration": {
"type": "fluentbit",
"options": {
"config-file-type": "file",
"config-file-value": "/logDestinations.conf"
}
}
}
]
}
Nota: Para especificar un archivo de configuración personalizado, debe incluir las opciones config-file-type y config-file-value en el archivo de configuración de FireLens. Para incluir estas opciones, utilice AWS CLI o la consola de Amazon ECS para crear una definición de tarea.
-
Modifique la propiedad de imagen en la sección ContainerDefinition de su configuración para reflejar una ubicación de imagen de Amazon ECR válida. Si quiere especificar imágenes en los repositorios de Amazon ECR, utilice la convención de nomenclatura completa registry/repository:tag. Por ejemplo:
aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
Para usar otros repositorios, consulte la propiedad de imagen de la definición de la tarea.