Logrotate no linux para lidar com perda de dados de log

2

Estamos usando o linfo logrotate para girar nossos arquivos de log,

Exemplo:

/location/tomcat/logs/* /location/jboss/log/* {
      copytruncate
      daily
      rotate 10
      compress
      size 20M
      olddir rotated
      create 0644 test test
}

De acordo com a definição de cópia truncada fornecida no LINUX,

copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

Portanto, haverá perda de dados no arquivo de log durante o processo de rotação. Eu notei cerca de 5 a 20 segundos de perda de log, Existe uma maneira / configuração para fazer o mesmo processo sem perda de dados?

    
por user219407 06.03.2017 / 13:16

3 respostas

1

Eu sei que no syslog-ng, você pode definir o nome do arquivo de saída para usar variáveis, incluindo coisas como a data, para que ele comece a gravar automaticamente para um novo arquivo às 00:00 do novo dia, com perda zero.

No entanto, é necessário alterar seu programa syslog para o syslog-ng. Mas a flexibilidade parece exatamente o que você precisa.

    
por 06.03.2017 / 20:28
0

Você pode mover-se do logfile logging e girar com logrotate para journald log usando systemd-cat -t indentifier cmdline . Configurar tamanhos de registro / entrada em /etc/systemd/journald.conf ou usar journalctl --vacuum-size=, --vacuum-time=, --vacuum-files=

Outra maneira é logrotate uma vez por dia, usando o recurso prerotate / postrotate para parar os servidores, girar o log e iniciar os servidores novamente. O tempo de rotação é dependente da tarefa do cronograma logrotate.timer ou (ana) do cron, que pode ser cronometrada até as 4h ou sempre que o tráfego for baixo ou zero.

prerotate
    # stop jboss/tomcat server 
endscript

daily
rotate 10
compress
size 20M

postrotate
    #start servers
endscript
    
por 06.03.2017 / 14:45
0

É assim que faço para Catalina logs:

/var/log/tomcat/catalina.out {
        daily
        size 100m
        compressext .gz
        compress
        delaycompress
        compressoptions "-9"
        dateformat -%Y%m%d-%s
        ifempty
        copytruncate
        prerotate
                SIZE=$(stat --printf='%s' /var/log/tomcat/catalina.out)
                /bin/bash -c "tail -c $SIZE -f /var/log/tomcat/catalina.out > /var/log/tomcat/tmp.log" &
        endscript
        postrotate
                pgrep tail | xargs kill -9
                cat /var/log/tomcat/tmp.log >> /var/log/tomcat/catalina.out
                rm /var/log/tomcat/tmp.log -f
        endscript
}

Opcionalmente, você pode especificar -s com tail para diminuir o intervalo de atualização do comando tail . E porque você usa a opção -c , é rápido.

    
por 15.08.2018 / 10:31