Você não pode consertar o que não consegue ver — nem operar no herói

Apostila completa de Observabilidade & SRE

Observabilidade é conseguir responder qualquer pergunta sobre o comportamento do sistema em produção sem fazer deploy de código novo. SRE é tratar operação como um problema de engenharia — com SLOs no lugar de "está no ar?", error budgets no lugar de brigas entre dev e ops, e postmortems sem culpa no lugar de caça ao culpado. Esta apostila vai dos três pilares (logs, métricas, traces) e do OpenTelemetry aos SLOs, ao on-call sustentável e à gestão de incidentes.

10 módulosOpenTelemetry · Prometheus · PromQLRED · USE · golden signalsSLO · error budget · burn rateBoxes de entrevistaExercícios com gabarito
MÓDULO 01 · BÁSICO

Observabilidade e SRE: o que são

Objetivo: distinguir observabilidade de monitoramento, entender o que a disciplina de SRE propõe, e por que as duas coisas andam juntas.

1.1 Monitoramento × observabilidade

Monitoramento (monitoring)Observabilidade
Coletar sinais predefinidos e alertar quando cruzam limiaresTer dados ricos o suficiente para responder perguntas que você não previu
Responde "known unknowns": "o disco vai encher?"Responde "unknown unknowns": "por que essas requisições de esse cliente em essa região estão lentas só depois do deploy de ontem?"
Dashboards e alertas fixosExploração ad-hoc: fatiar por qualquer dimensão, do agregado ao trace individual
💡 A definição de trabalho

Um sistema é observável se você consegue entender qualquer estado interno dele — inclusive estados novos, nunca vistos — apenas a partir dos seus outputs (telemetria), sem precisar fazer deploy de código novo para adicionar instrumentação. Monitoramento é um subconjunto: os alertas e dashboards que você já sabe que precisa. Observabilidade é a capacidade de investigar o inesperado.

1.2 O que é SRE

Site Reliability Engineering nasceu na Google (formalizado no livro de 2016) a partir de uma ideia: "o que acontece quando você pede a um engenheiro de software para projetar uma função de operações". Os princípios:

1.3 SRE × DevOps × Platform

💼 Mercado de trabalho

SRE e "Observability Engineer" são vagas de alta demanda e bem pagas. Perguntas de abertura: "Qual a diferença entre monitoramento e observabilidade?" (predefinido vs responder o inesperado sem redeploy), "O que é SRE e o que é um error budget?", "Por que 100% de disponibilidade é o alvo errado?". Demonstrar a mentalidade de "operação é engenharia" e de dados/SLO em vez de "está no ar?" é o que distingue.

✏️ Exercício 1 — Monitoramento ou observabilidade?

Classifique cada necessidade: (a) alertar quando a CPU passa de 85% por 10 min; (b) descobrir por que 3% das requisições de checkout começaram a dar timeout há 40 min; (c) um dashboard fixo de requisições/s por serviço; (d) investigar se a lentidão de ontem foi causada por um cliente específico fazendo queries pesadas.

Gabarito: (a) e (c) são monitoramento — sinais predefinidos, dashboards fixos. (b) e (d) exigem observabilidade — você não previu essas perguntas e precisa fatiar a telemetria por dimensões arbitrárias (endpoint, cliente, região, versão) e chegar até traces individuais, sem adicionar código novo. Um bom sistema tem os dois.

MÓDULO 02 · BÁSICO

Os pilares: logs, métricas, traces

Objetivo: entender o que cada tipo de telemetria responde bem, seus custos, o conceito de cardinalidade, e por que a fronteira entre eles está se dissolvendo.

2.1 Os três (mais um)

SinalO que éResponde bemCusto
MétricasNúmeros agregados ao longo do tempo (contadores, medidores, histogramas), com labels"O sistema está saudável agora? A tendência?" Alertas, dashboards, SLOsBarato e constante (agregado); explode com cardinalidade alta
LogsRegistros de eventos discretos, idealmente estruturados (JSON), com timestamp e contexto"O que exatamente aconteceu neste evento?" Auditoria, detalhe, errosCaro e cresce com o tráfego — costuma ser a maior linha da fatura de observabilidade
TracesA árvore de spans de uma requisição atravessando serviços"Onde o tempo foi gasto? Qual serviço na cadeia falhou?" Debugging distribuídoMédio; controlado por amostragem
Profiles (o "4º pilar")Amostragem contínua de CPU/memória/alocação por linha de código"Qual função está queimando CPU/memória em produção?"Baixo (amostragem)

2.2 Cardinalidade — o conceito que decide o custo

Cardinalidade = número de séries temporais distintas, dado pelas combinações únicas de labels. Uma métrica http_requests_total com labels method (5 valores), status (10), endpoint (50) = 2.500 séries. Adicione user_id (1 milhão) e você tem 2,5 bilhões de séries — o sistema de métricas colapsa.

⚠️ Nunca coloque IDs de alta cardinalidade em labels de métrica

user_id, request_id, trace_id, e-mail, URL completa com query string — em métricas, isso é "cardinality explosion" e derruba o Prometheus (ou multiplica a fatura de um vendor). Alta cardinalidade pertence a logs e traces, onde cada registro é individual. Métricas são para agregados por dimensões de baixa cardinalidade.

2.3 Structured logging

// RUIM: log de texto livre — impossível de consultar bem
[2026-08-30 14:00:01] ERROR user ana@x.com failed to pay order o1 - card declined

// BOM: log estruturado — filtrável, agregável, correlacionável
{
  "ts": "2026-08-30T14:00:01Z", "level": "error", "msg": "pagamento recusado",
  "user_id": "u_123", "order_id": "o1", "reason": "card_declined",
  "service": "payments", "trace_id": "abc123", "span_id": "def456"
}

Sempre inclua trace_id e span_id nos logs — é o que liga log ↔ trace ↔ métrica (correlação).

2.4 A convergência

Os três pilares como silos separados (ferramenta de log, ferramenta de métrica, ferramenta de trace) geram troca de contexto constante durante um incidente. A tendência: telemetria unificada com o mesmo contexto (labels/atributos consistentes via semantic conventions), correlacionada, e frequentemente derivando métricas e logs a partir de eventos ricos ("wide events"). O OpenTelemetry (Módulo 4) é o padrão que viabiliza isso.

💼 Mercado de trabalho

Perguntas: "O que cada um dos três pilares responde melhor?", "O que é cardinalidade e por que ela importa?" (custo de métricas; IDs vão em logs/traces, não em labels), "Por que structured logging?" (consultável, agregável, correlacionável), "Como você correlaciona um log a um trace?" (trace_id no log).

✏️ Exercício 2 — Onde vai cada dado?

Para cada informação, diga se pertence a métrica (com que labels), log ou trace: (a) latência p99 do endpoint /checkout; (b) o corpo exato da requisição que causou um erro 500; (c) quanto tempo a chamada ao serviço de estoque levou dentro de uma requisição de checkout; (d) taxa de erros por versão de deploy; (e) o user_id de quem sofreu o erro.

Gabarito: (a) Métrica — histograma de latência com labels endpoint, method, status (baixa cardinalidade). (b) Log — evento individual com o payload (cuidado com PII). (c) Trace — um span "chamada estoque" filho do span de checkout. (d) Métrica — contador de erros com label version (deploys são baixa cardinalidade). (e) Log e/ou atributo de span — nunca label de métrica.

MÓDULO 03 · INTERMEDIÁRIO

Métricas: Prometheus, RED, USE e os golden signals

Objetivo: os tipos de métrica, o modelo do Prometheus e PromQL básico, e os três métodos que dizem o que medir em qualquer sistema.

3.1 Tipos de métrica

TipoO que éExemplo
CounterSó cresce (ou zera no restart); você olha a taxahttp_requests_total, errors_total
GaugeSobe e desce; um valor instantâneomemory_used_bytes, queue_depth, temperature
HistogramDistribuição em buckets predefinidos; permite calcular percentis (aproximados) no servidorhttp_request_duration_seconds
SummaryPercentis calculados no cliente; não agregável entre instâncias — prefira histogram(uso decrescente)

3.2 O modelo Prometheus

# PromQL essencial
rate(http_requests_total[5m])                          # req/s nos últimos 5 min
sum by (endpoint) (rate(http_requests_total[5m]))      # agregado por endpoint

# taxa de erro (%)
sum(rate(http_requests_total{status=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

# latência p95 a partir do histograma
histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

3.3 RED, USE e os Golden Signals — o que medir

MétodoPara quêMétricas
RED (Weave)Serviços / o que atende requisiçõesRate (req/s), Errors (% que falham), Duration (distribuição de latência)
USE (Brendan Gregg)Recursos (CPU, disco, memória, rede, pools)Utilization (% ocupado), Saturation (fila de trabalho pendente), Errors
Four Golden Signals (Google SRE)Sistemas voltados ao usuárioLatência, Tráfego, Erros, Saturação
💡 Como usar na prática

Para cada serviço, tenha um painel RED (taxa, erros, latência p50/p95/p99). Para cada recurso (banco, fila, cluster), tenha USE. Alerte com base em sintomas voltados ao usuário (erros e latência do RED, ou queima de SLO — Módulo 6), não em causas de infra ("CPU a 90%" nem sempre é problema). Latência: sempre percentis (p50, p95, p99), nunca média — a média esconde a cauda que dói.

3.4 Boas práticas de métrica

💼 Mercado de trabalho

Perguntas: "Diferença entre counter, gauge e histogram", "Como você calcula p95 de latência no Prometheus?" (histogram_quantile sobre o rate dos buckets), "O que são RED e USE e quando usar cada um?", "Por que percentis e não média para latência?", "Por que Prometheus é pull e não push?" (health check de graça, controle de scraping, sem cliente sobrecarregar o servidor).

✏️ Exercício 3 — Monte a instrumentação

Um serviço novo processa pagamentos de forma síncrona e chama uma API externa de antifraude. Que métricas RED e USE você instrumenta, e qual você usaria para alertar?

Gabarito: RED do serviço: rate de requisições de pagamento por status; errors (% de 5xx e de pagamentos recusados por erro técnico, separado de recusa de negócio); duration (histograma, p50/p95/p99). RED da dependência antifraude: rate/errors/duration das chamadas a ela (é o gargalo provável). USE: saturação da fila/pool de conexões HTTP para o antifraude; utilização de CPU e do pool de conexões do banco. Alertar: por sintoma — taxa de erro do serviço acima de X% por N min, e p99 acima do SLO; ou, melhor, por queima de error budget (Módulo 6). Não alertar em "CPU alta" isolada.

MÓDULO 04 · INTERMEDIÁRIO

Tracing distribuído e OpenTelemetry

Objetivo: spans e propagação de contexto, o padrão OpenTelemetry (API, SDK, Collector), estratégias de amostragem, e como o trace vira ferramenta de debug.

4.1 O modelo de trace

trace (id = abc123)  ── uma requisição do usuário, ponta a ponta
 └─ span: GET /checkout          [gateway]        0──────────────────────520ms
     ├─ span: auth               [auth-svc]       5──25ms
     ├─ span: carregar carrinho  [cart-svc]       30──90ms
     │   └─ span: SELECT ...     [postgres]       35──85ms
     ├─ span: antifraude         [fraud-svc]      95──400ms   ← o gargalo
     └─ span: criar pedido       [order-svc]      410──515ms
         └─ span: INSERT ...     [postgres]       420──510ms

4.2 OpenTelemetry (OTel) — o padrão

OpenTelemetry (projeto CNCF, resultado da fusão de OpenTracing + OpenCensus) é o padrão vendor-neutral para gerar telemetria (traces, métricas, logs). Componentes:

ParteFunção
APIO que seu código chama para criar spans/métricas (estável, sem dependência de vendor)
SDKA implementação: sampling, processamento em lote, exportação
Instrumentação automáticaBibliotecas que instrumentam frameworks conhecidos (HTTP, gRPC, SQL, Kafka) sem você escrever spans — em algumas linguagens (Java, .NET, Node, Python) via agente, sem tocar o código
Semantic ConventionsNomes padronizados de atributos (http.request.method, db.system, gen_ai.request.model…) — o que torna a telemetria de times/linguagens diferentes comparável
OTLPO protocolo de exportação (gRPC/HTTP)
CollectorUm proxy/pipeline: recebe (OTLP e outros), processa (batch, filtro, redação de PII, tail sampling, enriquecimento) e exporta para um ou vários backends. Desacopla a app do vendor
💡 Por que OTel importa

Antes do OTel, mudar de vendor de observabilidade significava re-instrumentar tudo. Com OTel, a instrumentação é padrão e portável; você troca o destino no Collector. É por isso que praticamente todo vendor (Datadog, Grafana, Honeycomb, New Relic, Dynatrace) e todo backend open source (Jaeger, Tempo, Prometheus) fala OTLP hoje. Instrumente com OTel, não com o SDK proprietário.

4.3 Amostragem (sampling)

EstratégiaComoTrade-off
Head samplingDecide no início do trace (ex.: "guardar 5%"), de forma consistente por traceSimples, barato; mas pode descartar justamente o trace com erro/lentidão
Tail samplingDecide depois que o trace terminou, com base no resultado (guardar 100% dos que têm erro ou p99, 1% dos normais)Guarda o que interessa; exige buffer de todos os spans no Collector até o trace fechar (mais recursos)

4.4 O trace como ferramenta de debug

💼 Mercado de trabalho

Perguntas: "O que é propagação de contexto e o que acontece sem ela?" (spans soltos, sem trace), "O que é OpenTelemetry e quais suas partes?" (API/SDK/auto-instrumentação/semantic conventions/OTLP/Collector), "Head vs tail sampling" (tail guarda erros/lentidão mas custa mais recursos), "Como você usaria um trace para investigar latência?". OTel é praticamente obrigatório em vagas de observabilidade hoje.

✏️ Exercício 4 — Desenhe a coleta

Você tem 30 microserviços em 3 linguagens, hoje cada um manda telemetria direto para um vendor caro. Quer: reduzir custo, poder trocar de vendor, redigir PII, e guardar 100% dos traces com erro. Desenhe a arquitetura de coleta.

Gabarito: (1) Instrumentar todos com OpenTelemetry (auto-instrumentação onde possível), exportando via OTLP para um OTel Collector local (sidecar ou DaemonSet) → um Collector de gateway central. (2) No gateway: processadores de batch, redação de atributos (remover/mascarar PII), tail sampling (100% dos traces com erro ou acima do p99, ~1–5% dos normais), e filtro de ruído. (3) Exportar: métricas → Prometheus/Mimir; traces → um backend próprio (Tempo/Jaeger) e/ou o vendor com volume reduzido; logs → Loki. Trocar de vendor = mudar um exportador no Collector, sem tocar as apps. Economia vem do sampling + agregação no Collector antes de sair.

MÓDULO 05 · INTERMEDIÁRIO

Logs, custo e o OTel Collector como hub

Objetivo: tratar logs com disciplina — níveis, correlação, e sobretudo custo, a linha que mais cresce em observabilidade — e usar o Collector como ponto central de controle.

5.1 Níveis e disciplina

5.2 O custo dos logs

⚠️ Logs são quase sempre a maior fatura de observabilidade

Ingestão + indexação + retenção de logs, num vendor, custa por GB e escala linearmente com o tráfego. Um serviço chatty (log por requisição, stack traces, debug esquecido ligado) pode gerar terabytes por dia. Controles: (1) nível certo em produção (INFO/WARN/ERROR); (2) amostragem de logs de alto volume e baixo valor (ex.: 1 de cada 100 logs de acesso 200 OK, 100% dos erros); (3) retenção por criticidade (7 dias hot, 90 dias em storage barato, arquivo depois); (4) derivar métricas de logs em vez de guardar todos ("quantos 500 por minuto" é uma métrica, não 1M de logs); (5) redação e drop no Collector antes de sair.

5.3 Backends de log

OpçãoNota
Grafana LokiIndexa só labels (não o conteúdo) → barato; consulta por label + grep. Casa com Prometheus/Grafana
Elastic (ELK / OpenSearch)Índice full-text poderoso; caro em armazenamento e operação
Vendors (Datadog, Splunk, New Relic…)Recursos e integração; custo por GB pode escalar rápido
ClickHouse (via ferramentas como SigNoz)Colunar, barato em escala, cada vez mais usado para logs+traces+métricas juntos

5.4 O Collector como ponto de controle

# pipeline conceitual do OTel Collector
receivers:  [otlp, filelog, prometheus, kafka]
processors: [
  batch,                     # eficiência
  memory_limiter,            # não estourar
  attributes/redact-pii,     # remover email, cpf, tokens
  filter/drop-health-checks, # cortar ruído
  tail_sampling,             # só traces interessantes
  transform/derive-metrics,  # log de erro -> contador
  resourcedetection          # enriquecer com região, cluster, versão
]
exporters:  [prometheusremotewrite, otlp/tempo, loki, otlp/vendor]

Ter o Collector no meio significa que políticas de custo, privacidade e roteamento vivem num lugar central, versionado como código — não espalhadas por 30 apps.

💼 Mercado de trabalho

Perguntas: "Por que a fatura de logs explode e como controlar?" (nível certo, amostragem, retenção por criticidade, derivar métricas, redação/drop no Collector), "Loki vs Elastic" (indexa labels vs full-text; custo), "O que o OTel Collector faz por você?" (hub de processamento, sampling, redação, roteamento multi-backend, desacopla do vendor).

✏️ Exercício 5 — Corte a fatura de logs

A fatura de observabilidade é R$ 80k/mês, 70% em logs. Investigando: um serviço loga cada requisição em nível INFO com o corpo inteiro (inclui PII); há DEBUG ligado em 3 serviços; a retenção é 90 dias hot para tudo; e há 200 GB/dia de logs de health check 200 OK. Proponha.

Gabarito: (1) Desligar DEBUG em produção (ligável sob demanda). (2) O serviço chatty: baixar para WARN/ERROR o log por requisição; se precisar de trilha, amostrar (1/100 dos 2xx, 100% dos erros) e remover o corpo/PII (redação no Collector). (3) Filtrar os logs de health check no Collector (não ingerir). (4) Retenção: 7–14 dias hot, resto em object storage barato com política de expiração; arquivar o que for exigência legal. (5) Substituir "contar erros pelos logs" por uma métrica derivada. Economia plausível: 50–70% da linha de logs, sem perder capacidade de investigação real.

MÓDULO 06 · AVANÇADO

SLI, SLO, SLA e error budgets

Objetivo: definir bons indicadores e objetivos de confiabilidade, calcular o error budget, e transformá-lo em decisões de engenharia via burn-rate alerts.

6.1 As três siglas

SiglaO que é
SLI (Service Level Indicator)Uma medida quantitativa de um aspeto do serviço: "% de requisições HTTP com status < 500 e latência < 300ms"
SLO (Service Level Objective)Um alvo para o SLI num período: "99,9% ao longo de 28 dias". É interno, define "bom o suficiente"
SLA (Service Level Agreement)Um contrato com o cliente, com penalidade se violado. Sempre mais frouxo que o SLO interno (você quer descobrir o problema antes de o cliente cobrar)

6.2 O que faz um bom SLI

6.3 A matemática dos "noves" e o error budget

SLO de disponibilidadeDowntime permitido / 30 dias/ ano
99% ("dois noves")~7,2 horas~3,65 dias
99,9% ("três noves")~43 minutos~8,77 horas
99,95%~22 minutos~4,38 horas
99,99% ("quatro noves")~4,3 minutos~52,6 minutos

O error budget = 100% − SLO. Com SLO de 99,9% num mês, você "pode" falhar 0,1% das requisições (ou ~43 min de indisponibilidade). Esse orçamento é gasto por incidentes, deploys ruins, degradações.

💡 A error budget policy

O poder do error budget está na política acordada de antemão: "enquanto houver orçamento, o time lança features livremente; se o orçamento acabar (SLO violado no período), congela-se o lançamento de features não essenciais e o time foca 100% em confiabilidade até recuperar." Isso transforma "dev vs ops" numa decisão objetiva baseada num número que os dois lados aceitaram.

6.4 Burn-rate alerts

Alertar quando "o SLO foi violado" é tarde demais. Alerte pela velocidade de consumo do orçamento (burn rate): burn rate = 1 significa consumir o orçamento exatamente no ritmo que o esgota ao fim do período; burn rate = 14,4 esgota o orçamento de 30 dias em ~2 dias.

Multi-window, multi-burn-rate (recomendação do SRE Workbook):

  PÁGINA (acorda alguém) se:
    burn rate > 14,4 na janela de 1h  E  burn rate > 14,4 na janela de 5m
    (queima rápida — 2% do orçamento mensal em 1h)
  OU
    burn rate > 6 na janela de 6h    E  burn rate > 6 na janela de 30m

  TICKET (não acorda) se:
    burn rate > 3 na janela de 24h   E  ... na janela curta
    burn rate > 1 na janela de 3d    E  ...

A janela curta em conjunto evita alertar por um pico já resolvido; a janela longa evita ignorar uma degradação lenta e persistente.

6.5 SLO como contrato entre times

Quando o serviço A depende do serviço B, o SLO de B (e seu histórico de cumprimento) informa quanto A pode prometer. SLOs publicados criam uma linguagem comum: "seu serviço precisa de 99,95% para eu conseguir dar 99,9%". E evitam o "over-delivery" perigoso (um serviço que sempre entrega 99,999% cria dependência oculta e some quando finalmente cai).

💼 Mercado de trabalho

SLO é o tema de entrevista de SRE. Perguntas: "Diferença entre SLI, SLO e SLA", "O que faz um bom SLI?" (voltado ao usuário, razão bom/total, medido onde o usuário está), "O que é um error budget e para que serve a policy?" (alinhar dev/ops num número; congelar features se acabar), "Por que alertar por burn rate e não por 'SLO violado'?", "Quanto downtime dá 99,9% ao mês?" (~43 min).

✏️ Exercício 6 — Defina o SLO

Uma API de busca de produtos de um e-commerce. Defina um SLI de disponibilidade e um de latência, um SLO para cada, o error budget mensal, e o que a policy diz se ele acabar.

Gabarito (exemplo): SLI disponibilidade: (requisições a /search com status < 500) / (total), medido no gateway. SLI latência: (requisições a /search com duração < 400 ms) / (total). SLO: disponibilidade ≥ 99,9% e latência ≥ 99% abaixo de 400 ms, em janela de 28 dias. Error budget: 0,1% das requisições podem falhar (≈ 43 min equivalentes/mês) e 1% podem passar de 400 ms. Policy: com orçamento disponível, o time lança normalmente; se qualquer SLO for violado na janela, congelam-se lançamentos não essenciais, faz-se um postmortem e o time prioriza correções de confiabilidade até o orçamento voltar ao positivo; mudanças de risco alto passam a exigir aprovação extra.

MÓDULO 07 · AVANÇADO

Alerting e on-call sustentável

Objetivo: alertas que valem a interrupção, combate à fadiga de alerta, runbooks, e um modelo de plantão que não queima as pessoas.

7.1 O que merece um alerta que acorda alguém

💡 A regra de ouro do paging

Um alerta que página (acorda uma pessoa) deve ser: urgente (precisa de ação humana agora, não pode esperar a manhã), acionável (a pessoa sabe o que fazer — há um runbook), e real (reflete um problema para o usuário, não um sintoma que se resolve sozinho). Se qualquer um dos três falha, não é página — é ticket, ou é ruído para deletar.

7.2 Fadiga de alerta

O maior inimigo do on-call. Sintomas: alertas que sempre se auto-resolvem, alertas que ninguém investiga, "isso é normal, ignora". Consequências: a pessoa perde a confiança e ignora o alerta importante. Combate:

7.3 Runbooks

Todo alerta que página tem um runbook linkado: o que este alerta significa, como confirmar o problema, os primeiros passos de mitigação (reverter deploy, escalar, drenar tráfego, ligar feature flag de degradação), quando e para quem escalar. Runbook bom é executável às 3h por alguém sonolento — específico, com comandos, sem "investigue".

7.4 On-call sustentável

7.5 Dashboards que servem

💼 Mercado de trabalho

Perguntas: "O que caracteriza um bom alerta?" (urgente + acionável + real; sintoma, não causa), "O que é fadiga de alerta e como combater?" (revisar/deletar alertas, métrica de páginas por turno, agrupamento), "O que tem num runbook?", "Como você desenharia uma rotação de on-call sustentável?" (gente suficiente, compensação, follow-the-sun, tempo protegido para consertar as causas).

✏️ Exercício 7 — Limpe os alertas

Um time recebe ~30 páginas por semana de plantão. Auditoria: 12 são "CPU alta" que sempre normaliza sozinha; 8 são de um job batch que "falha e o retry resolve"; 6 são duplicatas do mesmo incidente; 4 são erros reais de produção. O que você faz com cada grupo?

Gabarito: (1) "CPU alta" que auto-resolve: deletar como página — não é acionável nem urgente; virar, no máximo, um painel/ticket, e investigar se há um problema de capacity real por trás. (2) Job batch com retry que resolve: não paginar — só alertar (ticket) se o job falhar após todos os retries; corrigir a flakiness do job. (3) Duplicatas: configurar agrupamento/deduplicação (um incidente = uma página). (4) Os 4 erros reais: manter, garantir runbook, e priorizar corrigir as causas. Resultado: de ~30 para ~4 páginas/semana, todas acionáveis.

MÓDULO 08 · AVANÇADO

Gestão de incidentes e postmortems

Objetivo: o processo de responder a um incidente (papéis, comunicação, ciclo) e a prática de aprender com ele sem procurar culpados.

8.1 O ciclo de um incidente

DETECTAR ──► TRIAR ──► MITIGAR ──► RESOLVER ──► APRENDER
(alerta/SLO)  (severidade,  (parar a dor    (corrigir a   (postmortem
              declarar,     do usuário:     causa)         sem culpa,
              acionar)      reverter,                      ações)
                            failover,
                            feature flag)
💡 Mitigar > entender

Durante um incidente, a prioridade é parar a dor do usuário, não descobrir a causa raiz. Reverter o último deploy, drenar a região doente, ligar o modo degradado, escalar recursos — mitigações rápidas primeiro. A investigação da causa raiz vem depois, com o sistema estável. "Entender antes de agir" é para o postmortem, não para as 3h da manhã.

8.2 Papéis

PapelFaz
Incident Commander (IC)Coordena, decide, mantém a visão geral. Não mete a mão no teclado. Delegar é o trabalho dele
Operations / RespondersInvestigam e aplicam mitigações, sob direção do IC
Communications LeadAtualiza stakeholders internos e a status page externa em cadência fixa
ScribeRegistra a timeline (o que foi feito, quando, com que efeito) — ouro para o postmortem

Em incidentes pequenos, uma pessoa acumula papéis; o importante é que alguém é o IC e todos sabem quem.

8.3 Severidade e comunicação

8.4 Postmortem sem culpa (blameless)

8.5 Testar a resiliência de propósito

💼 Mercado de trabalho

Perguntas: "Descreva o processo de resposta a um incidente" (detectar→triar→mitigar→resolver→aprender; mitigar antes de entender), "O que faz um Incident Commander?" (coordena, não digita), "O que é um postmortem blameless e por que blameless?" (culpar esconde a informação; foca em sistema/processo), "O que é chaos engineering?", "MTTD e MTTR".

✏️ Exercício 8 — Conduza o incidente

3h da manhã: o SLO de disponibilidade do checkout está queimando a burn rate 20. Você é paginado. Descreva seus primeiros 15 minutos.

Gabarito: (1) Reconhecer a página e abrir o incidente (canal dedicado, declarar severidade — provável SEV1/2). Assumir o papel de IC (ou nomear um). (2) Confirmar o impacto no dashboard de SLO e RED do checkout: taxa de erro, latência, desde quando. (3) Buscar mudança recente: houve deploy? mudança de config? pico de tráfego? incidente de uma dependência? (o service map / o dashboard de deploys). (4) Mitigar já, sem esperar a causa raiz: se houve deploy recente, reverter; se é uma região/AZ, drenar; se é uma dependência, ligar o modo degradado / circuit breaker. (5) Comunicar: status page + update interno ("checkout com erros elevados desde 2h55, mitigação em andamento, próximo update em 30 min"). (6) Designar um scribe para a timeline. Investigação de causa raiz e postmortem: depois de estabilizar.

MÓDULO 09 · MUITO AVANÇADO

SRE em escala: toil, release, plataforma e temas atuais

Objetivo: eliminar toil com automação, entregar mudanças com segurança (progressive delivery), o papel da plataforma, e o que há de novo (eBPF, observabilidade de IA, AIOps).

9.1 Toil e sua eliminação

9.2 Release engineering e progressive delivery

TécnicaIdeia
CanaryNova versão recebe 1–5% do tráfego; observabilidade compara SLIs canary vs baseline; promove ou reverte automaticamente
Blue-greenDuas versões prontas; troca instantânea; rollback imediato
RollingSubstitui instâncias aos poucos
Feature flagsDeploy desacoplado de release; ligar a feature para % de usuários; matar sem redeploy
Automated rollbackSe os SLIs pós-deploy degradam além do limiar, reverter sem humano

Ferramentas: Argo Rollouts, Flagger, Spinnaker; LaunchDarkly/Unleash para flags. Deploy frequente e pequeno reduz o risco por deploy — é contraintuitivo mas é o que os dados de DORA (DevOps Research) mostram: quem entrega mais vezes tem menos incidentes e recupera mais rápido.

9.3 Capacity planning

9.4 O modelo organizacional de SRE

9.5 Temas atuais

💼 Mercado de trabalho

Perguntas sénior: "O que é toil e como você o reduz?", "Por que deploy frequente e pequeno reduz risco?" (menos mudança por deploy, rollback trivial, dados DORA), "Como funciona um canary automatizado?" (comparar SLIs canary vs baseline, promover/reverter), "O que é eBPF e o que ele muda para observabilidade?" (instrumentação no kernel, sem tocar a app), "Como a plataforma entrega observabilidade 'de fábrica'?".

✏️ Exercício 9 — Reduza o toil

Uma pesquisa mostra que o time de SRE gasta 65% do tempo em toil. Os três maiores itens: (a) restaurar manualmente um serviço que trava ~3×/dia; (b) provisionar acessos (dezenas de tickets/semana); (c) rodar um runbook de 20 passos toda vez que um cliente novo é onboarded. Proponha para cada.

Gabarito: (a) Self-healing: liveness probe que reinicia o pod automaticamente, e um alerta (ticket, não página) para investigar a causa da trava — e priorizar corrigi-la. (b) Automação com aprovação: um fluxo self-service (formulário → política → provisão automática) com aprovação só onde o risco exige; RBAC por grupo em vez de acesso individual. (c) Codificar o runbook: transformar os 20 passos num script/pipeline idempotente (um comando ou um clique), com verificação ao final. Meta: derrubar o toil de 65% para < 50% e liberar tempo para engenharia de confiabilidade.

MÓDULO 10 · CARREIRA

Mercado de trabalho: roadmap, entrevistas e portfólio

Objetivo: converter o conteúdo dos módulos anteriores em aprovação — perfis, roadmap, banco de perguntas com respostas e projetos que geram entrevista.

10.1 Os perfis que contratam

PerfilFoco
Site Reliability EngineerSLOs, on-call, incidentes, automação, capacity, release; forte em código
Observability EngineerPlataforma de telemetria: OTel, Prometheus, backends, custo, adoção pelos times
Platform EngineerGolden paths incluindo observabilidade e SLOs de fábrica
DevOps EngineerCI/CD, IaC, e cada vez mais SLO/observabilidade
Production EngineerNome usado por algumas empresas (Meta) para SRE-adjacente

10.2 Roadmap de estudo (8–10 semanas)

SemanasFocoPrática
1Conceitos: observabilidade vs monitoring, SRE, os pilares (Módulos 1–2)Instrumentar uma app de exemplo com logs estruturados + trace_id
2–3Métricas: Prometheus, PromQL, RED/USE, Grafana (Módulo 3)Stack Prometheus+Grafana local; painéis RED para 2–3 serviços; recording rules
4–5Tracing e OpenTelemetry: SDK, auto-instrumentação, Collector, sampling (Módulo 4)Instrumentar 3 serviços com OTel; Collector com tail sampling; Jaeger/Tempo
6Logs, correlação e custo; OTel Collector como hub (Módulo 5)Loki + correlação log↔trace; um processador de redação de PII no Collector
7SLI/SLO/error budget/burn rate (Módulo 6)Definir SLOs para os serviços; alertas multi-window multi-burn-rate; dashboard de SLO
8Alerting e on-call; incidentes e postmortems (Módulos 7–8)Escrever 3 runbooks; simular um incidente (game day) e redigir o postmortem blameless
9–10SRE em escala: toil, progressive delivery, eBPF, plataforma (Módulo 9); portfólioUm canary automatizado (Flagger/Argo Rollouts); estudo de caso publicado

Base: Linux, redes, um provedor de nuvem, Kubernetes, um pouco de código (Go/Python), IaC (Terraform), CI/CD.

10.3 Banco de perguntas de entrevista (com a resposta que aprova)

Júnior/pleno — "Observabilidade vs monitoramento"

Monitoramento coleta sinais predefinidos e alerta em limiares — responde perguntas que você já sabia fazer ("o disco vai encher?"). Observabilidade é ter telemetria rica o suficiente (logs, métricas, traces correlacionados) para responder perguntas novas, não previstas, sobre o comportamento do sistema — sem fazer deploy de código para adicionar instrumentação. Monitoramento é um subconjunto da observabilidade.

Pleno — "Os três pilares e o que cada um responde"

Métricas: números agregados no tempo — saúde e tendência, alertas, SLOs; baratas mas sofrem com cardinalidade alta. Logs: eventos discretos com contexto — "o que exatamente aconteceu"; caros, costumam ser a maior fatura. Traces: a árvore de spans de uma requisição entre serviços — "onde o tempo foi, qual serviço falhou". IDs de alta cardinalidade vão em logs/traces, nunca em labels de métrica.

Pleno — "O que é OpenTelemetry e por que usar?"

Padrão CNCF vendor-neutral para gerar telemetria (traces, métricas, logs): API estável, SDKs, auto-instrumentação, semantic conventions (nomes de atributos padronizados), protocolo OTLP e o Collector (pipeline de processamento e roteamento). Vale porque a instrumentação fica portável — trocar de backend/vendor é mudar o Collector, não re-instrumentar; e a telemetria de times/linguagens diferentes fica comparável.

Pleno/sénior — "Explique SLI, SLO, error budget"

SLI: uma medida de qualidade do serviço voltada ao usuário, como razão bom/total (ex.: % de requisições rápidas e sem erro). SLO: o alvo do SLI num período (ex.: 99,9% em 28 dias), define "bom o suficiente". Error budget = 100% − SLO: o quanto de falha é tolerável; é gasto por incidentes e deploys. A error budget policy: com orçamento, lança-se features; sem orçamento, congela-se feature e foca-se em confiabilidade. Alinha dev e ops num número acordado.

Sénior — "Por que alertar por burn rate?"

Alertar só quando "o SLO já foi violado" é tarde. Burn rate mede a velocidade de consumo do error budget; um multi-window multi-burn-rate alerta (ex.: burn > 14,4 em 1h e em 5m → página; burn > 3 em 24h → ticket) pega tanto a queima rápida (incidente agudo) quanto a lenta e persistente (degradação), com a janela curta evitando alertar por um pico já resolvido.

Sénior — "Descreva a resposta a um incidente e o postmortem"

Detectar (alerta/SLO) → triar (severidade, declarar, nomear IC) → mitigar (parar a dor do usuário: reverter, failover, feature flag — antes de entender a causa) → resolver (corrigir a causa) → aprender. Papéis: IC coordena (não digita), responders investigam/mitigam, comms atualiza stakeholders em cadência fixa, scribe registra a timeline. Postmortem blameless: assume boa intenção, pergunta por que o sistema permitiu o erro, produz ações com dono e prazo; blameless porque culpar faz as pessoas esconderem informação.

Armadilha — "Vamos mirar 100% de disponibilidade"

É o alvo errado: cada "nove" adicional custa exponencialmente mais, é praticamente inatingível em sistemas distribuídos, e acima de certo ponto o usuário não percebe a diferença (a rede dele, o dispositivo, o DNS já introduzem mais falha que isso). Define-se um SLO adequado ao produto (ex.: 99,9%), e a folga vira error budget para inovar. Um serviço que "sempre entrega 99,999%" ainda cria dependência oculta e falta de prática de recuperação.

10.4 Projetos de portfólio que geram entrevista

  1. Stack de observabilidade completa (âncora): um conjunto de microserviços de exemplo, instrumentados com OpenTelemetry (traces + métricas + logs correlacionados), OTel Collector com tail sampling e redação de PII, Prometheus+Grafana com painéis RED, Loki, Tempo/Jaeger. README explicando as decisões e os custos.
  2. SLOs e burn-rate alerts: definir SLIs/SLOs para os serviços acima, implementar alertas multi-window multi-burn-rate, e um dashboard de error budget. Bônus: OpenSLO / SLO as code.
  3. Game day documentado: injetar uma falha (chaos), conduzir o incidente com papéis, e publicar o postmortem blameless com timeline e ações.
  4. Canary automatizado: Argo Rollouts/Flagger comparando SLIs canary vs baseline, com rollback automático — demonstrado com um deploy "ruim".
  5. Otimização de custo de observabilidade: um "antes/depois" de fatura com sampling, retenção e métricas derivadas de logs.

10.5 Fontes para continuar

🏁 Síntese final da apostila

Quatro ideias sustentam observabilidade e SRE: (1) observabilidade é responder o inesperado sem redeploy — logs, métricas e traces correlacionados, com cardinalidade no lugar certo; (2) confiabilidade tem um alvo — o SLO — e a folga é um error budget que alinha dev e ops num número; (3) alerte por sintoma e por queima de orçamento, não por causa de infra, e proteja o on-call da fadiga; (4) incidentes são falhas de sistema — mitigue antes de entender, aprenda sem culpar, e corrija as causas. Operação é engenharia.