Exemplo de definição de tarefa do Amazon ECS: rotear logs para o FireLens - Amazon Elastic Container Service

Exemplo de definição de tarefa do Amazon ECS: rotear logs para o FireLens

Para usar o roteamento de log personalizado com o FireLens, é necessário especificar o seguinte em sua definição de tarefa:

  • Um contêiner de roteador de log com uma configuração do FireLens. Recomendamos que o contêiner seja marcado como essential.

  • Um ou mais contêineres de aplicativo que contêm uma configuração de log especificando o driver de log awsfirelens.

  • Um nome do recurso da Amazon (ARN) de perfil do IAM que contém as permissões necessárias para que a tarefa roteie os logs.

Ao criar uma nova definição de tarefa usando o AWS Management Console, há uma seção de integração do FireLens que facilita a adição de um contêiner de roteador de log. Para ter mais informações, consulte Criar uma definição de tarefa do Amazon ECS usando o console.

O Amazon ECS converte a configuração de log e gera a configuração de saída do Fluentd ou Fluent Bit. A configuração de saída é montada no contêiner de roteamento de log em /fluent-bit/etc/fluent-bit.conf para o Fluent Bit e /fluentd/etc/fluent.conf para o Fluentd.

Importante

O FireLens escuta na porta 24224. Portanto, para garantir que o roteador de log do FireLens não seja acessível fora da tarefa, você não deve permitir tráfego de entrada na porta 24224 no grupo de segurança usado por essa tarefa. Para tarefas que usam o modo de rede awsvpc, esse é o grupo de segurança associado à tarefa. Para as tarefas que usam o modo de rede host esse é o grupo de segurança associado à instância do Amazon EC2 que hospeda a tarefa. Para as tarefas que usam o modo de rede bridge, não crie qualquer mapeamento de porta que use porta 24224.

Por padrão, o Amazon ECS adiciona campos às entradas de log que ajudam a identificar a fonte dos logs.

  • ecs_cluster: o nome do cluster do qual a tarefa faz parte.

  • ecs_task_arn: o nome do recurso da Amazon (ARN) da tarefa da qual o contêiner faz parte.

  • ecs_task_definition: o nome da definição de tarefa e a revisão que a tarefa está usando.

  • ec2_instance_id: o ID da instância do Amazon EC2 na qual o contêiner está hospedado. Esse campo só é válido para tarefas que usam o tipo de inicialização do EC2.

Você pode definir os enable-ecs-log-metadata como false se não quiser os metadados.

O exemplo de definição de tarefa a seguir define um contêiner de roteador de log que usa o Fluent para encaminhar seus logs para o CloudWatch Logs. Ele também define um contêiner de aplicação que usa uma configuração de log para encaminhar logs ao Amazon Data Firehose e definir a memória usada para eventos de buffer como 2 MiB.

nota

Para obter exemplos de definições de tarefas, consulte Exemplos do FireLens do Amazon ECS no GitHub.

{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "name": "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": "2097152" } }, "memoryReservation": 100 } ] }

Os pares de chave/valor especificados como opções no objeto logConfiguration são usados para gerar a configuração de saída do Fluentd ou do Fluent Bit. Veja a seguir um exemplo de código de uma definição de saída do Fluent Bit.

[OUTPUT] Name firehose Match app-firelens* region us-west-2 delivery_stream my-stream
nota

O FireLens gerencia a configuração match. Você não especifica a configuração match na definição de tarefa.

Uso de um arquivo de configuração personalizado

É possível especificar um arquivo de configuração personalizado. O formato do arquivo de configuração é o formato nativo do roteador de log que você está usando. Para obter mais informações, consulte Sintaxe do arquivo de configuração do Fluentd e Arquivo de configuração do Fluent Bit.

Em seu arquivo de configuração personalizado, para tarefas que usam o modo de rede bridge ou awsvpc, não defina uma entrada de encaminhamento do Fluentd ou Fluent Bit por TCP porque o FireLens a adiciona à configuração de entrada.

Sua configuração do FireLens deve conter as seguintes opções para especificar um arquivo de configuração personalizado:

config-file-type

O local de origem do arquivo de configuração personalizado. As opções disponíveis são s3 ou file.

nota

Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração file.

config-file-value

A origem do arquivo de configuração personalizado. Se for usado o tipo de arquivo de configuração s3, o valor do arquivo de configuração será o ARN completo do arquivo e do bucket do Amazon S3. Se o tipo de arquivo de configuração file for usado, o valor do arquivo de configuração será o caminho completo do arquivo de configuração que existe na imagem do contêiner ou em um volume montado no contêiner.

Importante

Quando você usa um arquivo de configuração personalizado, precisa especificar um caminho diferente do que o FireLens usa. O Amazon ECS reserva o caminho de arquivo /fluent-bit/etc/fluent-bit.conf para o Fluent Bit e /fluentd/etc/fluent.conf para o Fluentd.

O exemplo a seguir mostra a sintaxe necessária ao especificar uma configuração personalizada.

Importante

Para especificar um arquivo de configuração personalizado hospedado no Amazon S3, verifique se criou uma função do IAM de execução de tarefas com as permissões apropriadas.

Veja a seguir a sintaxe necessária ao especificar uma configuração personalizada.

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3 | file", "config-file-value": "arn:aws:s3:::amzn-s3-demo-bucket/fluent.conf | filepath" } } } ] }
nota

Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração file.