Uso de encaminhamento de log personalizado - Amazon Elastic Container Service

Uso de encaminhamento de log personalizado

É possível usar o FireLens para Amazon ECS para usar parâmetros de definição de tarefa para encaminhar logs para um serviço da AWS ou um destino da AWS Partner Network (APN) para o armazenamento e a análise de logs. O AWS Partner Network é uma comunidade global de parceiros que utiliza programas, experiência e recursos para criar, comercializar e vender ofertas aos clientes. Para obter mais informações, consulte AWS Partner. O FireLens funciona com o Fluentd e o Fluent Bit. Fornecemos a imagem da AWS for Fluent Bit, ou é possível usar sua própria imagem do Fluentd ou Fluent Bit.

Considerações

Considere o seguinte ao usar o FireLens para Amazon ECS:

  • Recomendamos adicionar my_service_ ao nome do contêiner de log para distinguir facilmente os nomes dos contêineres no console.

  • Por padrão, o Amazon ECS adiciona uma dependência de ordem inicial de contêiner entre os contêineres da aplicação e o contêiner do FireLens. Quando você especifica uma ordem de contêiner entre os contêineres da aplicação e o contêiner do FireLens, a ordem inicial padrão do contêiner é substituída.

  • O FireLens para Amazon ECS é compatível com tarefas hospedadas no AWS Fargate no Linux e no Amazon EC2 no Linux. Os contêineres do Windows não são compatíveis com o FireLens.

    Para obter informações sobre como configurar o log centralizado para contêineres do Windows, consulte Centralized logging for Windows containers on Amazon ECS using Fluent Bit (Logs centralizados para contêineres do Windows no Amazon ECS usando o FluentBit).

  • Há suporte para o FireLens para Amazon ECS nos modelos do AWS CloudFormation. Para obter mais informações, consulte AWS::ECS::TaskDefinition FirelensConfiguration no Guia do usuário do AWS CloudFormation

  • 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 o tráfego de entrada na porta 24224 no grupo de segurança que a tarefa usa. Para as 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.

  • Para tarefas que usam o modo de rede bridge, o contêiner com a configuração do FireLens deve ser iniciado antes que um contêiner de aplicativo que dependa dele seja iniciado. Para controlar a ordem inicial dos contêineres, use as condições de dependência na definição de tarefa. Para ter mais informações, consulte Dependência de contêiner.

    nota

    Se você usar parâmetros de condição de dependência em definições de contêiner com uma configuração do FireLens, verifique se cada contêiner tem um requisito de condição START ou HEALTHY.

  • Por padrão, o FireLens adiciona o nome de definição de cluster e o nome do recurso da Amazon (ARN) do cluster como chaves de metadados aos seus logs de contêiner stdout/stderr. O exemplo a seguir é do formato de metadados.

    "ecs_cluster": "cluster-name", "ecs_task_arn": "arn:aws:ecs:region:111122223333:task/cluster-name/f2ad7dba413f45ddb4EXAMPLE", "ecs_task_definition": "task-def-name:revision",

    Se não quiser os metadados nos seus logs, defina enable-ecs-log-metadata como falsena seção firelensConfiguration da definição de tarefa.

    "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"false", "config-file-type":"file", "config-file-value":"/extra.conf" }

Permissões obrigatórias do IAM

Para usar esse recurso, é necessário criar uma função do IAM para suas tarefas que forneça as permissões necessárias para usar todos os serviços da AWS necessários para as tarefas. Por exemplo, se um contêiner estiver encaminhando logs para o Firehose, a tarefa exigirá permissão para chamar a API firehose:PutRecordBatch. Para obter mais informações, consulte Adicionar e remover permissões de identidade do IAM no Guia do usuário do IAM.

A política do IAM do exemplo a seguir adiciona as permissões necessárias para encaminhar logs ao Firehose.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

O exemplo de política do IAM a seguir adiciona as permissões necessárias para o encaminhamento de logs ao Amazon CloudWatch Logs.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" }] }

A tarefa também pode exigir a função de execução de tarefa do Amazon ECS sob as seguintes condições. Para ter mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

  • Se a tarefa for hospedada no Fargate e você estiver extraindo imagens de contêiner do Amazon ECR ou fazendo referência a dados sigilosos do AWS Secrets Manager na sua configuração de log, deverá incluir a função do IAM de execução de tarefas.

  • Se você estiver especificando um arquivo de configuração personalizado hospedado no Amazon S3, sua função do IAM de execução de tarefas deverá incluir a permissão s3:GetObject para o arquivo de configuração e a permissão s3:GetBucketLocation no bucket do Amazon S3 no qual o arquivo está localizado. Para obter mais informações, consulte Especificação de permissões em uma política no Guia do usuário do Amazon Simple Storage Service.

    O exemplo de política do IAM a seguir adiciona as permissões necessárias para recuperar um arquivo do Amazon S3. Especifique o nome do bucket do Amazon S3 e o nome do arquivo de configuração.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

Limite do buffer do Fluentd

Ao criar uma definição de tarefa, você pode especificar o número de eventos que são armazenados em buffer na memória especificando o valor (em bytes) 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 houver throughput alto, porque o Docker pode ficar sem memória buffer e descartar mensagens de buffer para que ele possa adicionar novas mensagens. Os registros perdidos podem dificultar a solução de problemas. A definição do limite de buffer pode ajudar a evitar esse problema.

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

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "my_service_log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "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" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

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 1 MiB.

  • Os valores válidos são 0 e 536870912 (512 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, além do limite de buffer de memória. A quantidade total de memória buffer especificada deve ser menor que 536870912 (512MiB) quando você não especificar os valores memory e memoryReservation do contêiner. Mais especificamente, você pode ter um contêiner de aplicação com o driver de log awsfirelens e a opção log-driver-buffer-limit definida como 300 MiB. No entanto, você não terá permissão para executar tarefas se tiver mais de dois contêineres com o log-driver-buffer-limit definido como 300 MiB (300 MiB * 2 > 512 MiB).

Uso de bibliotecas de logger do Fluent ou Log4j sobre TCP

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.

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.

Tópicos