Saltar al contenido

¿Cómo envío los mis registros de contenedor a varios destinos en Amazon ECS en AWS Fargate?

5 minutos de lectura
0

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) te permite especificar solo un objeto de configuración de registro para un contenedor determinado. Este límite significa que puedes reenviar los registros a un solo destino. Para reenviar registros a varios destinos en Amazon ECS en Fargate, puedes usar FireLens.

Nota: FireLens funciona con los reenviadores de registro Fluent Bit y Fluentd. Esta resolución usa Fluent Bit, porque consume menos recursos que Fluentd.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores de la AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Antes de empezar, asegúrate de entender:

  • Para generar la definición de salida de Fluent Bit, FireLens usa los pares clave-valor especificados como opciones en el objeto logConfiguration de la definición de tareas de ECS. 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, consulta Output (Salida) en el sitio web de Fluent Bit. Si no especificas ninguna opción, no se generará ningún resultado.
  • FireLens crea un archivo de configuración en tu nombre, pero también puedes especificar un archivo de configuración personalizado. Puedes hospedar este archivo de configuración en Amazon Simple Storage Service (Amazon S3). O bien, puedes crear una imagen de Docker personalizada de Fluent Bit con el archivo personalizado de configuración de salida que hayas agregado a la imagen.
  • Puedes usar Amazon ECS y Fargate para extraer un archivo de configuración personalizado de Amazon S3, a menos que necesites complementos personalizados para Fluent Bit.

Creación de un archivo de configuración de salida personalizado de Fluent Bit y carga en Amazon S3

Crea un archivo de configuración personalizado de Fluent Bit denominado logDestinations.conf con las definiciones de [OUTPUT] que elijas. Por ejemplo, el archivo de configuración incluye las configuraciones definidas para CloudWatch, Amazon Data Firehose y Splunk. La directiva de coincidencia enruta tus datos. Cuando Amazon ECS rellena la configuración de Fluent Bit, etiqueta las transmisiones de entrada con un nombre generado automáticamente con el prefijo del nombre del contenedor. El servicio de prefijos se usa en el ejemplo:

[OUTPUT]   
    Name                firehose   
    Match               service*
    region              us-west-2
    delivery_stream     nginx-stream  
[OUTPUT]
    Name                cloudwatch
    Match               service*
    region              us-east-1
    log_group_name      firelens-nginx-container
    log_stream_prefix   from-fluent-bit
    auto_create_group   true   
[OUTPUT]
    Name                splunk
    Match               service*
    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, consulta amazon-ecs-firelens-examples en el sitio web de GitHub.

Para cargar este archivo en un bucket de Amazon S3 que tú controles, ejecuta el comando cp de la AWS CLI:

aws s3 cp logDestinations.conf s3://example-bucket/logDestinations.conf

Creación de permisos de IAM

Crea permisos de AWS Identity and Access Management (IAM) para permitir que tu rol de tarea adquiera el archivo de configuración de S3. Permite que tu rol de tarea dirija tus registros a diferentes destinos. Por ejemplo, si el destino es Amazon Data Firehose, debes dar permiso a la tarea para que llame a la API firehose:PutRecordBatch.

Nota: Fluent Bit admite 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, consulta Permisos para CloudWatch y Kinesis en el sitio web de GitHub.

En el ejemplo de política de IAM, el rol de tarea otorga a s3:GetObject acceso al archivo de configuración. Se recomienda conceder a la tarea los permisos necesarios para registrar la propia salida de la tarea en otro grupo de registro de CloudWatch.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ConfigurationFileAccess",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::example-bucket/logDestinations.conf"
    },
    {
      "Sid": "CloudWatchLogGroupPermissions",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-log-router"
    },
    {
      "Sid": "CloudWatchLogStreamPermissions",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-log-router:log-stream:*"
    }
  ]
}

Nota: Para obtener más información sobre cómo crear un rol de IAM de tarea y los permisos necesarios, consulta Rol de IAM de ejecución de tareas de Amazon ECS.

El rol de tarea de IAM de ejemplo concede los permisos necesarios para los controladores de CloudWatch y Amazon Data Firehose utilizados en el destino del ejemplo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DataFirehosePermissions",
      "Action": [
        "firehose:PutRecordBatch"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:firehose:us-west-2:555555555555:deliverystream/nginx-stream"
    },
    {
      "Sid": "CloudWatchLogGroupPermissions",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-nginx-container"
    },
    {
      "Sid": "CloudWatchLogStreamPermissions",
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-nginx-container:log-stream:*"
    }
  ]
}

Creación de la definición de la tarea

En la definición de la tarea, utiliza la imagen de AWS para Fluent Bit para incluir un contenedor esencial adicional. El ejemplo ejecuta el contenedor nginx oficial. Utiliza la AWS CLI o la consola de Amazon ECS para crear una definición de tarea completa:

{
    "family": "firelens-example-task",
    "taskRoleArn": "arn:aws:iam::012345678901:role/exampleTaskRole",
    "taskExecutionRoleArn": "arn:aws:iam::444455556666:role/exampleTaskExecutionRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": ["FARGATE"],
    "cpu": "256",
    "memory": "512",
    "containerDefinitions": [
        {
            "essential": true,
            "image": "public.ecr.aws/docker/library/nginx:latest",
            "name": "service_web_app",
            "logConfiguration": {
                "logDriver": "awsfirelens"
            }
        },
        {
            "essential": true,
            "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable",
            "name": "log_router",
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "firelens-log-router",
                    "awslogs-region": "us-east-1",
                    "awslogs-create-group": "true",
                    "awslogs-stream-prefix": "firelens-router-logs"
                }
            },
            "firelensConfiguration": {
                "type": "fluentbit",
                "options": {
                    "config-file-type": "s3",
                    "config-file-value": "arn:aws:s3:::example-bucket/logDestinations.conf"
                }
            }
        }
    ]
}

Nota: Para solucionar problemas, la configuración de ejemplo dirige la salida del contenedor de Fluent Bit a otro grupo de registros de CloudWatch con un prefijo diferente.

OFICIAL DE AWSActualizada hace un año
Sin comentarios