SRE na prática: SLOs, SLIs e error budgets para times pequenos
1. Por que times pequenos precisam de SRE (mesmo sem dedicar um engenheiro só para isso)
O mito de que SRE é privilégio de big techs como Google ou Netflix precisa ser desconstruído. Times pequenos — com 3 a 10 desenvolvedores — enfrentam os mesmos problemas de confiabilidade, mas com menos recursos para apagões noturnos e retrabalho. A diferença é que, sem uma abordagem estruturada, cada incidente vira uma crise que consome horas preciosas de desenvolvimento.
A boa notícia: você não precisa de um engenheiro dedicado a SRE. Precisa apenas de disciplina para aplicar os princípios certos. O foco deve ser reduzir toil (trabalho manual repetitivo) e priorizar confiabilidade sem criar burocracia. Ferramentas gratuitas como Prometheus, Grafana e Uptime Kuma já entregam 80% do que você precisa para começar.
2. Definindo SLIs práticos: o que medir quando você tem poucos recursos
Os quatro sinais de ouro do SRE — latência, tráfego, erros e saturação — podem ser simplificados drasticamente para times pequenos. Em vez de medir tudo, foque no que afeta diretamente o usuário final.
Exemplo de SLIs para uma API REST:
# SLI 1: Proporção de requisições com latência < 500ms (p95)
SLI_LATENCIA = total_requisicoes_menor_500ms / total_requisicoes
# SLI 2: Proporção de requisições sem erro HTTP 5xx
SLI_ERROS = total_requisicoes_ok / total_requisicoes
# SLI 3: Proporção de requisições com resposta completa (sem timeouts)
SLI_COMPLETUDE = total_respostas_completas / total_requisicoes
Para filas de mensagens:
# SLI 1: Proporção de mensagens processadas em até 30 segundos
SLI_PROCESSAMENTO = mensagens_processadas_em_30s / mensagens_enfileiradas
# SLI 2: Proporção de mensagens sem erro de processamento
SLI_ERRO_FILA = mensagens_processadas_com_sucesso / mensagens_processadas
Evite métricas "vaidade" como número de servidores ou uso de CPU global. Elas não refletem a experiência real do usuário. Seu banco de dados pode estar com 90% de CPU, mas se o usuário não sente lentidão, esse não é seu SLI mais importante.
3. SLOs realistas: como negociar com stakeholders sem prometer 99,999%
Definir SLOs (Service Level Objectives) baseados em dados históricos é o caminho mais seguro. Mesmo que você tenha apenas alguns meses de métricas, use esses dados como baseline.
Tabela de referência de downtime por mês:
Disponibilidade | Downtime mensal | Downtime anual
99,0% | 7,2 horas | 3,65 dias
99,5% | 3,6 horas | 1,83 dias
99,9% | 43,8 minutos | 8,76 horas
99,95% | 21,9 minutos | 4,38 horas
99,99% | 4,4 minutos | 52,6 minutos
99,999% | 26 segundos | 5,26 minutos
Ao negociar com stakeholders, traduza os números para linguagem de negócio: "99,9% significa que podemos ter até 43 minutos de falha por mês. Isso é suficiente para cobrir uma manutenção programada de 30 minutos e ainda sobra margem para imprevistos."
Exemplo de SLO realista para uma API de e-commerce:
SLO_LATENCIA: 95% das requisições completadas em < 500ms (janela de 30 dias)
SLO_DISPONIBILIDADE: 99,5% de uptime (janela de 30 dias)
SLO_ERROS: 99,9% das requisições sem erro 5xx (janela de 30 dias)
4. Error budgets na prática: quando acelerar e quando desacelerar
O error budget é o total de falhas permitidas dentro do SLO. Seu cálculo é simples:
Error Budget = (1 - SLO) * Total de eventos no período
Exemplo:
SLO de disponibilidade = 99,5%
Total de minutos no mês = 43.200 (30 dias)
Error Budget = (1 - 0,995) * 43.200 = 216 minutos de falha permitidos por mês
Gatilhos de ação práticos:
# Se o error budget consumido está em:
0-50% → Deploys normais, sem restrições
50-80% → Revisão de código mais rigorosa, testes extras
80-100% → Congelamento de deploys não críticos, priorização de bugs
>100% → Incidente crítico: pare tudo, foque em restaurar confiabilidade
Para times pequenos, o error budget é uma ferramenta de negociação poderosa. Quando o budget está acabando, você pode justificar uma pausa técnica sem culpa: "Pessoal, nosso error budget de latência está em 85%. Precisamos de dois dias para investigar e corrigir antes de lançar a nova feature."
5. Monitoramento enxuto: dashboards e alertas que não viram barulho
O anti-padrão mais comum em times pequenos é alertar tudo que se move. Resultado: alertas viram barulho e ninguém presta atenção. A regra de ouro é: só alerte sobre algo que exija ação imediata.
Exemplo de dashboard minimalista com PromQL:
# Dashboard no Grafana (fictício, mas representativo)
# Painel 1: SLI de Latência (p95 nos últimos 5 minutos)
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
# Painel 2: SLO de Latência (percentual dentro do alvo)
sum(rate(http_request_duration_seconds_bucket{le="0.5"}[5m]))
/ sum(rate(http_request_duration_seconds_count[5m])) * 100
# Painel 3: Error Budget Restante (em %)
1 - (sum(rate(http_requests_total{status=~"5.."}[30d]))
/ (sum(rate(http_requests_total[30d])) * 0.005))
Multi-window, multi-burn-rate alerts:
# Alerta de burn rate rápida (queima em 1 hora)
ALERT AltaBurnRate
IF (
(1 - (sum(rate(http_requests_total{status=~"5.."}[1h]))
/ sum(rate(http_requests_total[1h]))))
< 0.995
)
FOR 5m
LABELS { severity = "critical" }
ANNOTATIONS { summary = "Error budget queimando rápido demais" }
Esse alerta só dispara se a taxa de erros se mantiver alta por 5 minutos consecutivos, evitando falsos positivos de picos isolados.
6. Iterando sem dados históricos: como começar do zero em um projeto legado
Se você está começando sem dados históricos, use a técnica de baseline. Colete métricas das primeiras duas semanas e use os percentis como SLO provisório.
Exemplo de baseline:
# Coleta inicial (2 semanas)
p50_latencia = 120ms
p95_latencia = 480ms
p99_latencia = 950ms
# SLO provisório (baseado no p95 real)
SLO_LATENCIA_PROVISORIO = 95% das requisições em < 500ms
# Após 1 mês, refine
p95_latencia_real = 430ms
SLO_LATENCIA_REFINADO = 95% das requisições em < 450ms
Ferramentas open source que já entregam métricas prontas:
- cAdvisor: métricas de contêineres (CPU, memória, rede)
- node_exporter: métricas do sistema operacional
- blackbox_exporter: monitoramento de endpoints HTTP, TCP, ICMP
- Uptime Kuma: monitoramento simples de uptime com notificações
7. Cultura de confiabilidade sem um time de SRE dedicado
Criar uma cultura de confiabilidade não requer reuniões intermináveis. Rituais leves funcionam melhor:
- Daily de confiabilidade (5 minutos): "O error budget de latência está em 70%. Alguém viu algo estranho nos logs?"
- Review semanal de error budget (15 minutos): "Na última semana consumimos 10% do budget. O pico foi na terça-feira, quando lançamos a versão 2.3."
Para engajar devs resistentes, mostre vitórias rápidas:
# Antes do SRE: incidente de latência alta a cada 3 dias
# Depois do SRE (2 meses): incidente a cada 2 semanas
# Redução de 75% no tempo gasto em incidentes
Documentação mínima: um runbook de 1 página contendo:
- SLIs ativos e como acessá-los
- SLOs acordados com stakeholders
- Procedimentos de emergência (quem chamar, o que fazer)
- Link para o dashboard principal
8. Próximos passos: quando escalar a abordagem de SRE
Sinais de que sua prática de SLOs está madura:
- Redução consistente de incidentes mês a mês
- Previsibilidade de deploys (sabe-se quando algo vai quebrar o budget)
- Times começam a pedir mais SLIs, não menos
Quando evoluir:
- SLAs: transforme SLOs internos em acordos formais com clientes (apenas quando tiver 6+ meses de dados consistentes)
- SLOs multi-camada: serviço → plataforma → cliente (ex: API de pagamento → plataforma de e-commerce → loja do cliente)
- Ferramentas avançadas: adote OpenTelemetry para tracing distribuído e Grafana Stack completa (Loki + Tempo + Mimir) sem sobrecarga inicial — comece com um serviço piloto
Lembre-se: SRE para times pequenos não é sobre ferramentas caras ou equipes dedicadas. É sobre disciplina, métricas centradas no usuário e decisões baseadas em dados. Comece pequeno, meça o que importa e itere rápido.
Referências
-
Google SRE Book - Capítulo 4: Service Level Objectives — Documentação oficial do Google sobre definição e gestão de SLOs, com exemplos práticos e teoria fundamental.
-
Prometheus Documentation - Querying Basics — Guia oficial do Prometheus para criação de consultas, incluindo exemplos de histogramas e percentis usados em SLIs.
-
Grafana Dashboards - Best Practices — Documentação da Grafana sobre design de dashboards eficientes, com dicas para evitar poluição visual.
-
Uptime Kuma GitHub Repository — Ferramenta open source de monitoramento de uptime, ideal para times pequenos começarem com SRE sem custos.
-
Site Reliability Engineering: How Google Runs Production Systems — Versão completa do livro SRE do Google, com capítulos sobre error budgets, SLIs e cultura de confiabilidade.
-
OpenTelemetry Documentation - Getting Started — Guia oficial para adoção de tracing e métricas distribuídas, útil para evoluir a maturidade de SRE.
-
Blackbox Exporter GitHub Repository — Ferramenta do ecossistema Prometheus para monitoramento de endpoints externos, essencial para SLIs de disponibilidade.