Por que meus logs de contêiner do Amazon ECS não são entregues ao Amazon CloudWatch Logs?

Data da última atualização: 09/03/2022

Não consigo encontrar os logs de contêiner da tarefa do Amazon Elastic Container Service (Amazon ECS) no Amazon CloudWatch Logs.

Breve descrição

Seus logs de contêiner do Amazon ECS não são entregues ao CloudWatch Logs devido a um ou mais dos seguintes motivos:

  • O driver de log awslogs não está configurado corretamente nas definições de tarefas do Amazon ECS.
  • A função do AWS Identity and Access Management (IAM) não tem as permissões necessárias.
  • Há problemas com sua configuração de rede.
  • O nível de log do contêiner não está configurado corretamente.

Resolução

O driver de log awslogs não está configurado corretamente

  • Para enviar as informações de log do contêiner para o CloudWatch Logs, é necessário configurar os contêineres em suas tarefas corretamente. Certifique-se de ter configurado o parâmetro logConfiguration corretamente aodefinir os parâmetros para o nosso contêiner. Se sua definição de tarefa do Amazon ECS envolver vários contêineres, será necessário configurar esse parâmetro para cada contêiner.
  • Certifique-se de ter adicionado odriver de log awslogs ao parâmetrologConfiguration na definição da tarefa.
  • Para o tipo de execução do Amazon Elastic Compute Cloud (Amazon EC2), execute estas verificações adicionais:
    • Certifique-se de que sua instância de contêiner do Amazon ECS inclua pelo menos a versão 1.9.0 do atendente de contêiner. Para obter informações sobre como verificar a versão do agente e atualizar para a versão mais recente, consulteAtualização do atendente de contêiner do Amazon ECS.
    • Se você não estiver usando a AMI otimizada para o Amazon ECS para suas instâncias de contêiner, certifique-se de que o driver de log awslogs esteja especificado na instância do contêiner ao iniciar o atendente usando a seguinte variável de ambiente. Para obter mais informações, consulte Instalando o atendente de contêiner do Amazon ECS.
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

A função do IAM não tem as permissões necessárias

  • Certifique-se de que a função do IAM para sua instância de contêiner do Amazon ECS tenha as permissões logs:CreateLogStream e logs:PutLogEvents.
  • Para o tipo de execução do Fargate, use a função do IAM de execução de tarefas do Amazon ECS com as permissões logs:CreateLogStream elogs:PutLogEvents. Para obter mais informações, consulte aFunção do IAM de execução de tarefas do Amazon ECS.
  • Para o tipo de execução do Amazon EC2, verifique o seguinte:
    • Se você não estiver usando a função do IAM de execução de tarefas do Amazon ECS na definição da tarefa, certifique-se de que as permissões logs:CreateLogStream e logs:PutLogEvents sejam concedidas na função do IAM usada pela instância de contêiner.
    • Se você estiver usando a função do IAM de execução de tarefas do Amazon ECS, verifique se o valor do parâmetro do atendente de contêiner ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE está definido como true.
      Observação: ao usar a AMI otimizada para Amazon ECS com a versão 1.16.0 -1 ou posterior do pacote ecs-init, o valor padrão desse parâmetro é true. No Windows, o valor padrão desse parâmetro é false. Para obter mais informações, consulte Configuração do atendente de contêiner do Amazon ECS.

Há problemas com sua configuração de rede

Se sua nuvem privada virtual da Amazon (Amazon VPC) não tiver um gateway da Internet e suas tarefas usarem o driver de log awslogs para enviar informações de log para o CloudWatch Logs, em seguida, certifique-se de ter criado um endpoint da Amazon VPC de interface para o CloudWatch Logs. Para obter mais informações, consulte Usando o CloudWatch Logs com endpoints da VPC de interface.

O nível de log do contêiner não está configurado corretamente

O driver de log awslogs simplesmente passa os logs de contêiner que são os fluxos de E/S STDOUT e STDERR do Docker para o CloudWatch Logs. Portanto, verifique se a aplicação envia os logs para fluxos de E/S STDOUT e STDERR. Certifique-se de definir o nível de log correto para sua aplicação durante a construção do contêiner. Dependendo de sua aplicação, é possível definir o nível de log por meio de uma variável de ambiente ou um arquivo de configuração.