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

A resposta curta: o logrotate é o programa que, todos os dias, pega nos ficheiros 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 contentor) não, e é quase sempre um deles que enche o disco. Basta um ficheiro 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 a base 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 ficheiro gordo

1 Veja os maiores ficheiros 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 contentores, os logs deles ficam noutro sítio: veja Docker a encher o disco.

Como pôr um log seu a rodar

Crie um ficheiro 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 ficheiros 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 a ler.
missingok e notifempty Não dá erro se o ficheiro não existir e não roda um ficheiro vazio.
copytruncate Copia o log e esvazia o original, em vez de o renomear. Serve para programas que mantêm o ficheiro 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 ficheiro novo e um comprimido.
3 Deixe correr: 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 ficheiro 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 contentor, o limite certo está na própria configuração do Docker: o tamanho máximo e o número de ficheiros do log de cada contentor. 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 456,30 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?