Saúde do Plantão
O plantão só funciona a longo prazo quando as rotações são justas, os alertas são acionáveis e o tempo de recuperação é protegido. Flotas Python se afogam em ruído quando cada nova tentativa do Celery e reinício do worker do Gunicorn acionam alguém.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
## Checklist de higiene de alertas (mensal)
- [ ] Cada alerta ativo tem URL do runbook na anotação
- [ ] Nenhum alerta disparou >3x no último mês sem ticket
- [ ] Alertas de queima de orçamento baseados em SLO substituem limites estáticos sempre que possível
- [ ] Severidade de horário comercial vs. acordar separadas
- [ ] Chamadas por turno de plantão rastreadas no painel# Preferir queima de SLO em vez de 5xx brutos
- alert: CheckoutErrorBudgetBurn
expr: slo_error_budget_burn_rate{service="orders-api"} > 1
for: 10m
labels:
severity: page
annotations:
runbook: https://github.com/acme/runbooks/orders-api.mdQuando usar isso:
- Engenheiros evitam os horários de plantão ou sofrem burnout
- O mesmo alerta dispara semanalmente sem ação
- MTTR bom, mas moral baixo
- Escalando a equipe sem escalar a carga do pager
Exemplo de Trabalho
"""on_call_metrics.py - rastreador simples de carga de pager para retrospectivas."""
from __future__ import annotations
from dataclasses import dataclass
from datetime import date
@dataclass
class ShiftStats:
engineer: str
week: date
pages: int
actionable: int # levou a trabalho impactando o cliente
false_positive: int
def health_score(stats: ShiftStats) -> str:
if stats.pages == 0:
return "quiet"
action_rate = stats.actionable / stats.pages
if stats.pages > 10 and action_rate < 0.3:
return "noisy_rotation"
if stats.pages > 15:
return "overloaded"
return "healthy"
def main() -> None:
sample = ShiftStats("ana", date(2026, 7, 7), pages=12, actionable=4, false_positive=8)
print(sample.engineer, health_score(sample))
if __name__ == "__main__":
main()O que isso demonstra:
- Rastreia páginas acionáveis vs. falsos positivos por turno
- Pontuação de saúde destaca rotações ruidosas que precisam de ajuste de alerta
- Dados impulsionam a revisão operacional mensal, não anedotas
- Links de runbook nas anotações de alerta reduzem o tempo médio para mitigar
Mergulho Profundo
Como Funciona
- Design da rotação - Primário + secundário, semanas consecutivas máximas, justiça na troca de fuso horário.
- Níveis de alerta - Página (acordar), ticket (dia seguinte), log (apenas painel).
- Paginação baseada em SLO - Taxas de queima de múltiplas janelas reduzem falsos positivos em comparação com limites estáticos.
- Follow-the-sun - Opcional para frotas globais; documento de passagem necessário.
- Recuperação - Compensação com folga ou pagamento; sem cultura de herói para ruído evitável.
Modelo de Rotação Sustentável
| Regra | Diretriz |
|---|---|
| Duração do turno | 1 semana primária, 1 semana secundária |
| Passagem de turno | 15 min de sobreposição, lista de incidentes abertos |
| Máximo de páginas/turno | Investigar se >10 acionáveis ou >20 totais |
| Sombra | Novo contratado acompanha 2 turnos antes de ir sozinho |
| Escalonamento | Secundário após 15 min SEV1 sem IC |
Fontes de Ruído da Frota Python
| Fonte | Correção |
|---|---|
| Tempestade de retentativas do Celery | Alerta sobre idade da fila, não cada falha de tarefa |
| Reinício de worker OOM | Barreira de proteção contra vazamento de memória + alerta de taxa de reinício |
| Timeout do worker Gunicorn | Alerta separado para p99 sustentado |
| Avisos de deprecação | Métrica de log, não página |
Armadilhas
- Alertar sobre contagem de logs de ERRO - Falhas de terceiros acionam todos. Correção: Chamar com queima de SLO com duração
for:. - Sem secundário - Férias se tornam risco de interrupção. Correção: Sempre agendar backup com integração de calendário.
- Runbooks apenas na wiki - Links quebrados às 3 da manhã. Correção: Caminho do runbook no repositório em cada anotação de alerta.
- Ignorar taxa de falsos positivos - Engenheiros silenciam o canal. Correção: Excluir ou corrigir mensalmente alertas com >50% de falsos positivos.
- Sempre a mesma pessoa de plantão - Fator de risco de substituição e burnout. Correção: Ferramenta de rotação impõe justiça; gerente audita trimestralmente.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| SRE dedicado de plantão | Frota grande com múltiplos serviços | Pequena equipe de produto |
| Follow-the-sun | Base de clientes global | MVP de região única |
| Fornecedor de plantão gerenciado | Necessidade de 24/7 imediatamente | Forte cultura de operações interna |
| Sem plantão (horário comercial) | Apenas ferramentas internas | API crítica para receita |
FAQs
Quantas páginas por semana são demais?
Investigar quando o total de páginas excede 10 por turno ou a taxa acionável cai abaixo de 30%.
Alertas de staging devem disparar?
Apenas ticket, a menos que staging espelhe a simulação de drill de SLO de produção. Nunca acordar para não produção por padrão.
Como integrar novos plantonistas?
Acompanhar turnos, ler runbooks, simular incidente em dia de jogo, parear na primeira página real.
E os trabalhos de treinamento de ML?
Falhas em lote geram ticket; chamar apenas se bloquear inferência de produção ou SLA de dataset.
Gerentes fazem plantão?
Líderes técnicos devem periodicamente sentir a dor e priorizar a higiene de alertas.
Como lidar com sobreposição de férias?
Trocar turnos na ferramenta de calendário; nunca deixar lacuna. O secundário escala automaticamente.
A IA pode resumir incidentes para passagem de turno?
Sim para resumos de log; o humano ainda é o responsável pelo registro de decisões no ticket.
Quais métricas para a liderança?
Páginas por engenheiro, MTTR, taxa de falsos positivos, barreiras de proteção abertas de post-mortems.
Como reduzir ruído específico do Python?
Ajustar alertas de timeout do Gunicorn, SLOs de fila do Celery e separar taxas de queima de infraestrutura das de aplicação.
O plantão é opcional para seniores?
Não - propriedade compartilhada. Seniores mentoram juniores durante turnos de sombra.
Relacionado
- Playbooks de Resposta a Incidentes - o que fazer quando acionado
- Transformando Incidentes em Barreiras de Proteção - reduzir páginas repetidas
- Depuração de Produção - kit de ferramentas de primeira resposta
- Métricas - instrumentação de SLO
- Onboarding de Equipe - integrar novos proprietários
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.