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.0
ou posterior. -
A opção só é válida quando
logDriver
estiver definido comoawsfirelens
. -
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 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
2
KiB, um limite de buffer de 4096 usaria no máximo8
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 ambienteFLUENT_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 objetofirelensConfiguration
em 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_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
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 } ] }