Marcio Cunha

Disco cheio por logs? Como rotacionar com o logrotate

Aprenda a configurar políticas de retenção e compressão de logs em servidores de produção usando o logrotate para evitar falhas por disco cheio.

Marcio Cunha•5 min
Também disponível em:EspañolEnglish
Resumo
  • O crescimento descontrolado de arquivos de log em servidores de produção costuma esgotar o espaço em disco e derrubar aplicações críticas de forma inesperada.
  • O utilitário logrotate automatiza o ciclo de vida dos arquivos de texto gerados por serviços do sistema e aplicações personalizadas sem exigir reinicializações.
  • Políticas de retenção eficientes equilibram a necessidade de auditoria histórica com a preservação estrita do armazenamento disponível no servidor.
  • A compressão agressiva com algoritmos como gzip ou zstd reduz drasticamente o volume ocupado pelos registros antigos sem perda de dados essenciais.
  • Testar as regras de rotação manualmente antes de colocá-las em produção previne falhas silenciosas na entrega de novos arquivos e perda de rastreabilidade.

O perigo silencioso do disco cheio por logs em produção

Quando mantemos aplicações rodando em servidores de produção, a geração contínua de registros textuais é fundamental para monitorar a saúde do sistema e auditar acessos. No entanto, sem uma estratégia adequada de gestão, esses arquivos crescem de maneira exponencial até esgotar todo o espaço disponível no disco rígido. Na prática, isso significa que o sistema operacional perde a capacidade de gravar arquivos temporários, bancos de dados travam por falta de espaço para transações e o servidor inteiro simplesmente para de responder. É um cenário clássico onde o próprio mecanismo criado para nos ajudar a diagnosticar problemas acaba gerando uma pane geral por negligência operacional.

Para evitar esse tipo de desastre, a ferramenta padrão nos sistemas operacionais baseados em Linux é o utilitário chamado logrotate, um programa auxiliar responsável por automatizar a limpeza, compressão e exclusão de arquivos de registro antigos. Antes de implementarmos qualquer política de retenção, é muito útil compreender como diagnosticar o consumo de espaço em disco no ambiente. Conforme detalhamos em nosso artigo sobre Docker sem espaço? Como limpar o cache e liberar disco, monitorar o uso de blocos e inodes é o primeiro passo para evitar paradas inesperadas nos servidores.

Como funciona o ciclo de vida dos logs com o logrotate

O logrotate opera de forma programada, geralmente através de uma tarefa agendada no sistema que roda todos os dias nas primeiras horas da manhã. O processo básico consiste em pegar o arquivo de log atual, renomeá-lo adicionando um sufixo numérico ou data, criar um arquivo vazio novinho em folha para que a aplicação continue escrevendo sem interrupções e, opcionalmente, compactar o arquivo antigo para economizar espaço. Esse ciclo evita que um único arquivo de texto atinja dezenas de gigabytes, o que tornaria a abertura e a busca por falhas uma tarefa extremamente lenta para qualquer engenheiro.

Outro ponto crítico desse processo é garantir que a aplicação em execução perceba que o arquivo foi renomeado e comece a escrever no novo arquivo criado pelo sistema. Se a aplicação mantiver o descritor do arquivo antigo aberto na memória, ela continuará despejando dados no arquivo renomeado, ocupando espaço em disco da mesma forma até que o processo seja reiniciado. Para resolver isso, o logrotate utiliza diretivas de pós-processamento, como a instrução copytruncate ou sinais enviados diretamente ao serviço para que ele reabra os arquivos de log de forma limpa e segura.

Escrevendo uma política de retenção robusta para servidores críticos

A configuração do logrotate fica centralizada em arquivos localizados no diretório do sistema, onde cada aplicação pode ter sua própria regra personalizada. Vamos analisar um exemplo prático de configuração para uma aplicação web corporativa que gera logs intensos diariamente em um servidor de produção. Esta política garante rotação diária, mantém o histórico dos últimos trinta dias, compacta os arquivos antigos e impede que a ausência temporária de um arquivo cause erros no utilitário.

/var/log/minha-aplicacao/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 www-data adm
sharedscripts
postrotate
/usr/bin/systemctl reload minha-aplicacao.service > /dev/null 2>&1
endscript
}

Cada linha desse bloco de configuração possui um papel determinante na estabilidade do servidor. A diretiva daily força a verificação e rotação a cada 24 horas, enquanto rotate 30 define que apenas os trinta arquivos mais recentes serão mantidos, apagando automaticamente os mais antigos. A opção compress compacta os registros com o utilitário gzip, e delaycompress garante que o arquivo rotacionado ontem só seja compactado na rotação de amanhã, evitando que processos de gravação muito recentes entrem em conflito com a descompressão. Além disso, a diretiva create define as permissões exatas de segurança para o novo arquivo gerado.

Validando e testando políticas de logrotate antes de aplicar

Colocar uma nova regra de rotação diretamente em um ambiente de produção sem testes prévios é um risco desnecessário que pode corromper registros ou interromper o fluxo de escrita da aplicação. O logrotate oferece uma chave de execução em modo de simulação, conhecida como modo verboso e de teste, que permite verificar exatamente quais ações o programa executará sem alterar nenhum arquivo real no disco. Executar essa verificação na linha de comando é uma etapa obrigatória de qualquer processo de mudança de infraestrutura.

Para realizar o teste prático da configuração que criamos, executamos o comando de simulação forçada apontando para o arquivo de configuração específico. Na prática, isso significa rodar a instrução abaixo no terminal do servidor e analisar atentamente cada linha de saída gerada pelo sistema.

sudo logrotate -d -f /etc/logrotate.d/minha-aplicacao

Analisar o relatório gerado por esse comando ajuda a identificar erros de sintaxe, caminhos incorretos para os arquivos de log ou falhas na execução dos scripts de reinicialização dos serviços. Quando lidamos com sistemas complexos, manter a visibilidade sobre o comportamento dos recursos é tão importante quanto solucionar o problema imediato. Caso você enfrente problemas relacionados ao comportamento de serviços ou gargalos de E/S na máquina, vale a pena conferir estratégias adicionais em nosso guia sobre Container Docker travado? Como inspecionar logs e volumes para ampliar o seu leque de ferramentas de diagnóstico. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre Container sem rede? Como debugar o CNI no Kubernetes.

Considerações finais sobre a automação do ciclo de vida de logs

Gerenciar o armazenamento de logs em servidores de produção não se resume a liberar espaço em disco de vez em quando; trata-se de construir uma fundação operacional resiliente e previsível. A adoção correta do logrotate combinada com testes rigorosos garante que o histórico de auditoria e depuração permaneça acessível sem comprometer a estabilidade da infraestrutura subjacente. Ao planejar cuidadosamente a frequência, a retenção e a compressão dos dados gerados pelas aplicações, a equipe de engenharia elimina surpresas desagradáveis e assegura que o sistema continue operando com alta performance, mesmo sob cargas elevadas de trabalho.