Rotação de log com compactação?

Rotação de log com compactação?

Estou executando um processo no Linux (CentOS 7) que produz muita saída no stdout. Enviar tudo para um arquivo resultará em um tamanho de arquivo superior a 1 TB. Mas, felizmente, a saída é bastante compressível - consiste em muito texto bastante repetitivo.

Meu pensamento é: posso usar algum tipo de programa de rotação de log como os descritos aqui: (Rotação de log de stdout?), mas quando um log não é mais atual, ele é compactado (e nunca excluído)? Então acabo escrevendo, digamos, alguns GB no arquivo, compacto-o e continuo gravando em um arquivo novo?

Responder1

Você pode usarlogrotatepor esta. CentOS 7 está usandosistemapara que você possa configurar umtarefa de logrotate agendadacom algo assim:

  • Crie um arquivo de configuração logrotate /etc/systemd/systemchamado mylogrotate.configcom o seguinte conteúdo:

    /path/to/your/logfile/*.log {
        compress
        copytruncate
        delaycompress
        minsize 1G
        missingok
        nomail
        notifempty
        rotate 30
    }
    

Isso dirá ao logrotate para fazer o seguinte:

  • Versões antigas de arquivos de log são compactadas com gzip por padrão.
  • Trunque o arquivo de log original após criar uma cópia, em vez de mover o arquivo de log antigo e, opcionalmente, criar um novo.
  • Adie a compactação do arquivo de log anterior para o próximo ciclo de rotação para que você tenha dois arquivos de log descompactados.
  • Os arquivos de log são rotacionados quando ultrapassam 1 Gbytes.
  • Se o arquivo de log estiver faltando, passe para o próximo sem emitir uma mensagem de erro.
  • Não envie arquivos de log antigos para nenhum endereço.
  • Os arquivos de log são girados 30 vezes antes de serem removidos, portanto você terá 30 arquivos de log antigos. Qualquer coisa mais antiga que isso será excluída.

Crie um serviço systemd. Crie um arquivo /etc/systemd/systemchamado mylogrotate.servicecom o seguinte:

[Unit]
Description=Rotate My Log

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose

Vamos agendar esta tarefa. Crie um terceiro arquivo /etc/systemd/systemchamado mylogrotate.timercom o seguinte:

[Unit]
Description=Rotate My Log Timer

[Timer]
OnCalendar=*:00:00
Persistent=true

[Install]
WantedBy=timers.target

Isso executará o logrotate a cada hora.

Tudo foi configurado. Agora habilite a tarefa agendada.

systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer

Claro, faça tudo isso como root.

(Estou no Ubuntu, mas espero que funcione no CentOS sem problemas)

informação relacionada