Do alerta a resolução: construindo runbooks vivos com automação na prática
Bruno CarrilhosCTO · EficifyPublicado em 7 de julho de 2026 · 7 min de leitura
CompartilharSeguir
Você já acordou às 3h da manhã, olhou para um alerta crítico e pensou: 'Isso de novo? Será que alguém documentou o que fazer?' Na maioria das equipes, a resposta honesta é: documentaram, mas está em um Confluence empoeirado, desatualizado há 6 meses, e ninguém consegue executar sem ligar para o sujeito que montou aquilo em 2019. Runbooks existem, mas não funcionam quando você precisa deles. Este artigo desmonstra mitos comuns sobre automação de runbook e mostra como construir procedimentos que realmente resolvem incidentes, não apenas os descrevem.
Mito 1: "Runbook é só documentação, então colocamos no wiki e está resolvido"
A crença de que runbook é sinônimo de documento está na raiz de 80% dos fracassos de incident response que já presenciei. Um PDF ou página de wiki com passos descritos em linguagem natural não é um runbook: é um manual de instruções para situações de calmaria. Em produção, às 2h da manhã, com 50 mil usuários afetados, você não quer ler, quer agir.
Realidade: Runbook é código executável. Um runbook vivo é um script ou automação que pode ser disparado por um alerta, executado via ChatOps, ou invoked programaticamente por um sistema de incident management. O procedimento está codificado, versionado, testado e pronto para execução repetível.
A diferença prática é brutal. Considere um cenário real: database de réplica com atraso de replicação superior a 30 segundos.
Abordagem tradicional (wiki):
1. Verificar latência de rede entre dbprimary e dbreplica
2. Checar utilização de IOPS no primary
3. Se problema persistir, reiniciar o serviço de replicação
4. Ligar para o DBA de plantão
Abordagem com runbook automatizado:
#!/usr/bin/env bash# runbook/replicationlagrecovery.shset euo pipefail
REPLICA_HOST="${REPLICA_HOST:?}"
THRESHOLD_SECONDS=30
# Step 1: Diagnóstico automático
current_lag=$(mysql h "$REPLICA_HOST" e "SELECT MAX(ABS(TIMESTAMPDIFF(SECOND, NOW(), Read_Master_Log_Pos))) as lag FROM slave_master_info();" N)
echo"Lag atual: ${current_lag}s"# Step 2: Verificação de conectividadeif ! mysql h "$REPLICA_HOST" e "SELECT 1" >/dev/null 2>&1; thenecho"ERRO: Réplica inacessível"# Dispara escalação automática
opsgenie alerts create message "Réplica $REPLICA_HOST inacessível" tags "runbook,autoescalation"exit 1
fi# Step 3: Se lag > threshold, tenta recuperaçãoif [ "$current_lag" gt "$THRESHOLD_SECONDS" ]; thenecho"Lag acima do threshold. Tentando STOP SLAVE; START SLAVE;"
mysql h "$REPLICA_HOST" e "STOP SLAVE; START SLAVE;"sleep 5
new_lag=$(mysql h "$REPLICA_HOST" e "SELECT MAX(ABS(TIMESTAMPDIFF(SECOND, NOW(), Read_Master_Log_Pos))) as lag FROM slave_master_info();" N)
echo"Lag após recuperação: ${new_lag}s"fi
O segundo bloco não é documentação sobre o que fazer: é o que fazer, pronto para ser executado por qualquer pessoa, a qualquer hora, sem depender de interpretação.
Fluxo comparativo entre resposta manual e automatizada
Mito 2: "Automação de runbook é luxo de empresa grande. Nossa equipe pequena não precisa"
teams pequenas frequentemente rationalizam a omissão de práticas de SRE maduras por não terem "escala suficiente". Esse raciocínio inverte a lógica correta. Quanto menor a equipe, maior a dependência de cada indivíduo e menor a capacidade de absorver erros evitáveis.
Realidade: Automação de runbook tem ROI imediato em qualquer escala. Os custos são menores do que você imagina: um script shell, um workflow de Ansible, ou um playbook de Rundeck resolve a maioria dos casos. Ferramentas como o Cloudflare Workers, scripts serverless, ou até GitHub Actions com triggers de incident management são opções viáveis com custo marginal zero para a maioria dos times.
O cálculo que você deve fazer é simples:
Cenário
MTTR manual
MTTR automatizado
Economia/incidente
1 incidente/mês
90 min
15 min
75 min
6 incidentes/mês
540 min/mês
90 min/mês
7.5h/mês
Custo/oncall (R$200/h)
R$1.800/mês
R$300/mês
R$1.500/mês
Um único incidente de severidade alta que você poderia ter resolvido em 10 minutos, mas que custou 2 horas por falta de automação, frequentemente tem impacto financeiro superior a meses de investimento em runbook automation.
Mito 3: "Alerta inteligente substitui a necessidade de runbooks"
Este mito é particularmente perigoso porque vem de uma confusão entre detecção e resposta. Ferramentas de AIOps e alerting avançado são excelentes para identificar anomalias, correlacionar eventos e reduzir ruído. O que elas não fazem é executar a correção.
Realidade: Alertamento e runbook são ortogonais. Um alerta diz que algo está errado. Um runbook diz o que fazer sobre isso. Você pode ter o sistema de monitoramento mais sofisticado do mundo e, sem automação de resposta, ainda vai depender de humanos para interpretar e agir.
A tendência de autohealing (autoresolução de problemas) é real e valiosa, mas tem limites claros:
Pode fazer: Reiniciar um processo, limpar cache, escalar instâncias, pausar um job travado
Não pode fazer: Tomar decisão de rollback de migration, avaliar impacto de negócio, comunicar stakeholders, decidir sobre escalation para equipe de produto
O runbook automatizado bem projetado conhece esses limites e inclui pontos de decisão humana com gates claros.
Mito 4: "Levamos tempo demais para criar runbooks, então não vale o esforço"
O argumento de que runbooks são custosos de manter é verdadeiro quando você os trata como documentos. É falso quando você os treata como código.
Realidade: Runbooks seguem o mesmo ciclo de vida que código de produção e recebem os mesmos benefícios: CI/CD, testes automatizados, code review, versionamento, e rollback.
# .github/workflows/runbooktests.ymlname:RunbookSmokeTestson:push:paths:'runbooks/**''runbooks/**/*.sh'jobs:test:runson:ubuntulateststeps:uses:actions/checkout@v4name:Validarsintaxedetodososrunbooksrun:|
for script in runbooks/**/*.sh; do
bash n "$script" || exit 1
done
name:Testarrunbookscomdryrunenv:DRY_RUN:"true"run:|
# Testa lógica sem executar em produção
./runbooks/replicationlagrecovery.sh dryrun
O custo real de não ter runbook automatizado é pago em horas de engenharia durante incidentes, em burnout de oncall, e em erros de execução sob pressão que causam incidentes secundários.
Mito 5: "Uma vez criado, o runbook está pronto para sempre"
Runbooks estáticos são um antipattern. Em produção, sua infraestrutura, serviços e dependências mudam constantemente. Um runbook criado há 6 meses provavelmente referencia IPs que não existem mais, APIs que mudaram de endpoint, ou flags de configuração que foram removidas.
Realidade: Runbooks são artefatos vivos que devem ser tratados como firstclass citizens do seu codebase. Isso significa:
Testes automatizados validam que o runbook ainda funciona após mudanças de infraestrutura
Alertas de staleness identificam runbooks não executados em X meses
Métricas de uso mostram quais runbooks foram disparados e quantas vezes
Revisões periódicas (trimestrais ou após cada uso) garantem relevância
** ownership claro**: cada runbook tem um dono responsável pela sua manutenção
# stale_runbook_detector.pyfrom datetime import datetime, timedelta
from dataclasses import dataclass
@dataclassclassRunbook:
path: str
last_modified: datetime
last_executed: datetime | None
owner: strdefcheck_staleness(runbook: Runbook, max_days: int = 90) > bool:
is_modified_stale = (datetime.now() runbook.last_modified).days > max_days
never_executed = runbook.last_executed isNone# Flag se nunca executado ou não modificado após mudança de infrareturn never_executed or is_modified_stale
A decisão técnica: do alerta a resolução em 3 camadas
A arquitetura de runbook automation madura opera em três camadas:
Detecção (observabilidade): PagerDuty, OpsGenie, ou equivalente + alertas bem calibrados com SLOs
Orquestração (runbook engine): Ferramenta que executa os runbooks: Rundeck, Ansible Tower, ou custom (Python/Go com handlers de evento)
Execução (automação): Scripts idempotentes, testes, e integração com infraestrutura (Terraform, Kubernetes, APIs de cloud)
A integração entre essas camadas é o que transforma um alerta em uma resolução automática. Quando você dispara um alerta de "disk usage > 90% on prodapi03", o runbook não deveria esperar que alguém lesse o alerta e executasse passos manuais. O runbook deveria:
Identificar qual volume está cheio
Listar os maiores arquivos nos últimos 7 dias
Se menemukan arquivos de log antigos, fazer rotação
Se o problema persistir, expandir o volume automaticamente (com guardrails de custo)
Notificar o canal de #infraops com resumo da ação tomada
Esse fluxo, executado em 30 segundos, é o que separa equipes de SRE maduras de equipes que ainda estão firefightering manualmente.
Conclusão: runbook que não executa é só ficção
A armadilha fundamental é tratar runbook como deliverable de documentação. Se o procedimento não pode ser executado por qualquer pessoa de plantão, às 3h da manhã, sem precisar ligar para o autor original, então você não tem um runbook: tem um desejo.
A decisão técnica é clara: invista em automação de runbook para seus top 5 incidentes mais frequentes. Meça o MTTR antes e depois. Comprove o ROI. Expanda gradualmente. Em 6 meses, você terá uma biblioteca de runbooks vivos que transforma seu oncall de evento estressante em processo repetível e confiável.
A diferença entre uma equipe que sobrevive a incidentes e uma que os resolve está em uma pergunta: seu runbook executa, ou só documenta?
Se sua equipe ainda executa procedimentos manuais em incidentes críticos, podemos mostrar como automatizar os runbooks mais críticos em 30 dias. Sem compromisso.
Executivo de tecnologia, cofundador da Eficify, com mais de 20 anos de experiência na criação, evolução e sustentação de soluções digitais. Atua nas áreas de desenvolvimento de software, dados, inteligência artificial, cloud computing, cibersegurança e operações de missão crítica. É bacharel em Ciência da Computação, com formação em Ciência de Dados e Inteligência Artificial e pós-graduação em Segurança da Informação.