Configuração de logs do Amazon ECS para obtenção de alto throughput - Amazon Elastic Container Service

Configuração de logs do Amazon ECS para obtenção de alto throughput

Ao criar uma definição de tarefa, você pode especificar o número de linhas de log que são armazenadas em buffer na memória especificando o valor em log-driver-buffer-limit. Para obter mais informações, consulte Driver de registro do Fluentd na documentação do Docker.

Use essa opção quando o throughput for alto, porque o Docker pode ficar sem memória de buffer e descartar as mensagens em buffer para poder adicionar novas mensagens.

Considere o seguinte ao usar o FireLens para Amazon ECS com a opção de limite de buffer:

  • Essa opção é compatível com o tipo de inicialização do Amazon EC2 e o tipo de inicialização do Fargate com a versão da plataforma 1.4.0 ou posterior.

  • A opção só é válida quando logDriver estiver definido como awsfirelens.

  • O limite de buffer padrão é de 1048576 linhas de log.

  • O limite de buffer deve ser maior ou igual a 0 ou menor que as linhas de log 536870912.

  • A quantidade máxima de memória usada para esse buffer é o produto do tamanho de cada linha de log pelo tamanho do buffer. Por exemplo, se as linhas de log da aplicação tivessem em média 2 KiB, um limite de buffer de 4096 usaria no máximo 8 MiB. A quantidade total de memória alocada no nível da tarefa deve ser maior que a quantidade de memória alocada para todos os contêineres, mais o limite de buffer da memória.

Quando o driver de log awsfirelens for especificado em uma definição de tarefa, o agente do Amazon ECS injetará as seguintes variáveis de ambiente no contêiner:

FLUENT_HOST

O endereço IP atribuído ao contêiner do FireLens.

nota

Se você estiver usando o tipo de inicialização do EC2 com o modo de rede bridge, a variável de ambiente FLUENT_HOST no contêiner da aplicação pode se tornar imprecisa após a reinicialização do contêiner do roteador de log do FireLens (o contêiner com o objeto firelensConfiguration em sua definição de contêiner). Isso ocorre porque o FLUENT_HOST é um endereço IP dinâmico e pode mudar após uma reinicialização. O registro em log diretamente do contêiner da aplicação para o endereço IP do FLUENT_HOST pode começar a falhar após a alteração do endereço. Para obter mais informações sobre como reiniciar contêineres individuais, consulte Reiniciar contêineres individuais em tarefas do Amazon ECS com políticas de reinicialização de contêineres.

FLUENT_PORT

A porta em que o protocolo Fluent Forward está escutando.

É possível usar as variáveis de ambiente FLUENT_HOST e FLUENT_PORT para fazer login diretamente no roteador de log do código em vez de passar por stdout. Para obter mais informações, consulte fluent-logger-golang no GitHub.

Veja a seguir a sintaxe para especificar o log-driver-buffer-limit. Substitua my_service_ pelo nome do seu serviço:

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