Logrotate: gira todos os arquivos de log em tamanho específico e gira de hora em hora

2

Meu arquivo logrotate no Ubuntu é executado diariamente. Eu quero ter certeza de seus arquivos de log rotativos em todas as horas para não ter mais nenhum erro de disco completo. Então meu arquivo logrotate está na pasta cron.daily, é suficiente movê-lo para o cron.hourly?

Eu também quero manter o tamanho máximo do meu arquivo de log em 5MB, mas não tenho certeza do que alterar no logrotate.cnf.

conteúdo logrotate.cnf (sem quebras de linha):

weekly rotate 4 create include /etc/logrotate.d

/var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 }

/var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }

Eu sei que tenho que usar tamanho 5M , mas onde devo escrever? Estou pensando bem que a primeira linha é para todos os arquivos de log e o segundo e terceiro é apenas para wtmp e btmp? Então, se minha lógica está correta, então eu tenho que escrever tamanho 5M em toda a linha, estou certo?

    
por martincpt 10.01.2013 / 11:29

2 respostas

3

Para que tenha algum efeito, o script do cron deve ser executado pelo menos com a mesma frequência que você deseja girar os arquivos. Mesmo que você esteja atualmente executando o script uma vez por dia (a partir do cron.daily), ele só alterará os arquivos uma vez por semana (a palavra-chave weekly no script logrotate define o padrão, isso é substituído para mensalmente no caso de wtmp e btmp).

A versão do logrotate na minha caixa de Linux mais próxima é de duração diária (embora a configuração de um limite de tamanho force os arquivos a serem rotacionados com mais freqüência). Dito isto, para a maioria dos servidores, a rotação de log é prejudicial; Se o seu objetivo é economizar espaço, talvez seja mais apropriado manter menos arquivos de histórico e compactá-los:

daily rotate 2 compress size 5M create include /etc/logrotate.d

/var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 }
/var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }

(Observe que as alterações na primeira linha não terão efeito se forem substituídas em outro lugar.)

    
por 10.01.2013 / 11:41
2

Uma maneira não elegante que funcionou para mim - execute o logrotate por hora com base no tamanho do arquivo faça o seguinte;

1) Copie o script Logrotate da pasta cron.daily para a pasta cron.hourly

cp /etc/cron.daily/logrotate   /etc/cron.hourly/ 

2) Atualize o arquivo /etc/cron.hourly/logrotate; comentar e substituir a última linha da seguinte forma

#/usr/sbin/logrotate /etc/logrotate.conf
/usr/sbin/logrotate  /etc/logrotate.d/logstash 

3) atualize a entrada relevante do / etc / crontab da seguinte maneira (se necessário)

#17 *   * * *   root    cd / && run-parts --report /etc/cron.hourly
59 *    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.hourly )

4) Por fim, escreva a seguinte lógica em seu arquivo conf logrotate (atualize os caminhos e tamanho da pasta conforme sua necessidade)

 cat /etc/logrotate.d/logstash
    /var/log/logstash/*.log /var/log/logstash/*.err  {
    hourly
    size 10M
    rotate 4
    copytruncate
    compress
    #delaycompress
    missingok
    notifempty }
    
por 28.01.2016 / 14:51