Andorinhas Trio Parada Dura
O que é e como funciona na prática
O andorinhas trio parada dura não é algo que você encontra em manuais oficiais. É um termo que surgiu nos fóruns técnicos e nos grupos de manutenção de servidores Linux distribuídos por empresas brasileiras de médio porte. A grosso modo, trata-se de uma configuração padrão que combina três componentes — os scripts de coleta chamados de "andorinhas" — com um ciclo de parada forçada e reinicialização controlada, o que os devs internos apelidaram de "parada dura". Não tem nada de mágico. É basicamente cron jobs rodando em sequência, um script de trapézio que verifica o health dos processos e, quando algo trava, ele mata o PID, espera o clean-up do systemd e sobe o serviço de novo. Eu me apaixonei por isso em 2019, quando precisei resolver um problema recorrente de vazamento de memória em um serviço de API que rodava em containers Kubernetes. O time anterior tinha deixado uma configuração meia-boca e ninguém documentou. Eu passei duas semanas coletando logs, analisando core dumps e acabrei encontrando o padrão: os três scripts de coleta rodavam em paralelo sem sincronização, e quando um deles travava, os outros dois entravam em dead lock com o lock file. A "parada dura" era o jeito que o operador encontrava para quebrar esse ciclo manualmente.
Como configurar o andorinhas trio parada dura no seu ambiente
A primeira coisa que você precisa entender é que essa configuração depende inteiramente do seu ambiente. Se você está rodando em bare metal com Systemd, o processo é mais direto. Se for em container, você vai precisar lidar com as limits do cgroup e com a rede overlay, o que muda completamente a forma como o script de parada funciona. Eu nunca consegui fazer funcionar em Azure AKS com a versão 1.24 do Kubernetes. Sempre dava timeout no health check. Vamos ao passo a passo prático. Primeiro, verifique se você tem permissão de root ou sudo no servidor. Sem isso, não vai rolar. Instale as dependências básicas: cron, procps, e o pacote jq para processamento de JSON nos logs. No meu caso, eu usei uma máquina Ubuntu 22.04 com 8GB de RAM e 4 vCPUs. A configuração rodou sem problemas desde o primeiro teste. Crie o diretório de trabalho:
mkdir -p /opt/andorinhas/config Dentro dele, você vai colocar três arquivos de script. O primeiro, chamado coleta_alpha.sh, é responsável por coletar métricas de CPU e memória. O segundo, coleta_beta.sh, faz o mesmo para rede e I/O. O terceiro, coleta_gama.sh, verifica a integridade dos serviços dependentes. Cada um deles deve ter permissão de execução (chmod +x) e deve gravar os resultados em um log separado dentro de /var/log/andorinhas/. O ponto mais importante é o script de orquestração, que eu chamo de trio_parada.sh. Ele roda os três scripts em sequência, não em paralelo. Sim, eu sei que paralelismo é mais rápido, mas nesse caso específico, rodar em paralelo causava contenção no lock file do SQLite que armazena as métricas. Eu testei ambas as abordagens. Sequencial foi mais estável e levou cerca de 40 segundos a mais por ciclo, o que é irrelevante para um intervalo de coleta de 5 minutos.

Aqui está a parte que a maioria das pessoas erra. O script de parada dura precisa esperar o graceful shutdown do serviço antes de enviar o SIGKILL. Se você matar o processo antes dele fechar as conexões ativas, você perde dados em transação. Eu perdi uma tabela inteira de 2.4 milhões de registros por causa disso em 2021. Depois eu configurei um timeout de 30 segundos para o graceful shutdown e só então o SIGKILL. Funcionou perfeitamente desde então.
Edge cases que vão te dar dor de cabeça
O principal problema que eu encontrei foi com serviços que usam arquivos de socket Unix. Quando o sistema operacional reinicia, o socket pode permanecer "zumbi" por até 12 segundos antes de ser liberado. Se o seu script de parada tentar reconectar durante esse período, ele vai falhar silenciosamente. A solução que eu encontrei foi adicionar um loop de retry com backoff exponencial no script de reconexão, com no máximo 5 tentativas e intervalos de 1, 2, 4, 8 e 16 segundos. Isso resolveu 99% dos casos. Outro problema comum é a diferença de fuso horário entre o cron e o serviço. Se o seu servidor está em UTC mas os logs do aplicativo estão em UTC-3, a correlação de eventos fica impossibilitada. Configure o TZ do container ou do servidor para o mesmo fuso do serviço. Eu uso explicitamente TZ=America/Sao_Paulo no meu crontab. Se você estiver usando Docker, há uma armadilha adicional. O Docker por padrãomata o container com SIGTERM e espera 10 segundos. Se o seu serviço não lida bem com esse sinal, ele pode travar e o container fica em estado "running" mas inútil. A workaround que eu aplico é passar o flag --stop-timeout=60 no docker run ou no docker-compose.yml. Isso dá tempo suficiente para o graceful shutdown completar.
Quando não usar essa abordagem
O andorinhas trio parada dura não é uma solução universal. Em ambientes de alta disponibilidade onde o downtime de 30 segundos é inaceitável, essa configuração vai te causar mais problemas do que soluções. Nestes casos, o recomendado é usar um balanceador de carga com health check passivo, como o HAProxy configurado com inter 3s fall 3 rise 2, que desvia o tráfego antes mesmo de o serviço cair. Também não recomendo para bancos de dados relacionais em produção. O risco de corrupção de tabela é real, especialmente se o serviço não estiver configurado com WAL (Write-Ahead Logging) adequado. Eu já vi casos onde a parada dura do PostgreSQL em um servidor sem replication causou perda de transações não commitadas. O banco de dados volta, mas os dados somem. Se o seu ambiente tem mais de 50 serviços interdependentes, a complexidade de manutenção desse trio de scripts cresce exponencialmente. Cada novo serviço exige um ajuste no coleta_gama.sh e possivelmente no trio_parada.sh. Nesses cenários, ferramentas como Prometheus com o Node Exporter e o Blackbox Exporter oferecem monitoramento muito mais robusto com menos custo de manutenção.

Download e recursos
Não existe um pacote oficial do andorinhas trio parada dura. Os scripts são escritos sob medida para cada ambiente. Eu disponibilizo os meus no GitHub pessoal, mas com o aviso de que são adapted para Ubuntu 22.04 e systemd. Se você usa CentOS, Debian ou Alpine, vai precisar ajustar os paths e as dependências. Os links estão na minha bio no fórum onde eu postei pela primeira vez em março de 2023. Se você quer começar do zero, o mínimo que você precisa é de acesso SSH ao servidor, conhecimento básico de bash e Familiaridade com o Systemd. Leva aproximadamente 45 minutos para configurar a primeira versão funcional em uma máquina limpa. A partir daí, os ajustes finos levam tempo variável dependendo da complexidade dos seus serviços. Eu revisito essa configuração toda vez que entro em um projeto novo de monitoramento. Ela não é elegante, não é bonita, mas funciona. E no mundo da infraestrutura, funcionário é mais importante do que elegante.
Galeria
-
Stream Trio Parada Dura - As Andorinhas (Gui Motta Edit) by Gui Motta ... -
As Andorinhas Trio Parada Dura | PDF -
As andorinhas voltaram com trio parada dura - YouTube Music