Logrotate na VPS Linux: como controlar o tamanho dos logs e evitar disco cheio

Tempo de leitura: 3 minutos

Um dos motivos mais comuns de VPS parada por falta de espaço é um arquivo de log que cresceu sem parar. O logrotate existe justamente para isso: ele gira os logs (renomeia, compacta e apaga os antigos) em intervalos que você define, sem precisar de intervenção manual.

Mesmo com bons hábitos de log, vale começar com uma VPS de disco generoso e rápido. Se você ainda não tem onde rodar isso, a Cloud VPS Brasil já entrega o servidor pronto.

Como o logrotate funciona

Todo dia, o sistema roda o logrotate (pelo cron ou por um timer do systemd). Ele lê as regras e, para cada log que atingiu o critério (por exemplo, passou um dia ou chegou a 100 MB), faz o rodízio:

  1. O arquivo atual vira arquivo.log.1.
  2. Os anteriores sobem de número (.1 vira .2, e assim por diante).
  3. Os mais velhos são compactados ou apagados, conforme a regra.

Onde ficam as regras

  • /etc/logrotate.conf: configuração geral.
  • /etc/logrotate.d/: um arquivo por aplicação (Nginx, Apache, MariaDB e outros já trazem o seu).

Como criar uma regra para a sua aplicação

Suponha que a sua aplicação grava em /var/log/meuapp/app.log. Crie /etc/logrotate.d/meuapp:

/var/log/meuapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

O que cada diretiva faz:

  • daily: gira todo dia (também existem weekly e monthly).
  • rotate 14: guarda 14 arquivos antigos e apaga o resto.
  • compress: compacta os arquivos antigos com gzip.
  • delaycompress: deixa o arquivo mais recente sem compactar, útil se algum programa ainda escreve nele.
  • missingok: não dá erro se o arquivo não existir.
  • notifempty: não gira log vazio.
  • copytruncate: copia o log e zera o original, sem precisar reiniciar a aplicação.

Girar por tamanho

Se o log cresce rápido, use size em vez de tempo:

/var/log/meuapp/*.log {
    size 100M
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

Quando a aplicação precisa ser avisada

Alguns serviços mantêm o arquivo aberto e precisam recarregar depois do rodízio. Para isso, use postrotate:

/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1 || true
    endscript
}

Como testar a regra

Antes de confiar, simule sem alterar nada:

sudo logrotate -d /etc/logrotate.d/meuapp

O -d (debug) mostra o que seria feito. Para forçar o rodízio agora:

sudo logrotate -f /etc/logrotate.d/meuapp

O estado de cada log (data da última rotação) fica em /var/lib/logrotate/status.

Erros comuns

  1. Erro de permissão: se o diretório do log pertence a outro usuário, use a diretiva su usuario grupo dentro da regra.
  2. O log continua crescendo: a aplicação mantém o arquivo aberto. Use copytruncate ou postrotate com reload.
  3. Regra duplicada: o mesmo arquivo em dois blocos gera erro. Mantenha uma única regra por arquivo.

Complementos úteis

O logrotate cuida dos arquivos de log. Para o log do systemd, veja o Journalctl, e para achar o que está ocupando espaço, Disco cheio na VPS Linux.

Disco com folga é servidor sem susto

Rotinas de limpeza evitam o pior, e um bom plano dá margem. Na Cloud VPS Brasil você conta com Intel Xeon Gold, SSD NVMe, baixa latência, tráfego ilimitado, preço fixo em reais e suporte humano via WhatsApp e ticket. Fale com a equipe pelo WhatsApp e escolha o plano ideal para o seu projeto.