View a markdown version of this page

Solução de problemas com Logs de ações do Amazon ECS - Amazon Elastic Container Service

Solução de problemas com Logs de ações do Amazon ECS

Logs de ações ajudam a diagnosticar problemas, fornecendo registros detalhados das operações iniciadas pelo serviço Amazon ECS. Cada entrada de log contém um carimbo de data/hora, nível de log, nome do evento e uma carga útil detalhada com contexto sobre o que aconteceu e o motivo. Este tópico trata de cenários comuns de solução de problemas e fornece consultas prontas para uso do CloudWatch Logs Insights.

Noções básicas sobre os níveis de log

Logs de ações usam três níveis de log para indicar a gravidade de cada evento:

INFO

Operações normais, como implantação iniciada, tarefa iniciada ou recurso provisionado. Esses eventos indicam que o Amazon ECS está executando as ações conforme o esperado.

WARN

Problemas não fatais que podem exigir atenção, como tentativas de repetição ou restrições de capacidade. O Amazon ECS continua avançando, mas a operação pode levar mais tempo do que o esperado.

ERROR

Falhas que exigem ação, como falha na implantação, erro de provisionamento ou falha na inicialização da tarefa. Analise esses eventos para identificar a causa raiz e tomar as medidas corretivas.

dica

Comece filtrando pelos níveis de log ERROR ou WARN a fim de identificar problemas rapidamente. Em seguida, expanda sua pesquisa para eventos INFO para obter mais contexto.

Depurar uma implantação de serviço com falha

Sintomas

A implantação parou em andamento ou foi revertida automaticamente.

O que procurar

Filtre em busca de logs ERROR em que eventName contém DEPLOYMENT. Verifique na carga útil detail o ARN da implantação, o motivo do status e a contagem de tarefas com falha.

O exemplo a seguir mostra uma falha de implantação em que nenhum candidato à reversão estava disponível:

{ "resourceArn": "arn:aws:ecs:us-east-1:111122223333:cluster/my-cluster", "actionSourceId": "service/my-cluster/my-service", "logLevel": "ERROR", "eventTimestamp": 1784573730986, "detail": { "statusReason": "No rollback candidate was found to run the rollback.", "serviceDeploymentArn": "arn:aws:ecs:us-east-1:111122223333:service-deployment/my-cluster/my-service/abc123def456", "status": "FAILED", "eventName": "SERVICE_DEPLOYMENT_ROLLBACK_FAILED" } }
Resolução

Verifique o campo detail.statusReason para identificar o motivo de falha das tarefas. Use a seguinte consulta do CloudWatch Logs Insights para encontrar todos os erros de implantação:

fields @timestamp, detail.statusReason | filter logLevel = "ERROR" and detail.deploymentArn like /my-cluster\/my-service/ | sort @timestamp desc | limit 20

Diagnosticar problemas de daemons gerenciados

Sintomas

O daemon não inicia nas instâncias ou a implantação do daemon travou.

O que procurar

Filtre os logs pelo ARN do daemon para encontrar eventos relacionados ao seu daemon. Também é possível filtrar por logLevel para restringir os resultados a avisos ou erros.

O exemplo a seguir mostra uma tarefa de daemon que falhou ao iniciar devido à memória insuficiente na instância de destino:

{ "timestamp": 1719500050000, "logLevel": "WARN", "account": "123456789012", "region": "us-east-1", "resourceArn": "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster", "actionSourceId": "arn:aws:ecs:us-east-1:123456789012:daemon/my-cluster/my-logging-daemon", "eventName": "DAEMON_TASK_START_IMPAIRED", "detail": { "statusReason": "RESOURCE:MEMORY - Unable to place daemon task on container instance: insufficient memory", "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/my-cluster/a1b2c3d4" } }
Resolução

Verifique se as instâncias de destino contêm recursos suficientes para executar a tarefa do daemon. Se as instâncias estiverem sendo drenadas, o daemon talvez não seja iniciado até que novas instâncias estejam disponíveis. Use a seguinte consulta para filtrar eventos de um daemon específico:

fields @timestamp, logLevel, detail.statusReason | filter actionSourceId like /my-logging-daemon/ | filter logLevel in ["ERROR", "WARN"] | sort @timestamp desc | limit 20

Sobre os motivos de parada de tarefas do daemon

Sintomas

As tarefas do daemon param inesperadamente.

O que procurar

Filtre em busca de logs WARN e ERROR que contenham detalhes da falha da tarefa do daemon. Os campos a seguir na carga útil de detail fornecem informações sobre o motivo da interrupção de uma tarefa de daemon:

detail.stopCode

Um código legível por máquina que categoriza o motivo da interrupção da tarefa.

detail.statusReason

Uma descrição compreensível para o usuário explicando por que a tarefa foi interrompida. Esse campo não está presente em todas as entradas de logs.

detail.containerStoppedReason

Contexto adicional sobre o contêiner específico que causou a interrupção da tarefa.

Para obter uma lista completa dos códigos de parada de tarefas e suas respectivas descrições, consulte Mensagens de erro de tarefa interrompida do Amazon ECS.

nota

Paradas esperadas de tarefas do daemon, como UserInitiated, são excluídas dos Logs de ações. Você só vê interrupções inesperadas ou relacionadas a erros em tarefas de daemons.

Consultas úteis do CloudWatch Logs Insights

Use as seguintes consultas do CloudWatch Logs Insights para investigar problemas comuns com os seus serviços do Amazon ECS.

Todos os erros na última hora

fields @timestamp, logLevel, eventName, detail.statusReason | filter logLevel = "ERROR" | sort @timestamp desc | limit 50
nota

O campo detail.statusReason não está presente em todas as entradas de logs. Se o campo estiver vazio em seus resultados, use eventName e outros campos na carga útil detail para o contexto.

Eventos para um serviço específico

fields @timestamp, logLevel, detail.statusReason | filter @message like /my-service/ | sort @timestamp desc | limit 50

Cronograma para uma implantação específica

fields @timestamp, logLevel, detail.statusReason | filter detail.deploymentArn like /my-cluster\/my-service\/abc123/ | sort @timestamp asc

Falhas de tarefas de daemon agrupadas por motivo

filter logLevel = "ERROR" and detail.stopCode != "" | stats count(*) as failureCount by detail.stopCode, detail.statusReason | sort failureCount desc | limit 20