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
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.0ou posterior. -
A opção só é válida quando
logDriverestiver definido comoawsfirelens. -
O limite de buffer padrão é de
1048576linhas de log. -
O limite de buffer deve ser maior ou igual a
0ou menor que as linhas de log536870912. -
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
2KiB, um limite de buffer de 4096 usaria no máximo8MiB. 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 ambienteFLUENT_HOSTno 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 objetofirelensConfigurationem sua definição de contêiner). Isso ocorre porque oFLUENT_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 doFLUENT_HOSTpode 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
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": "public.ecr.aws/docker/library/httpd:latest", "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 } ] }