sre

SRE ferramentas

Matemática de SRE sem enrolação: como SLI, SLO e SLA diferem, quanto cada meta de disponibilidade custa em minutos reais, e como a taxa de consumo transforma um SLO em um limiar de paging.

3 ferramentas

§01 GUIA DO TEMA

SLI, SLO e SLA são três números diferentes

Um SLI é uma medição: eventos bons sobre eventos válidos — requisições respondidas em menos de 300 ms com status não 5xx, sobre todas as requisições que chegaram ao balanceador de carga. Um SLO é uma meta para essa razão ao longo de uma janela, como 99,9% em 30 dias corridos. Um SLA é um contrato que anexa dinheiro a uma meta geralmente mais frouxa. Confundir os três é como um time aciona alguém às 03:00 por um número que ninguém concordou em defender.

A parte difícil é a definição do SLI, não o percentual. Dois times que declaram 99,9% podem estar dizendo coisas diferentes, dependendo de o 429 contar como erro, de os health checks estarem no denominador e de a medição acontecer na borda da CDN ou dentro do serviço. Acerte numerador e denominador antes de discutir noves.

O SLO então produz o único número que muda comportamento: o error budget, 100% − SLO. A 99,9% em 30 dias você pode falhar 0,1% das requisições, ou ficar totalmente fora do ar por 43,2 minutos. É moeda — releases e migrações a gastam, uma janela nova a repõe, e um mês terminando em 100% normalmente significa que você entregou devagar demais.

Metas de disponibilidade em minutos reais

Noves são pouco intuitivos; minutos não são. Cada nove adicional divide a indisponibilidade permitida por dez.

DisponibilidadePor ano (365 d)Por mês de 30 diasPor semanaPor dia
99%3 d 15,6 h7,2 h1,68 h14,4 min
99,5%1 d 19,8 h3,6 h50,4 min7,2 min
99,9%8,76 h43,2 min10,1 min1,44 min
99,95%4,38 h21,6 min5,04 min43,2 s
99,99%52,6 min4,32 min60,5 s8,64 s
99,999%5,26 min25,9 s6,05 s0,86 s

Até 99,9%, um humano consegue notar, diagnosticar e corrigir dentro do orçamento. A 99,99% a franquia mensal é de 4,32 minutos — uma afirmação sobre failover automatizado, não sobre plantão.

Taxa de consumo: do SLO ao limiar de alerta

Taxa de consumo é a taxa de erro observada dividida pela taxa que o SLO permite. A identidade que importa é orçamento consumido = taxa de consumo × (janela ÷ período do SLO): ela transforma uma observação curta em uma afirmação sobre o mês inteiro.

Taxa de consumoTaxa de erro com SLO de 99,9%Orçamento novo de 30 dias esgotado emResposta típica
0,1%30 diassem alerta
0,6%5 diaspage (janela de 6 h, 5% consumido)
14,4×1,44%50 hpage (janela de 1 h, 2% consumido)
100×10%7,2 hpage imediato
1000×100%, fora do ar43,2 minincidente

Emparelhe cada limiar rápido com uma janela de confirmação mais curta (5 min a 14,4×, 30 min a ) para que o alerta se resolva quando o incidente se resolver. Consumos lentos pertencem a um ticket, não a um page.

Qual ferramenta responde qual pergunta

Recorra à Calculadora SLA quando você tem um percentual e precisa do equivalente em tempo: ela converte qualquer valor de 0 a 100 em indisponibilidade permitida por ano, por mês de 30 dias, por semana e por dia, com presets de 90% a 99,999%. É a ferramenta de revisão de contrato.

Use o Error Budget quando o número precisa guiar decisões de engenharia. Dê a ele um SLO, uma janela em dias e o tráfego esperado; ele devolve o orçamento como percentual, como indisponibilidade permitida e como uma contagem de requisições que podem falhar — 1.000 de um milhão a 99,9% em 30 dias, a figura que sobrevive a degradação parcial, coisa que um número de indisponibilidade não faz.

Primeiro, defina quais respostas são «ruins». Os Códigos HTTP são uma consulta código → significado — nome, classe e uma descrição de uma linha por código, filtráveis por número ou palavra-chave — então 400 («não foi possível entender a requisição») contra 422 («bem formada, mas semanticamente inválida») se resolve na hora. Eles marcam 307 e 308 como preservadores do método, mas não dizem nada sobre o que o 301 faz com um POST: clientes podem reescrevê-lo como GET e descartar o corpo, e é por isso que um endpoint POST movido permanentemente precisa de 308. Para ver o que um endpoint ao vivo devolve, os Cabeçalhos HTTP buscam a partir de api.sitekits.dev e reportam status final, saltos de redirecionamento, tempo de resposta e todo cabeçalho; o corpo nunca é recuperado, e destinos privados ou localhost são recusados pela proteção contra SSRF. Precisa de um corpo, cabeçalhos de autenticação ou um POST? O Testador REST API dispara do seu navegador direto ao destino, então a política de CORS dele se aplica. Mais no hub de HTTP, cuja matriz de redirecionamentos compara 301, 302, 303, 307 e 308 lado a lado.

Para evidência de latência, abra uma exportação do DevTools no Visualizador HAR: método, status, tipo, tamanho e tempo por requisição, com 4xx/5xx destacados. Sanitize-a com o Sanitizador HAR antes de anexar a um ticket — authorization, cookie, x-api-key, parâmetros que parecem tokens e todos os corpos se tornam [REDACTED].

Agendas, janelas e relógios

O cron é onde o trabalho de confiabilidade quebra em silêncio. O Editor Crontab interpreta uma expressão de cinco campos e lista os próximos oito disparos no fuso horário local do seu navegador. Leia a tabela como duas coisas ao mesmo tempo: as faixas de campo que todo cron compartilha, e a gramática mais estreita que este editor de fato interpreta — inteiros combinados com *, listas, faixas e passos, e nada mais.

CampoFaixaFormas que o editor aceitaVálidas em outros lugares, rejeitadas aqui
minuto0–59*, 5,20, 0-30, */15
hora0–23as mesmas
dia-do-mês1–31as mesmasL, W (Quartz, AWS)
mês1–12as mesmasnomes JANDEC (Vixie, cronie)
dia-da-semana0–6 (0 = dom)as mesmas7 para domingo e SUNSAT (Vixie, cronie); 5#3 (Quartz)

Tudo naquela última coluna falha com uma única mensagem — Invalid cron expression (expected 5 fields) — mesmo quando os cinco campos estão presentes, então 0 3 * * 7 parece um erro de contagem quando na verdade é um erro de vocabulário. Escreva domingo como 0. Macros de linha (@daily, @reboot) e dialetos de seis campos com segundos são recusados do mesmo jeito, e faixas invertidas também — escreva 22-2 como 22-23,0-2. Uma forma falha silenciosamente em vez disso: 5/15 é lido como o valor único 5, enquanto parsers no estilo Kubernetes o expandem para 5-59/15, então escreva a faixa por extenso.

Três coisas que a tabela não consegue mostrar. Na combinação de dias, o editor aplica a regra POSIX de casar com qualquer um dos dois — com dia-do-mês e dia-da-semana ambos restritos, 0 0 1 * 1 significa o dia 1º e toda segunda-feira — mas ele decide o que é restrito pelo texto, contando como não restrito qualquer campo de dia que comece com *. Um passo escapa desse teste: */3 em dia-do-mês é lido como não restrito, então 0 0 */3 * 1 é combinado por E e dispara apenas nas segundas que caem no dia 1º, 4º, 7º e assim por diante. Escreva esses dias como 1-31/3 para recuperar a regra de qualquer um dos dois. Passos dividem o campo, não o relógio — */7 nos minutos roda de :00 até :56 e então reinicia com uma lacuna de 4 minutos. E a pré-visualização usa o fuso do seu navegador, enquanto o relógio do host normalmente está em UTC.

Linhas de tempo de incidente exigem o mesmo rigor: o Unix Time lê valores abaixo de 1e12 como segundos e maiores como milissegundos, e o Conversor de Fuso Horário fixa um instante em 12 fusos IANA com o deslocamento de horário de verão correto antes de você anunciar uma janela de manutenção. Mais do kit de plantão: ferramentas para SREs.

Erros comuns

O mês do contrato não é o mês da calculadora

A calculadora usa um mês fixo de 30 dias e um ano de 365 dias. Por mês de calendário, um SLO de 99,9% permite 40,32 minutos em um fevereiro de 28 dias e 44,64 em julho — 10% de variação com a mesma redação.

A disponibilidade se multiplica ao longo da cadeia de dependências

Três dependências rígidas a 99,9% cada, em série, dão 0,999³ = 99,70%: cerca de 2,16 horas de indisponibilidade mensal, não 43,2 minutos. Sem redundância, você não pode prometer mais do que o produto do caminho crítico.

Orçamentos por tempo e por requisição não são intercambiáveis

A figura de indisponibilidade permitida assume 100% de taxa de erro enquanto está fora do ar. Uma degradação que falha 5% das requisições consome um orçamento de requisições de 99,9% a 50× enquanto quase não move um relógio de uptime movido por sondas sintéticas.

O intervalo da sua sonda é o piso da sua resolução

Uma verificação sintética de 60 segundos não consegue enxergar uma queda de 20 segundos, e cada sonda perdida registra aproximadamente um minuto — já 23% de um orçamento mensal de 99,99%. Acima de três noves, meça a partir dos logs de requisição, não de polling.

FAQ
Quanta indisponibilidade 99,9% de uptime realmente permite?
8,76 horas por ano, 43,2 minutos por mês de 30 dias, 10,1 minutos por semana ou 1,44 minuto por dia. Se o seu contrato mede por mês de calendário, a mesma meta de 99,9% se move com o tamanho do mês: 40,32 minutos em um fevereiro de 28 dias e 44,64 minutos em um mês de 31 dias. Confira a cláusula de medição do SLA antes de comparar números.
O que é taxa de consumo do error budget, e quando ela deve acionar alguém?
Taxa de consumo é a sua taxa de erro observada dividida pela taxa que o SLO permite, então um SLO de 99,9% vendo 1,44% de erros está consumindo a 14,4×. O orçamento consumido é igual à taxa de consumo × (janela do alerta ÷ janela do SLO), que é por que 14,4× sustentado por 1 hora gasta 2% de um orçamento de 30 dias e merece um page, enquanto 1× sustentado por 3 dias gasta 10% e merece um ticket. Emparelhar cada limiar com uma janela de confirmação mais curta (5 minutos a 14,4×, 30 minutos a 6×) impede que o alerta oscile depois da recuperação.
Meu SLO interno deve ser igual ao SLA que eu vendo?
Não — mantenha o SLO mais apertado que o SLA, porque a diferença é a sua margem de operação. Um SLO interno de 99,9% atrás de um SLA contratual de 99,5% deixa cerca de 2,9 horas de folga mensal entre errar a sua própria meta (43,2 min) e passar a dever créditos de serviço (3,6 h). Se os dois forem iguais, a primeira violação é um sinal de engenharia e um evento de faturamento no mesmo instante.
Por que meu job de cron dispara na hora errada?
Três causas usuais. O relógio do host está em UTC enquanto você raciocinou em hora local, então 0 3 * * * em um servidor UTC dispara às 12:00 em Asia/Tokyo. O horário de verão faz um job de 02:30 local rodar duas vezes ou não rodar nos dias de transição. E o cron POSIX combina dia-do-mês com dia-da-semana por OU quando os dois campos estão restritos, então 0 0 1 * 1 roda no dia 1º do mês e em toda segunda-feira — não apenas nas segundas que caem no dia 1º.
Com que frequência uma verificação sintética precisa rodar para medir um SLO de 99,99%?
Mais vezes do que é prático, e essa é a resposta de verdade: a 99,99% o orçamento inteiro de 30 dias é de 4,32 minutos, então uma sonda de 60 segundos não consegue enxergar uma queda de 20 segundos, e uma única sonda perdida registra aproximadamente um minuto — 23% do mês embora em um único ponto de dados. O intervalo da sonda é um piso para a resolução da medição, então acima de três noves meça o SLI a partir dos logs de requisição (eventos bons sobre eventos válidos) e reserve as sintéticas para alcançabilidade grosseira e checagens de terceiros. A 99,9%, onde o orçamento é de 43,2 minutos, uma sonda de 60 segundos é proporcional.