SLA, SLO e SLI
Três conceitos interligados para medir e comprometer-se com a confiabilidade de um sistema. Sem eles, "disponibilidade" é apenas um número sem significado acordado — e decisões sobre o que priorizar ficam sem base técnica objetiva.
Intenção
SLI, SLO e SLA formam uma hierarquia para transformar "o sistema deve ser confiável" em métricas mensuráveis, metas defensáveis e contratos exigíveis. Cada camada tem um público diferente e consequências diferentes em caso de violação.
O framework foi popularizado pelo modelo de Site Reliability Engineering (SRE) do Google e hoje é padrão em times que operam sistemas em produção com on-call. O conceito central é que confiabilidade precisa ser definida antes de ser medida, e medida antes de ser negociada. Sem essa cadeia, discussões sobre disponibilidade são subjetivas e decisões de engenharia carecem de critério objetivo.
Problema
Times de engenharia enfrentam decisões constantes sobre o que priorizar: novos recursos ou estabilidade? Deploy agora ou aguardar mais testes? Escalar o banco ou aceitar degradação? Sem uma definição clara de quanta falha é aceitável, essas decisões dependem de intuição, política interna ou pressão do momento:
- Sem SLI: não há consenso sobre o que medir. "O sistema está up" pode significar que o servidor está respondendo ping enquanto 30% das requisições retornam erro 500. Métricas de infraestrutura não refletem a experiência real do usuário.
- Sem SLO: não há meta para defender. Qualquer nível de falha é implicitamente aceitável, o que leva a sistemas progressivamente mais instáveis sem que ninguém formalize o problema.
- Sem SLA: não há consequências formais para o provedor do serviço. Usuários e clientes não têm base para exigir compensação ou escalar problemas de confiabilidade.
- Sem Error Budget: a decisão de fazer ou não um deploy arriscado é tomada com base em "parece ok" em vez de "temos X% de budget restante neste mês". O conceito de budget transforma a confiabilidade em recurso gerenciável.
Como funciona
SLI — Service Level Indicator
O SLI é a métrica real medida: um número que quantifica um aspecto do comportamento do sistema do ponto de vista do usuário. É a base de tudo — SLO e SLA são expressões de SLIs.
- Disponibilidade: proporção de requisições bem-sucedidas / total de requisições.
- Latência: proporção de requisições respondidas em menos de X ms.
- Taxa de erros: proporção de respostas 5xx / total de respostas.
- Throughput: volume de operações processadas por unidade de tempo.
A escolha do SLI é crítica: ele deve refletir a experiência do usuário, não a saúde da infraestrutura. O servidor pode estar "up" (CPU 5%, memória ok) enquanto o serviço retorna timeout para os usuários. O SLI correto captura o que o usuário experimenta, não o que o dashboard de infraestrutura mostra.
SLO — Service Level Objective
O SLO é a meta interna para o SLI: o alvo que a equipe de engenharia se compromete a atingir e defende operacionalmente. É definido como um valor alvo do SLI em uma janela de tempo.
Exemplos:
- 99,9% das requisições com latência abaixo de 200ms nos últimos 30 dias.
- Disponibilidade de 99,95% medida como proporção de requisições bem-sucedidas no mês calendário.
- Taxa de erros abaixo de 0,1% em qualquer janela de 1 hora.
O SLO é uma meta interna — não é o contrato com o cliente, mas é o que a engenharia trata como limite. Quando o SLO está sendo violado, é o sinal para acionar on-call, paralisar deploys e priorizar estabilidade sobre funcionalidades.
SLA — Service Level Agreement
O SLA é o contrato externo com o cliente ou usuário. É baseado nos SLOs, mas com margem de segurança: o SLA é menos restritivo que o SLO interno, porque a equipe precisa de espaço para falhar no SLO sem imediatamente violar o contrato.
A violação do SLA tem consequências formais: créditos na fatura, penalidades contratuais, direito de rescisão. Por isso o SLA é sempre mais permissivo: se o SLO interno é 99,9%, o SLA externo pode ser 99,5%.
Hierarquia e margens
SLI (medida real)
──────────────────────────────────────────────────────────────────
│ O que o sistema está fazendo: proporção de requisições
│ bem-sucedidas medida nos últimos 30 dias = 99,94%
▼
SLO (meta interna — o que a engenharia defende)
──────────────────────────────────────────────────────────────────
│ Meta: SLI ≥ 99,9%
│ Status: OK (99,94% > 99,9%)
│ Se violado → alerta de on-call, freeze de deploys arriscados
▼
SLA (contrato externo — o que o cliente pode exigir)
──────────────────────────────────────────────────────────────────
│ Contrato: disponibilidade ≥ 99,5%
│ Status: OK (99,94% >> 99,5%)
│ Se violado → créditos, penalidades, direito de rescisão
Margem de segurança: SLO (99,9%) - SLA (99,5%) = 0,4%
Permite que o SLO seja violado sem violar imediatamente o contrato.
Error Budget
O Error Budget é derivado diretamente do SLO: Error Budget = 1 - SLO. Se o SLO é 99,9%, o error budget mensal é 0,1% do tempo — aproximadamente 43 minutos de downtime (ou proporção equivalente de requisições com falha). É o quanto o sistema pode falhar dentro do período sem violar o SLO.
O budget funciona como recurso: quando está cheio, o time tem liberdade para deployar features novas com risco controlado. Quando está próximo de zero ou esgotado, a política é paralisar deploys arriscados e focar em estabilidade até o orçamento se renovar. Isso torna a decisão técnica — "fazemos o deploy agora?" — dependente de um dado objetivo em vez de uma discussão subjetiva.
Tabela de "noves" de disponibilidade
Disponibilidade │ Downtime/ano │ Downtime/mês │ Downtime/semana
────────────────┼─────────────────┼────────────────┼─────────────────
99% │ ~87,6 horas │ ~7,3 horas │ ~1,7 horas
99,9% │ ~8,7 horas │ ~43,8 minutos │ ~10,1 minutos
99,99% │ ~52,6 minutos │ ~4,4 minutos │ ~1,0 minuto
99,999% │ ~5,3 minutos │ ~26,3 segundos │ ~6,1 segundos
99,9999% │ ~31,5 segundos │ ~2,6 segundos │ ~0,6 segundo
Cada "nove" adicional reduz o downtime permitido por ~10x e tipicamente
exige arquitetura mais complexa e cara para ser atingido de forma consistente.
Quando usar
- Qualquer serviço com usuários externos ou internos com dependência real: APIs consumidas por outros times, produtos B2B, plataformas com SLA contratual. Sem SLI/SLO definidos, não há critério para saber se o sistema está bom o suficiente.
- Times com on-call: o SLO é o critério objetivo que define quando acionar o on-call e quando a situação está normalizada. Sem ele, cada engenheiro tem sua própria definição de "problema".
- Times que precisam balancear velocidade e estabilidade: o Error Budget é o árbitro técnico. Quando o budget está cheio, o time pode ser mais agressivo em deploys. Quando está esgotado, o foco muda para confiabilidade.
- Contratos B2B com penalidades: o SLA formal com consequências requer SLO interno mais restritivo e SLI bem definido para monitorar continuamente.
Quando evitar
- Sistemas internos de dev/teste sem impacto em produção: ambientes de desenvolvimento, pipelines de CI, ferramentas internas de baixo criticidade. O overhead de definir e monitorar SLOs não se paga.
- MVPs em fase de descoberta: quando o produto ainda está sendo validado e a prioridade é aprender rápido, definir SLOs formais pode criar rigidez desnecessária. Introduza SLOs quando o produto começar a ter usuários com expectativas reais de confiabilidade.
Prós e contras
Prós
- Linguagem comum: SLI/SLO/SLA criam vocabulário compartilhado entre engenharia, produto e negócio para falar de confiabilidade com precisão.
- Decisões baseadas em dados: o Error Budget transforma "fazemos o deploy?" em uma questão com resposta objetiva baseada em métricas reais.
- Alinhamento de expectativas: o SLA explicita o que o cliente pode esperar e o que acontece se a expectativa não for atendida.
- Priorização clara: quando o Error Budget está esgotado, toda a organização sabe que a prioridade é estabilidade — sem negociação caso a caso.
- Detecta problemas invisíveis: um SLI bem escolhido captura degradação que os dashboards de infraestrutura não mostram.
Contras
- Custo de setup: definir SLIs relevantes, implementar a instrumentação e criar os dashboards de SLO requer investimento inicial não trivial.
- SLI difícil de escolher: medir a métrica certa que reflete a experiência do usuário é mais complexo do que parece. SLIs ruins levam a SLOs que não protegem ninguém.
- Falsa precisão: SLOs de 99,95% sugerem precisão que pode não existir se a medição do SLI tiver erros ou lacunas.
- Burocracia se mal aplicado: times pequenos com SLOs rígidos e processos de freeze de deploy excessivos perdem agilidade sem ganho proporcional em confiabilidade.
Armadilhas comuns
1. SLO igual ao SLA
Quando o SLO interno e o SLA externo são idênticos, não há margem de segurança. Qualquer incidente que viola o SLO viola imediatamente o contrato com o cliente. O SLO interno deve ser mais restritivo que o SLA externo para absorver incidentes antes que cheguem ao nível de penalidade contratual.
2. SLI que não reflete a experiência do usuário
Medir uptime do servidor (ping responde?) em vez de disponibilidade do serviço (requisições bem-sucedidas?) é o erro mais comum. O servidor pode estar "up" retornando código 200 com corpo de erro para todas as requisições. O SLI deve medir o que o usuário experimenta, não o que a infraestrutura reporta.
Regra prática: se um usuário consegue perceber a degradação mas o SLI não indica problema, o SLI está errado. A pergunta é: "o usuário consegue fazer o que precisa?" — e o SLI deve responder isso.
3. Error Budget ignorado na prática
Muitos times definem SLO e calculam o Error Budget mas não mudam o comportamento quando o budget se esgota. Deploys arriscados continuam, features novas continuam em produção e o SLO vira uma métrica decorativa. O valor do Error Budget é comportamental: ele precisa mudar decisões reais, ou não existe para nada.
4. SLO muito agressivo logo no início
Definir 99,999% de disponibilidade como SLO para um serviço novo exige arquitetura de alta disponibilidade cara e complexa — redundância em múltiplos data centers, failover automático, testes de caos, etc. Comece com 99,9%, meça o SLI real por alguns meses e ajuste o SLO com base nos dados. SLOs devem ser calibrados com a realidade do sistema, não com aspirações.
Arquiteturas e padrões relacionados
Circuit Breaker e SLO operam em camadas diferentes do mesmo objetivo. O SLO define o nível de confiabilidade que o sistema deve atingir (ex.: 99,9% de requisições com sucesso). O Circuit Breaker é um mecanismo que ajuda a atingir esse objetivo ao prevenir cascata de falhas e degradar o serviço graciosamente em vez de falhar completamente. O estado do circuito — quantas vezes ele abriu, por quanto tempo — é um dado direto para o SLI de disponibilidade.
Load Balancing e Escalabilidade Horizontal são mecanismos operacionais que aumentam a capacidade de manter o SLO. Escalar horizontalmente distribui a carga, reduzindo o risco de sobrecarga que degrada o SLI. O Load Balancer detecta instâncias com falha e remove do pool, mantendo a disponibilidade medida pelo SLI mesmo quando instâncias individuais falham.