Como logar um arquivo de 1 MB?

0

Para girar os logs depois que o tamanho aumentar para 1M , o cronjob invoca logrotate a cada 15 minutos, conforme mostrado abaixo:

0,15,30,45 * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf

em que syslog-ng-rotate.conf é

/app/syslog-ng/custom/output/all_devices.log {
size 1M
copytruncate
dateext
dateformat -%Y%m%d-%s
rotate 365
sharedscripts
compress
postrotate
     /app/syslog-ng/sbin/syslog-ng-ctl reload
endscript
}

Mas a configuração acima não funciona se o tamanho do arquivo ultrapassar 1M em 15 minutos.

Como garantir que o arquivo seja rotacionado imediatamente após o tamanho do arquivo ir para 1M ?

    
por overexchange 12.10.2018 / 18:16

1 resposta

1

logrotate só é executado quando você diz para ele rodar. Se você tiver um arquivo de log que pode crescer rapidamente e estiver usando o cron, tenho duas sugestões:

  1. agende o cron job com mais frequência (digamos, a cada minuto):

    * * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
    

    para que você tenha no máximo 60 segundos para o arquivo de log crescer antes de atingir o limite de tamanho.

  2. Se o seu arquivo de log ainda estiver crescendo muito rapidamente a cada minuto, execute o logrotate várias vezes em cada minuto; um imediatamente após o outro:

    * * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
    

    (por exemplo) ou:

    * * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
    

    ... para dar 10 segundos entre cada chamada para logrotate. Note que você não quer que nenhum cron job demore mais do que 60 segundos, ou você irá se sobrepor ao próximo cron job. Considere envolver a tarefa cron inteira com timeout :

    * * * * * timeout 59 sh -c "/usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf"
    

Você teria que experimentar os horários e o número de chamadas para fazer o logrotate do seu ambiente para manter o arquivo de registro sob controle.

    
por 12.10.2018 / 18:34