Cover do episódio 143: O que é observabilidade — e como aprendi a diferença de monitoramento
#14311 de outubro, 20213 min leituraInfra que Aprendi na PráticaS5 · 2020–2021

O que é observabilidade — e como aprendi a diferença de monitoramento

Em 2021 a diferença entre monitoramento e observabilidade ficou clara num incidente de produção. Monitoramento te diz que algo está errado. Observabilidade te diz por quê.

ObservabilidadeCloudWatchMonitoringSRE

Incidente de produção às 14h uma terça-feira.

Alerta de CloudWatch disparou: latência de API acima de 3 segundos. Página de status: tudo verde. Erros: zero. CPU: 30%. Memória: 60%.

Sistema "saudável" pelos dashboards. Mas lento.

Passei uma hora olhando para gráficos que não me diziam nada. O sistema estava operacional — simplesmente devagar. Por quê?


Monitoramento te diz que algo está fora do normal. Observabilidade te diz por que.

A diferença prática:

Monitoramento = alertas em métricas predefinidas. CPU > 80%. Erro rate > 1%. Latência > 2s. Você define o que medir antes do incidente.

Observabilidade = capacidade de fazer perguntas que você não sabia que ia precisar fazer. "Por que a requisição para /api/leads/sync está demorando 4x mais do que as outras?" Essa pergunta não estava no dashboard.


O que eu não tinha em 2021: tracing distribuído (uma requisição passava por 3 serviços — eu tinha latência total, mas não sabia qual serviço estava lento), logs estruturados (meus logs eram strings — "Processing request for user 123" — impossível filtrar por user_id, agregar, correlacionar), e correlação (métrica mostrava latência alta, mas não conseguia ir da métrica para o log da requisição específica).


O incidente de terça foi resolvido quando um colega mostrou como ler as traces no X-Ray (serviço de tracing da AWS).

POST /api/leads/sync → 4.2s total
  → validate_payload → 0.02s
  → fetch_existing_leads → 3.8s  ← aqui
  → sync_to_crm → 0.3s

A query de busca de leads existentes estava demorando 3.8 segundos. Com 30 segundos de investigação no trace, tinha a resposta que levou uma hora nos dashboards.

A query estava sem índice em um campo que virou filtro 3 sprints antes. Ninguém tinha medido o impacto até a tabela crescer o suficiente para ficar lenta.


O que implementei depois:

Logs estruturados (JSON em vez de strings):

logger.info("request processed", extra={
    "user_id": user_id,
    "endpoint": "/api/leads/sync",
    "duration_ms": elapsed_ms,
    "lead_count": len(leads)
})

Trace IDs correlacionados entre métricas e logs — toda requisição tem um ID único que aparece no log, na métrica, e no trace.

E o mais importante: alarmes não só em "está errado" mas em "está mudando de padrão". Latência que sobe gradualmente não dispara alarme de threshold absoluto — mas dispara alarme de anomalia.


Observabilidade não é sobre ter mais dashboards. É sobre ter a capacidade de responder perguntas que você não sabia que ia precisar fazer.

Sistema com boa observabilidade: você está investigando um incidente em minutos. Sistema sem: você está olhando para gráficos que não falam entre si, sem saber por onde começar.