Diagnostique um Incidente com Logs e Métricas

AWSBeginner
Pratique Agora

Introdução

Pedidos válidos falham enquanto uma solicitação de inventário tem sucesso. Você comparará métricas de aplicações, rastreará uma solicitação com falha nos logs, corrigirá uma pequena falha de configuração e confirmará a recuperação sem apagar o histórico de falhas.

Conclua primeiro Encontre uma Solicitação com Falha no CloudWatch Logs e Meça a Saúde da Aplicação com Métricas do CloudWatch. Este laboratório fornece sua própria aplicação e seu próprio incidente.

Relação com as certificações

Certificação Tarefa do exame Prática
CloudOps Engineer – Associate (SOA-C03) Tarefa 1.2 Diagnóstico de falhas de aplicação com logs e métricas.
Developer – Associate (DVA-C02) Tarefa 4.1 Diagnóstico de falhas de aplicação com logs e métricas.
DevOps Engineer – Professional (DOP-C02) Tarefa 5.3 Prática dos fundamentos: Diagnóstico de falhas de aplicação com logs e métricas.
Solutions Architect – Professional (SAP-C02) Tarefa 3.1 Prática dos fundamentos: Diagnóstico de falhas de aplicação com logs e métricas.
Data Engineer – Associate (DEA-C01) Tarefa 3.3 Prática dos fundamentos: Diagnóstico de falhas de aplicação com logs e métricas.

Visão geral do laboratório

Diagrama conceitual: métricas do CloudWatch comparam orders e inventory; os logs de solicitações apoiam o diagnóstico e a verificação da recuperação, mantendo o histórico de falhas.

Reproduza o Incidente e Compare uma Solicitação de Controle

Nesta etapa, você reproduzirá uma solicitação válida de pedido que falha inesperadamente. O serviço preparado de forma independente tem uma falha em sua configuração comum. Seus logs e métricas começam vazios, portanto as observações vêm de suas próprias solicitações.

cd /home/labex/project
curl -i -H 'Content-Type: application/json' -H 'X-Request-ID: o05-failure-1' -d '{"sku":"apple","quantity":1}' http://127.0.0.1:5050/orders
curl -i -H 'Content-Type: application/json' -H 'X-Request-ID: o05-failure-2' -d '{"sku":"apple","quantity":1}' http://127.0.0.1:5050/orders
curl -i -H 'Content-Type: application/json' -H 'X-Request-ID: o05-control' -d '{"sku":"apple","quantity":1}' http://127.0.0.1:5050/inventory

Espere duas respostas HTTP 503 stock_unavailable de orders e uma resposta HTTP 200 accepted de inventory para a mesma solicitação sintética válida de apple. A solicitação de controle sugere um problema específico de orders; ela não comprova que todo o sistema está saudável.

Use uma janela recente em UTC e as dimensões Application exatas para comparar as contagens de erros do servidor. Uma métrica resume a frequência, enquanto logs individuais podem explicar uma resposta específica.

START=$(date -u -d '15 minutes ago' +%Y-%m-%dT%H:%M:%SZ)
echo "$START"

Salve o horário final da janela de consulta em UTC:

END=$(date -u -d '1 minute' +%Y-%m-%dT%H:%M:%SZ)
echo "$END"
aws cloudwatch get-metric-statistics \
  --namespace LabEx/O05 \
  --metric-name Errors \
  --dimensions Name=Application,Value=orders \
  --start-time "$START" \
  --end-time "$END" \
  --period 60 \
  --statistics Sum
aws cloudwatch get-metric-statistics \
  --namespace LabEx/O05 \
  --metric-name Errors \
  --dimensions Name=Application,Value=inventory \
  --start-time "$START" \
  --end-time "$END" \
  --period 60 \
  --statistics Sum

Espere Sum 2 de orders e Sum 0 de inventory somando os intervalos retornados. Mantenha /labex/o05-reference inalterado.

Conecte a Contagem de Erros aos Logs de Solicitações

Nesta etapa, você conectará o sintoma resumido a solicitações concretas com falha. Consulte ERROR primeiro e, depois, o ID exato da solicitação. Uma expressão entre aspas corresponde ao token request_id completo; isso evita misturar solicitações com nomes semelhantes.

aws logs filter-log-events \
  --log-group-name /labex/o05-application \
  --filter-pattern ERROR \
  --query 'events[].{Time:timestamp,Message:message}'
aws logs filter-log-events \
  --log-group-name /labex/o05-application \
  --filter-pattern '"request_id=o05-failure-1"' \
  --query 'events[].message'

Ambas as falhas identificam application=orders, status 503 e o motivo stock_unavailable. As métricas e os logs abrangem as mesmas solicitações na janela recente. Inspecione as configurações da aplicação para localizar a incompatibilidade com a solicitação válida de apple.

cat app.json

accepted_sku é pear para orders. Inventory usa a configuração esperada apple de forma independente. Essa é uma pequena falha de configuração; substituir o serviço ou desabilitar a observabilidade ocultaria o sintoma sem corrigi-lo.

A solicitação que falhou pediu apple, mas a configuração de orders aceita pear. Essa diferença é uma explicação verificável para stock_unavailable; a solicitação saudável a inventory ajuda a delimitar o problema. A próxima etapa testa essa explicação alterando a configuração de orders e repetindo uma solicitação válida. A recuperação exige uma resposta bem-sucedida e seu novo registro correspondente, não apenas a edição da configuração.

Corrija a Configuração e Verifique a Recuperação

Nesta etapa, você alterará o SKU aceito e comprovará que a resposta de negócio se recupera enquanto a telemetria permanece habilitada. Substitua a configuração comum pela configuração corrigida.

cat > app.json <<'JSON'
{"logging": {"enabled": true, "group": "/labex/o05-application", "stream": "requests"}, "metrics": {"enabled": true, "namespace": "LabEx/O05"}, "accepted_sku": "apple"}
JSON
curl -i -H 'Content-Type: application/json' -H 'X-Request-ID: o05-recovered' -d '{"sku":"apple","quantity":1}' http://127.0.0.1:5050/orders
aws logs filter-log-events \
  --log-group-name /labex/o05-application \
  --filter-pattern '"request_id=o05-recovered"' \
  --query 'events[].message'

Espere HTTP 200 accepted e um log INFO para o mesmo ID de solicitação recuperada. As falhas históricas permanecem na janela. Uma solicitação saudável publica Errors=0, portanto o Sum acumulado de erros permanece 2, enquanto Requests aumenta para 3.

START=$(date -u -d '15 minutes ago' +%Y-%m-%dT%H:%M:%SZ)
echo "$START"

Salve o horário final da janela de consulta em UTC:

END=$(date -u -d '1 minute' +%Y-%m-%dT%H:%M:%SZ)
echo "$END"
aws cloudwatch get-metric-statistics \
  --namespace LabEx/O05 \
  --metric-name Errors \
  --dimensions Name=Application,Value=orders \
  --start-time "$START" \
  --end-time "$END" \
  --period 60 \
  --statistics Sum
aws cloudwatch get-metric-statistics \
  --namespace LabEx/O05 \
  --metric-name Requests \
  --dimensions Name=Application,Value=orders \
  --start-time "$START" \
  --end-time "$END" \
  --period 60 \
  --statistics Sum

O AWS View mostra séries reais das aplicações e logs de solicitações. Use o ID da solicitação recuperada para distinguir a nova resposta bem-sucedida do histórico de falhas mantido.

A janela de orders mantém as duas falhas anteriores após uma nova solicitação ter sucesso.

A solicitação corrigida tem sucesso enquanto as falhas históricas permanecem observáveis.

Pare a Telemetria e Remova o Grupo de Logs do Laboratório

Nesta etapa, você interromperá a instrumentação e removerá apenas o grupo de logs do incidente. As métricas existentes permanecem conforme a retenção; não existe uma API de exclusão de métricas individuais.

cat > app.json <<'JSON'
{"logging": {"enabled": false, "group": "/labex/o05-application", "stream": "requests"}, "metrics": {"enabled": false, "namespace": "LabEx/O05"}, "accepted_sku": "apple"}
JSON
aws logs delete-log-group --log-group-name /labex/o05-application
aws logs describe-log-groups --query 'logGroups[].logGroupName'
aws logs get-log-events \
  --log-group-name /labex/o05-reference \
  --log-stream-name platform \
  --query 'events[].message'

Espere apenas /labex/o05-reference e sua mensagem original INFO platform reference keep unchanged. Um inventário obtido com sucesso verifica a exclusão direcionada; consultas com falha não comprovariam a limpeza.

Resumo

Você reproduziu um incidente com uma solicitação de controle, conectou contagens de métricas a logs de solicitações, corrigiu uma configuração da aplicação, verificou uma nova resposta bem-sucedida e preservou as evidências históricas até a limpeza direcionada.

Para aprofundar o tema, consulte a documentação da AWS: Identidade de métricas, dimensões e estatísticas; Filtrar eventos de log por termos e frases exatas.