Roteamento de logs personalizados - Amazon ECS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Roteamento de logs personalizados

Você pode usar o Amazon ECS FireLens para usar parâmetros de definição de tarefas para rotear registros para um AWS serviço ou destino AWS Partner Network (APN) para armazenamento e análise de registros. 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. FireLensfunciona com Fluentd Fluent Bit e. Fornecemos a imagem da AWS for Fluent Bit, ou é possível usar sua própria imagem do Fluentd ou Fluent Bit.

A criação de definições de tarefa do Amazon ECS com uma configuração do FireLens tem suporte usando os SDKs da AWS, AWS CLI e AWS Management Console.

Considerações

Considere o seguinte ao usar FireLens para o Amazon ECS:

  • 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 FirelensConfigurationo Guia AWS CloudFormation do usuário

  • FireLensescuta na porta24224, portanto, para garantir que o roteador de FireLens log não possa ser acessado fora da tarefa, você não deve permitir tráfego de entrada 24224 na porta do grupo de segurança que sua 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 bridge rede, o contêiner com a FireLens configuração deve ser iniciado antes que qualquer 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 obter mais informações, consulte Dependência de contêiner.

    nota

    Se você usar parâmetros de condição de dependência nas definições de contêiner com uma FireLens configuração, certifique-se de que cada contêiner tenha um requisito de HEALTHY condição START ou.

  • 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 roteando logs para o Kinesis Data 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 para o Kinesis Data Firehose.

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

O exemplo a seguir da política do IAM adiciona as permissões necessárias para rotear registros para o 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 obter 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 especificação do log-driver-buffer-limit.

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "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 FireLens para o 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 FireLens contêiner.

FLUENT_PORT

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

Você pode 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-golangem GitHub.

Tópicos