Introdução

Image description

A adoção do AWS Fargate como solução serveless para containers vem crescendo, principalmente entre times que buscam abstrair a complexidade de provisionamento de infraestrutura. No entanto, uma dúvida comum entre iniciantes e até profissionais experientes é: como visualizar os logs do containers em execução no Fargate?

Neste artigo, abordaremos de forma abragente:

  • Como funcionam os logs no Fargate

  • Configuração via console, CLI E Iac (com ESC Task Definition)

  • Boas práticas de logging para containers

  • Dicas de troubleshooting

📦 Logs no Fargate: Como funciona?

Image description

O Fargate captura automaticamente a saída padrão (stdout e stderr) dos containers e, se configurando corretamente, envia para Amazon CloudWatch Logs.

Para isso, você precisa definir na sua task definition o uso do log driver awslogs. Esse drive envia os logs para um grupo de logs no CloudWatch que você especificar.

📋 Exemplo de configuração (JSON)

"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/meu-servico",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
}

⚙️ Configurando Logs no Fargate

Image description

✅ 1. Via Console

  1. Acesse o ECS Console.

  2. Crie ou edite uma Task Definition.

  3. Na seção do container, vá até Storage and Logging.

  4. Em Log configuration, selecione:

  • Log driver: awslogs

  • Log group: /ecs/nome-do-servico

  • Stream prefix: ecs

✅ 2. Via CLI
Você pode registrar uma task com logs configurados usando o comando:

aws ecs register-task-definition \
--family meu-servico \
--container-definitions file://container-def.json

Certifique-se de que o JSON inclua o logConfiguration conforme mostrado acima.

✅ 3. Via Terraform (Infraestrutura como Código)
hcl

container_definitions = jsonencode([
{
name = "app"
image = "meu-repo/app:latest"
logConfiguration = {
logDriver = "awslogs"
options = {
awslogs-group = "/ecs/meu-servico"
awslogs-region = "us-east-1"
awslogs-stream-prefix = "ecs"
}
}
}
])

🔍 Visualizando Logs no CloudWatch

Depois que sua task está rodado:

  1. Acesse o CloudWatch Logs.

  2. Encontre o grupo /ecs/meu-servico.

  3. Clique no stream correspondente (ecs/container-id) e veja a saída do container.

🔒 Permissões necessárias

A IAM Role atribuída a task precisa das permissões

{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}

⚠️ Recomenda-se restringir Resource ao ARN do grupo de logs.

🧠 Boas práticas para logging em containers

  • Use stdout/stderr: Evite gravar em arquivos locais. Use console.log, System.out, etc.

  • Formate logs em JSON: facilita a análise com CloudWatch Logs Insights ou ELK.

  • Implemente log levels: INFO, DEBUG, ERROR, etc.

  • Rotacione e expire os logs: configure retenção no CloudWatch para evitar custos desnecessários.

🛠️ Dicas de troubleshooting

Logs não aparecem?

→ Verifique se o grupo de logs existe, se a role tem as permissões certas e se o stream está sendo criado.

Permissões negadas?

→ Verifique a taskExecutionRole e se ela está associada corretamente à sua task definition.

Múltiplos containers?

→ Use awslogs-stream-prefix diferente para cada container ou container name no prefixo.

📈 Avançado: CloudWatch Logs Insights

Você pode escrever queries para analisar os logs:

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

✅ Conclusão

Visualizar logs no Fargate exige uma configuração explícita, mas é um processo simples e poderoso. Ao enviar os logs para o CloudWatch, você garante visibilidade sobre o comportamento dos containers em produção, além de possibilitar análises, alertas e integrações com outras ferramentas.

Se você está construindo aplicações com Fargate, não subestime o valor de uma boa estratégia de obervabilidade. Logging é so o começo.

Gostou do artigo? Me segue aqui no Dev.to e compartilha com alguém que também está explorando o Fargate na AWS. 🚀