logrotate num VPS: impedir que os arquivos de log encham o disco

VPS e Servidores·· 110 visualizações· 3 min de leitura

A resposta curta: o logrotate é o programa que, todos os dias, pega nos arquivos de log, guarda os antigos comprimidos e começa um novo, apagando os mais velhos. Os serviços do sistema já vêm configurados. Os seus (uma aplicação, um script, um contêiner) não, e é quase sempre um deles que enche o disco. Basta um arquivo de configuração de meia dúzia de linhas.

Num VPS com acesso root a manutenção dos logs é sua. Quando o disco enche, o site e o banco de dados deixam de escrever e começam os erros estranhos. O sintoma e o primeiro passo estão em Sem espaço no disco: ver o que o enche.

Primeiro, ver qual é o arquivo gordo

1 Veja os maiores arquivos de log: sudo du -ah /var/log | sort -rh | head -15. Os caminhos dos logs de cada serviço estão em Onde estão os logs num VPS Linux.
2 Veja o que o journal do sistema ocupa: journalctl --disk-usage. Para o encolher, sudo journalctl --vacuum-size=200M guarda só o mais recente até esse tamanho.
3 Se usa contêineres, os logs deles ficam em outro lugar: veja Docker a encher o disco.

Como pôr um log seu a rodar

Crie um arquivo em /etc/logrotate.d/ com o nome da aplicação, por exemplo /etc/logrotate.d/minha-app, com este conteúdo (trocando o caminho pelo dos seus logs):
/var/log/minha-app/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
copytruncate
}

Linha O que faz
weekly Roda uma vez por semana. Também existem daily e monthly. Para rodar por tamanho, use size 50M.
rotate 4 Guarda quatro arquivos antigos e apaga o mais velho.
compress e delaycompress Comprime os antigos, deixando o último sem comprimir para o programa que ainda o possa estar lendo.
missingok e notifempty Não dá erro se o arquivo não existir e não roda um arquivo vazio.
copytruncate Copia o log e esvazia o original, em vez de o renomear. Serve para programas que mantêm o arquivo aberto e não sabem abrir outro.

Testar antes de confiar

1 Ensaio sem mexer em nada: sudo logrotate -d /etc/logrotate.d/minha-app. O -d mostra o que faria, sem o fazer.
2 Forçar uma rotação agora: sudo logrotate -f /etc/logrotate.d/minha-app. Depois veja a pasta: deve haver um arquivo novo e um comprimido.
3 Deixe rodar: o sistema chama o logrotate uma vez por dia, sozinho. Não precisa de criar um cron para ele.
Não apague com rm um log que um programa tem aberto. O arquivo some da pasta, mas o espaço só volta quando o programa o fecha, e o disco continua cheio. Para esvaziar sem apagar use sudo truncate -s 0 /caminho/do/log.
Num contêiner, o limite certo está na própria configuração do Docker: o tamanho máximo e o número de arquivos do log de cada contêiner. Veja Docker num VPS com segurança. Os comandos deste artigo são seus: o nosso suporte não os escreve nem os repara (veja Até onde vai o nosso suporte).

O disco do VPS enche e não percebe de onde vem? Abra um pedido com o resultado do primeiro comando.

Abrir pedido de suporte

VEJA TAMBÉM

Sem espaço no disco: ver o que enche o VPS

Onde estão os logs num VPS Linux

Docker a encher o disco: imagens, volumes e logs

Ver o que usa CPU, memória e disco no VPS

PRODUTO RECOMENDADO

Servidor VPS com acesso root

Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.