Pular para o conteúdo
Observability 13 min read

SRE na Prática: SLOs, Error Budgets e Incident Management

Aprenda a implementar práticas de Site Reliability Engineering, definir SLOs efetivos, gerenciar error budgets e responder a incidentes.

Por Equipe Integr8 01/01/2025

O que é SRE?

Site Reliability Engineering (SRE) é uma disciplina de engenharia de software aplicada a operações. Criada pelo Google, combina desenvolvimento de software com administração de sistemas para criar sistemas altamente confiáveis e escaláveis.

💡Princípio Fundamental

“SRE é o que acontece quando você pede a um engenheiro de software para projetar uma operação.” - Ben Treynor, VP of Engineering @ Google

Hierarquia de Confiabilidade

📊

Monitoring

Saber o que está acontecendo no sistema em tempo real

🚨

Alerting

Ser notificado quando algo está errado

🔥

Incident Response

Responder e mitigar problemas rapidamente

📋

Postmortem

Aprender com falhas e prevenir recorrência

SLIs, SLOs e SLAs

Definições

SLI mede, SLO define objetivo interno, SLA é o compromisso externo
100%
Hierarquia SLI, SLO e SLA

SLI mede, SLO define objetivo interno, SLA é o compromisso externo

Tipos Comuns de SLIs

    Definindo SLOs Efetivos

    # Exemplo de especificação de SLO
    slo:
      name: "API Principal"
      description: "SLO para a API de produção"
    
      indicators:
        - name: availability
          type: ratio
          good_events: 'http_requests_total{status=~"2..|3.."}'
          total_events: 'http_requests_total'
    
        - name: latency
          type: threshold
          metric: 'http_request_duration_seconds'
          threshold: 0.2  # 200ms
          percentile: 99
    
      objectives:
        - indicator: availability
          target: 99.9
          window: 30d
    
        - indicator: latency
          target: 99.0
          window: 30d
    
      error_budget:
        calculation: "100% - SLO target"
        # 99.9% availability = 0.1% error budget
        # Em 30 dias = ~43 minutos de downtime permitido

    Error Budgets

    Error Budget é a quantidade de “erro” permitida antes de violar o SLO. É uma ferramenta para balancear confiabilidade e velocidade de inovação.

    Cálculo do Error Budget

    Error Budget = 100% - SLO Target
    
    Exemplo para SLO de 99.9% availability em 30 dias:
    - Error Budget = 0.1%
    - Minutos no mês = 30 * 24 * 60 = 43,200 minutos
    - Budget em minutos = 43,200 * 0.001 = 43.2 minutos
    
    Se consumiu 20 minutos com incidentes:
    - Budget restante = 43.2 - 20 = 23.2 minutos
    - Budget consumido = 46%

    Políticas de Error Budget

    error_budget_policy:
      # Quando budget está saudável (< 50% consumido)
      healthy:
        actions:
          - "Priorizar features e inovação"
          - "Experimentação permitida"
          - "Deployments normais"
    
      # Quando budget está em alerta (50-80% consumido)
      warning:
        actions:
          - "Reduzir frequência de deploys"
          - "Priorizar correção de bugs"
          - "Aumentar review de changes"
    
      # Quando budget está crítico (> 80% consumido)
      critical:
        actions:
          - "Freeze de features"
          - "Apenas bug fixes"
          - "Todos focam em confiabilidade"
    
      # Quando budget estourou
      exhausted:
        actions:
          - "Freeze total de deploys"
          - "Postmortem obrigatório"
          - "Ação executiva necessária"
    Benefício

    Error budgets transformam a tensão entre “mover rápido” e “ser confiável” em uma decisão baseada em dados.

    Incident Management

    Severidades de Incidente

    SeverityImpactoRespostaExemplo
    SEV1Serviço completamente downImediata, all-handsAPI principal não responde
    SEV2Degradação significativa< 15 minLatência 10x acima do normal
    SEV3Impacto limitado< 1 horaFeature secundária quebrada
    SEV4MínimoHorário comercialBug cosmético em produção

    Processo de Resposta

    Processo de resposta a incidentes do Detection ao Postmortem
    100%
    Fluxo de Resposta a Incidentes

    Processo de resposta a incidentes do Detection ao Postmortem

    Template de Postmortem

    # Postmortem: [Título do Incidente]
    
    ## Resumo
    - **Data**: 2025-01-02
    - **Duração**: 45 minutos
    - **Impacto**: 15% dos usuários afetados
    - **Severidade**: SEV2
    
    ## Timeline
    - 14:00 - Deploy da versão 2.3.1
    - 14:15 - Alertas de latência disparados
    - 14:20 - IC declarado, investigação iniciada
    - 14:35 - Root cause identificada (query N+1)
    - 14:45 - Rollback executado
    - 14:50 - Serviço normalizado
    
    ## Root Cause
    Query N+1 introduzida em nova feature causou
    sobrecarga no banco de dados.
    
    ## O que funcionou
    - Alertas detectaram o problema em 15 minutos
    - Rollback foi executado em menos de 10 minutos
    - Comunicação clara durante o incidente
    
    ## O que não funcionou
    - Testes de carga não cobriram o cenário
    - Dashboard de DB não era visível para o time
    
    ## Action Items
    | Item | Owner | Prazo |
    |------|-------|-------|
    | Adicionar teste de carga para N+1 | @dev | 2025-01-09 |
    | Incluir dashboard DB no runbook | @sre | 2025-01-05 |
    | Review de queries em code review | @lead | Imediato |
    
    ## Lições Aprendidas
    - Testes de carga devem simular padrões reais de uso
    - Dashboards devem ser facilmente acessíveis durante incidentes

    On-Call e Alerting

    Boas Práticas de Alertas

    🎯

    Actionable

    Todo alerta deve ter uma ação clara associada

    Urgente

    Só alertar se precisa de ação humana imediata

    📊

    Baseado em SLO

    Alertar quando error budget está sendo consumido

    🔇

    Sem ruído

    Eliminar alertas que não resultam em ação

    Burn Rate Alerts

    # Alertas baseados em burn rate (consumo de error budget)
    groups:
      - name: slo-alerts
        rules:
          # Alert se queimando budget 14x mais rápido que o normal
          # (consumiria todo budget em ~2 dias)
          - alert: SLOErrorBudgetBurnHigh
            expr: |
              (
                sum(rate(http_requests_total{status=~"5.."}[1h]))
                /
                sum(rate(http_requests_total[1h]))
              ) > (14 * 0.001)  # 14x o budget rate de 0.1%
            for: 2m
            labels:
              severity: critical
            annotations:
              summary: "High error budget burn rate"
    
          # Alert se queimando 3x mais rápido (consumiria em ~10 dias)
          - alert: SLOErrorBudgetBurnMedium
            expr: |
              (
                sum(rate(http_requests_total{status=~"5.."}[6h]))
                /
                sum(rate(http_requests_total[6h]))
              ) > (3 * 0.001)
            for: 30m
            labels:
              severity: warning
    ⚠️Evite Alert Fatigue

    Se o time ignora alertas porque há muitos falsos positivos, você tem um problema sério. Cada alerta ignorado é um risco.


    Quer implementar práticas de SRE na sua organização? Fale com nossos especialistas para uma consultoria personalizada.