Observabilidade aplicada ponta a ponta (da teoria ao incidente)¶
Objetivo: sair do “tenho ferramentas instaladas” para “consigo detectar, diagnosticar, mitigar e aprender com incidentes reais”.
1) Fundamentos operacionais: SLI, SLO e SLA¶
Definições rápidas¶
- SLI (Service Level Indicator): métrica objetiva que mede comportamento percebido pelo usuário.
- SLO (Service Level Objective): meta interna para um SLI em uma janela de tempo.
- SLA (Service Level Agreement): compromisso contratual com cliente (normalmente com multa/crédito).
Como escolher bons SLI¶
Um SLI bom deve ser:
- Orientado ao usuário (não só CPU/memória)
- Mensurável e reproduzível
- Aderente ao caminho crítico (jornada de negócio)
- Estável ao longo do tempo (evitar redefinir toda semana)
Exemplos reais por tipo de sistema¶
API síncrona¶
- Disponibilidade:
% de requests 2xx/3xxsobre total válido. - Latência:
p95ep99por endpoint crítico (ex.: checkout). - Qualidade funcional:
% de respostas semanticamente corretas(ex.: sem fallback inválido).
Pipeline assíncrono¶
- Freshness: atraso entre evento produzido e consumido.
- Durabilidade:
% de mensagens processadas sem perda. - Backlog saudável: tamanho/fila dentro de limite operacional.
Produto com front-end¶
- Web Vitals: LCP/INP/CLS por região/dispositivo.
- Taxa de erro JS: erros por sessão.
- Disponibilidade de jornada:
% de checkouts completos.
Exemplo completo (e-commerce)¶
- SLI 1 (latência checkout): p95 de
POST /checkout. - SLO 1: p95 < 400 ms em 28 dias.
- SLI 2 (erro checkout): taxa de erro 5xx em
POST /checkout. - SLO 2: erro 5xx < 0,5% em 28 dias.
- SLA externo: disponibilidade mensal de 99,9%.
Error budget (a peça que geralmente falta)¶
Se seu SLO de disponibilidade é 99,9% em 30 dias, o orçamento de erro é 0,1%:
- 30 dias ≈ 43.200 min
- 0,1% de indisponibilidade ≈ 43,2 min/mês
Uso prático do error budget:
- Budget saudável → pode acelerar releases.
- Budget em queima rápida → priorizar confiabilidade, congelar mudanças arriscadas.
2) Estratégia de alertas (evitando alert fatigue)¶
Princípios¶
- Alerta é para ação humana (se ninguém vai agir, não deve alertar).
- Página (pager) só para impacto real ao usuário.
- Sintoma > causa para detecção inicial (ex.: alta latência percebida).
- Poucos alertas, claros e roteáveis por owner.
Taxonomia recomendada¶
- P1 / page imediato: indisponibilidade ou degradação grave de jornada crítica.
- P2 / urgente horário comercial: degradação relevante sem parada total.
- P3 / backlog: anomalias sem impacto perceptível.
Modelo de alertas multi-janela (burn rate)¶
Combine alertas rápidos + lentos para reduzir ruído:
- Rápido: janela curta (5m) para detectar regressão abrupta.
- Lento: janela longa (1h ou 6h) para detectar degradação sustentada.
Exemplo (conceitual):
- SLO erro 0,5% (budget de 0,5%)
- Alerta crítico se:
- erro > 5% por 5 min e
- erro > 1% por 1h
Assim, você evita acordar time por “espinho” transitório.
Checklist anti-fatigue¶
- Deduplicação e agrupamento por serviço/impacto.
- Supressão durante manutenção planejada.
- Enriquecimento automático no alerta:
- dashboard
- runbook
- versão/deploy recente
- owner/on-call
- Revisão mensal dos alertas:
- quais acionaram sem incidente?
- quais incidentes não geraram alerta?
Fluxo de decisão (Mermaid)¶
flowchart TD
A[Métrica fora do normal] --> B{Impacta usuário agora?}
B -- Sim --> C[Page on-call]
B -- Não --> D{Precisa ação humana hoje?}
D -- Sim --> E[Alerta P2]
D -- Não --> F[Ticket/observação]
C --> G[Runbook + contexto automático]
E --> G
3) Runbook orientado por métricas, logs e traces¶
Estrutura mínima de runbook¶
- Objetivo e escopo (qual serviço/jornada cobre)
- SLIs afetados (latência, erro, saturação, backlog)
- Passos de triagem (5-15 min)
- Hipóteses comuns + testes rápidos
- Mitigação segura (rollback, feature flag, rate limit)
- Critérios de escalonamento
- Validação de recuperação
- Pós-incidente (postmortem e ações preventivas)
Método de investigação por sinais¶
- Métricas dizem o que degradou e quando.
- Logs explicam o que aconteceu (erros/contexto).
- Traces mostram onde ocorreu a latência/erro na cadeia distribuída.
Sequência operacional recomendada¶
1) Detectar (alerta por SLO)
2) Delimitar impacto (quais clientes/regiões/endpoints)
3) Correlacionar janela temporal (deploy, tráfego, dependência)
4) Abrir trace representativo (p95/p99)
5) Pivotar para logs do span/trace_id
6) Confirmar hipótese com métrica de suporte
7) Mitigar e medir recuperação
8) Registrar timeline + aprendizados
Runbook template (copiar e adaptar)¶
# Runbook — [SERVIÇO] — [SINTOMA]
## Gatilho
- Alerta: [nome do alerta]
- SLO afetado: [latência/erro/disponibilidade]
## Triage inicial (até 10 min)
- Ver dashboard: [link]
- Confirmar impacto: [endpoint, região, % usuários]
- Ver mudanças recentes: [deploy, feature flag, infra]
## Hipóteses e validação
1. Hipótese A:
- Evidência esperada em métricas:
- Query/logs:
- Trace esperado:
2. Hipótese B:
...
## Mitigação
- Opção 1 (baixo risco):
- Opção 2 (rollback):
- Critério para escalonar:
## Recuperação
- SLI voltou ao alvo por [X min]
- Erro/latência estabilizou
## Pós-incidente
- Causa raiz:
- Ação corretiva:
- Ação preventiva:
- Dono + prazo:
4) Caso prático: “latência alta” → hipóteses → diagnóstico por sinais¶
Cenário¶
Alerta dispara para POST /checkout:
- p95 saiu de 280 ms para 1,4 s
- erro 5xx subiu de 0,2% para 1,1%
- início às 14:05, 10 min após deploy
Hipóteses iniciais (priorizadas)¶
- Regressão de aplicação após deploy.
- Lentidão no banco (query sem índice, lock, pool esgotado).
- Dependência externa degradada (gateway de pagamento).
- Saturação de recursos (CPU/memória/thread pool).
- Mudança de tráfego (pico regional/campanha).
Diagnóstico guiado¶
Passo 1 — Métricas¶
- Quebrou por endpoint, região e versão.
- Verificar correlação com deploy e aumento de RPS.
- Observar sinais de saturação:
- CPU throttling
- conexões de DB em uso
- fila/retries
Resultado hipotético: versão v2026.03.12 concentra piora + pool de DB no limite.
Passo 2 — Traces¶
- Filtrar traces lentos de
POST /checkout. - Identificar spans dominantes.
- Comparar
v2026.03.12vs versão anterior.
Resultado hipotético: span SELECT cart_items ... subiu de 40 ms para 900 ms.
Passo 3 — Logs¶
- Buscar por
trace_iddos traces lentos. - Procurar timeout, lock wait, retry em cascata.
Resultado hipotético: timeout acquiring DB connection + lock wait timeout exceeded.
Passo 4 — Conclusão e mitigação¶
- Causa provável: nova consulta sem índice + contenção de lock.
- Mitigação imediata:
- rollback da versão
- reduzir concorrência do endpoint (rate limit/controlado)
- Correção definitiva:
- criar índice adequado
- revisar plano de execução
- ajustar pool e timeout com teste de carga
Árvore de diagnóstico (Mermaid)¶
flowchart TD
A[Latência p95 alta] --> B{Erro 5xx também subiu?}
B -- Sim --> C[Checar saturação + timeouts]
B -- Não --> D[Checar gargalo silencioso de performance]
C --> E{Mudança recente?}
D --> E
E -- Deploy --> F[Comparar versão antiga vs nova]
E -- Sem deploy --> G[Checar tráfego/dependências]
F --> H[Traces: qual span domina latência?]
G --> H
H --> I{Span de DB?}
I -- Sim --> J[Logs de lock/timeout/pool]
I -- Não --> K[Span externo/rede/cache]
J --> L[Mitigar: rollback + controle de carga]
K --> L
5) Tópicos que complementam a trilha (e costumam faltar)¶
5.1 Observabilidade orientada a domínio¶
- Defina SLIs por jornada de negócio (login, checkout, emissão, pagamento).
- Tenha dashboards por:
- executivo (saúde do produto)
- operação (SRE/on-call)
- time de serviço (deep dive)
5.2 Boas práticas de instrumentação¶
- Padronizar atributos/chaves (
service.name,env,region,version). - Propagar
trace_idem logs de aplicação. - Evitar cardinalidade explosiva (IDs de usuário em labels).
5.3 Governança operacional¶
- Owner claro por serviço e por alerta.
- Escala de on-call com handoff documentado.
- Reunião de revisão semanal de incidentes e SLO.
5.4 Pós-incidente de verdade¶
- Postmortem sem culpa (blameless).
- Linha do tempo factual.
- Ações com dono, prazo e validação de eficácia.
- Atualizar alerta e runbook para evitar recorrência.
5.5 Maturidade (níveis)¶
Nível 0: Ferramentas instaladas, sem SLO
Nível 1: Dashboards e alertas básicos
Nível 2: SLO + error budget + on-call
Nível 3: Runbooks consistentes + correlação métrica/log/trace
Nível 4: Engenharia de confiabilidade proativa (capacity, chaos, game days)
6) Plano de adoção em 30 dias¶
- Semana 1: definir 2 jornadas críticas e 2 SLIs por jornada.
- Semana 2: publicar SLOs, dashboards e alertas multi-janela.
- Semana 3: criar 1 runbook completo para “latência alta”.
- Semana 4: simular incidente (game day), medir MTTD/MTTR e ajustar.
Métricas de evolução do próprio processo¶
- MTTD (tempo para detectar)
- MTTR (tempo para recuperar)
- % alertas acionáveis
- % incidentes com runbook atualizado
- Recorrência de incidentes por causa raiz
7) Referências internas úteis deste repositório¶
- Trilha geral de observabilidade:
02 - Guias/Observability/00 - Trilha de estudos.md - Prometheus (métricas):
02 - Guias/Observability/Prometheus/Introdução.md - OpenTelemetry (instrumentação):
02 - Guias/Observability/OpenTelemetry/OpenTelemetry.md - Jaeger (traces):
02 - Guias/Observability/Jaeger/Jaeger.md - Loki (logs):
02 - Guias/Observability/Loki/Loki.md - Playbook de incidente correlato:
04 - Playbooks/Incidentes/Incidente em produção - API lenta e 5xx.md
Dica: use este documento como “espinha dorsal” e os demais como aprofundamento por ferramenta.