SLO/SLA na Prática: Definindo e Medindo Metas de Confiabilidade com Exemplos Reais

Desmistificando a Tríade da Confiabilidade: SLI, SLO e SLA

No universo da engenharia de software e operações, a busca por sistemas confiáveis é uma constante. Contudo, a ‘confiabilidade’ é um conceito abstrato se não for quantificada. Para transformar essa abstração em metas tangíveis e acionáveis, a engenharia de confiabilidade de sites (SRE) se baseia em três pilares fundamentais: service Level Indicator (sli), service level objective (SLO) e Service Level Agreement (sla). Compreender a distinção e a relação entre eles é o primeiro passo para construir uma cultura de confiabilidade orientada por dados.

Service Level Indicator (SLI): A Métrica Bruta

Um SLI é uma medida quantitativa, um indicador direto de um aspecto específico do serviço que você está fornecendo. É a evidência empírica da performance do seu sistema. Pense nos SLIs como os sensores do seu serviço. Eles devem ser mensuráveis e refletir diretamente a experiência do usuário.

A fórmula geral para um bom SLI é a proporção de eventos válidos que foram bem-sucedidos:

SLI = (Eventos Bons / Eventos Válidos) * 100%

Exemplos de SLIs comuns incluem:

  • Disponibilidade: A proporção de requisições HTTP que retornaram com sucesso (códigos 2xx ou 3xx) em relação ao total de requisições válidas.
  • Latência: A proporção de requisições que foram atendidas abaixo de um determinado limiar de tempo (ex: 500ms). É crucial medir latência usando percentis (p90, p95, p99) em vez de médias, pois as médias podem mascarar outliers que afetam negativamente a experiência do usuário.
  • Taxa de Erro: A proporção de requisições que resultaram em erro (códigos 5xx) em relação ao total de requisições válidas.

Service Level Objective (SLO): A Meta Interna

Um SLO é a meta que você define para um SLI específico ao longo de um período de tempo. É uma declaração precisa sobre o nível de confiabilidade que seu serviço se compromete a atingir. O SLO é um acordo interno entre as equipes de desenvolvimento, produto e operações, e serve para alinhar as expectativas e guiar as decisões de engenharia.

Um SLO bem definido possui os seguintes componentes:

  • O SLI a ser medido: Ex: Latência da requisição na API de checkout.
  • O alvo de performance: Ex: 99.9%.
  • O período de medição (janela de tempo): Ex: últimos 28 dias (janela rolante).

Juntando tudo, um exemplo de SLO seria: ‘99.9% das requisições à API de checkout devem ser concluídas em menos de 300ms, medido em uma janela rolante de 28 dias.’

Service Level Agreement (SLA): O Contrato com o Cliente

Um SLA é um contrato formal e externo, geralmente com um cliente pagante. Ele especifica o nível de serviço que o cliente pode esperar e as consequências (geralmente financeiras, como créditos ou reembolsos) caso o serviço não atinja esses níveis. SLAs são, por natureza, mais conservadores que os SLOs internos. Uma prática comum é definir um SLA com uma meta de confiabilidade ligeiramente inferior ao SLO interno, criando uma margem de segurança para a equipe de engenharia.

Por exemplo, se o SLO interno para a disponibilidade de uma API é 99.95%, o SLA prometido ao cliente pode ser de 99.9%.

Como Definir SLIs Efetivos: A Base de Tudo

A escolha dos SLIs corretos é fundamental. Um SLI ineficaz levará a SLOs que não refletem a real experiência do usuário, resultando em um falso senso de segurança ou em pânico desnecessário. O processo deve sempre começar com foco no usuário.

Pergunte-se: ‘O que define uma boa experiência para o usuário nesta jornada específica?’

  • Disponibilidade: O usuário consegue acessar o serviço? O SLI mais comum aqui é a contagem de requisições bem-sucedidas (HTTP 2xx) dividida pelo total de requisições. Requisições com falhas rápidas (HTTP 5xx) são claramente eventos ruins.
  • Latência: O serviço é rápido o suficiente? Para uma API de login, talvez 200ms seja um bom limiar. Para uma busca complexa, 1000ms pode ser aceitável. O SLI seria a proporção de requisições abaixo desse limiar.
  • Qualidade/Correção: O serviço está retornando a resposta certa? Este é mais difícil de medir, mas pode ser implementado através de validações no lado do cliente ou verificações de integridade dos dados. Exemplo: proporção de buscas que retornam resultados relevantes versus resultados vazios ou errôneos.
  • Freshness (Atualidade): Quão atualizados estão os dados que o serviço fornece? É crucial para pipelines de dados. O SLI poderia ser o percentual de execuções do pipeline que terminam dentro da janela de tempo esperada.

A Arte de Criar SLOs Realistas e Significativos

Definir um SLO não é apenas escolher um número. É um processo de negociação e alinhamento entre as partes interessadas. Um SLO excessivamente rigoroso (ex: 99.999%) pode paralisar a inovação, pois qualquer mudança se torna arriscada. Um SLO muito frouxo (ex: 99%) pode levar a uma má experiência do usuário e perda de confiança no produto.

O processo ideal envolve:

  1. Identificar as jornadas críticas do usuário: Mapeie os fluxos mais importantes para o seu negócio, como login, busca de produtos, finalização de compra, etc.
  2. Selecionar os SLIs apropriados: Para cada jornada, escolha os SLIs que melhor representam a qualidade da experiência do usuário (latência, disponibilidade, etc.).
  3. Analisar dados históricos: Observe o desempenho passado do seu sistema. Qual tem sido a performance nos últimos meses? Isso fornece uma linha de base realista.
  4. Negociar o alvo: Converse com a equipe de produto e de negócios. Qual é o nível de confiabilidade que satisfaz os usuários sem impedir o lançamento de novas funcionalidades? É aqui que o conceito de Error Budget se torna essencial.

Error Budget: O Combustível para a Inovação

O Error Budget (Orçamento de Erro) é a consequência direta de um SLO. Se o seu SLO de disponibilidade é de 99.9%, isso implica que você tem um Error Budget de 0.1% de indisponibilidade permitida. Esse orçamento não é um objetivo a ser gasto, mas sim um limite de falhas aceitáveis dentro de um determinado período.

Error Budget = 100% - SLO

Este conceito revoluciona a forma como as equipes de engenharia tomam decisões. Ele cria uma estrutura data-driven para balancear confiabilidade e inovação:

  • Se há orçamento de erro sobrando: A equipe tem ‘permissão’ para assumir riscos calculados. É o momento ideal para fazer deploy de novas features, realizar manutenções planejadas, ou experimentar com novas tecnologias.
  • Se o orçamento de erro está se esgotando ou esgotado: A prioridade máxima da equipe muda automaticamente. Todas as atividades de desenvolvimento de novas features são congeladas, e o foco se volta inteiramente para a estabilização do sistema, correção de bugs e melhorias de confiabilidade.

O Error Budget transforma a conversa de ‘Podemos fazer este deploy?’ para ‘Temos orçamento de erro suficiente para arriscar este deploy?’.

Exemplos Práticos: SLOs em Ação

Exemplo 1: API de Pagamentos de um E-commerce

  • Jornada Crítica: Finalizar uma compra.
  • SLI de Latência: Proporção de requisições POST para o endpoint /api/v1/payments que são processadas e retornam uma resposta em menos de 800ms.
  • SLO: 99.5% das requisições de pagamento devem ser concluídas em menos de 800ms, medido sobre uma janela rolante de 30 dias.
  • Error Budget: 0.5% das requisições podem exceder o limiar de 800ms. Isso se traduz em um número concreto de falhas permitidas por mês.

Exemplo 2: Plataforma de Streaming de Vídeo

  • Jornada Crítica: Iniciar a reprodução de um vídeo.
  • SLI de Disponibilidade: Proporção de tentativas de início de streaming que resultam em sucesso (o primeiro fragmento de vídeo é entregue ao cliente) em menos de 2 segundos.
  • SLO: 99.9% das tentativas de início de streaming devem ser bem-sucedidas em menos de 2 segundos, medido sobre uma janela rolante de 28 dias.
  • Error Budget: 0.1% de falhas ou lentidão no início da reprodução são permitidas.

Exemplo 3: Sistema de Processamento de Dados (Batch)

  • Jornada Crítica: Disponibilizar o relatório de vendas do dia anterior.
  • SLI de Freshness (Atualidade): Proporção de dias em que o pipeline de processamento de dados termina sua execução até as 05:00 AM.
  • SLO: Em 95% dos dias do mês, o pipeline de dados deve concluir o processamento até as 05:00 AM.
  • Error Budget: O pipeline pode atrasar e ultrapassar o horário limite em aproximadamente 1 a 2 dias por mês sem que seja considerada uma violação do objetivo.

Monitoramento e Alertas Baseados em SLOs

Uma vez que os SLOs estão definidos, a estratégia de monitoramento e alertas deve ser reformulada. Alertas baseados em causas (ex: ‘CPU > 90%’) geram muito ruído e fadiga. Alertas baseados em SLOs focam no sintoma: o impacto real na experiência do usuário.

A métrica chave para alertas é o Burn Rate do Error Budget, que mede a velocidade com que o orçamento está sendo consumido. Um burn rate de 1 significa que o orçamento está sendo consumido na velocidade esperada para esgotar exatamente no final da janela. Um burn rate de 2 significa que ele será esgotado na metade do tempo.

A estratégia de alertas pode ser dividida:

  • Alerta de alta urgência (Paging/Telefone): Disparado quando o burn rate é muito alto (ex: 10x), indicando que o Error Budget para o mês inteiro pode ser consumido em poucas horas ou dias. Isso exige intervenção humana imediata.
  • Alerta de baixa urgência (Ticket/Slack): Disparado quando o burn rate é consistentemente um pouco acima de 1 (ex: 2x), indicando que o orçamento será esgotado antes do final da janela, mas há tempo (dias ou semanas) para investigar e corrigir sem pânico.

Esta abordagem reduz drasticamente o ruído de alertas e garante que as equipes de plantão só sejam acionadas para problemas que ameaçam significativamente a confiabilidade percebida pelo usuário.

Implementando a Cultura de SLOs na Organização

Adotar SLOs é mais uma mudança cultural do que puramente técnica. Requer colaboração e um entendimento compartilhado entre engenharia, produto e liderança.

Para começar:

  1. Comece pequeno: Escolha um ou dois serviços críticos, mas bem compreendidos, para definir seus primeiros SLOs.
  2. Eduque as equipes: Explique os conceitos de SLI/SLO e Error Budget para todas as partes interessadas. Mostre como isso ajuda a tomar decisões mais inteligentes.
  3. Automatize a medição: Use ferramentas de monitoramento e observabilidade (como Prometheus, Datadog, New Relic) para calcular e visualizar SLIs, SLOs e o consumo do Error Budget em dashboards.
  4. Itere e refine: SLOs não são imutáveis. Revise-os trimestralmente. Eles estão muito fáceis de atingir? Talvez seja hora de apertá-los. Estão sendo constantemente violados? Talvez sejam irrealistas ou indiquem uma necessidade séria de investimento em confiabilidade.

Ao usar SLOs e Error Budgets como uma linguagem comum, as organizações podem finalmente resolver o conflito histórico entre ‘acelerar o desenvolvimento’ e ‘manter a estabilidade’, transformando-o em uma conversa colaborativa e orientada por dados sobre riscos e prioridades.