Logrotate não funciona como esperado

1

Esta é minha configuração de logrotate:

/var/log/glusterfs/*.log /var/log/glusterfs/bricks/*.log /var/log/glusterfs/bricks/*.log.* {
  sharedscripts
  daily
  rotate 3
  copytruncate
  size 100M
  missingok
  compress
  delaycompress
  ifempty
  postrotate
  /usr/bin/killall -HUP glusterfs > /dev/null 2>&1 || true
  /usr/bin/killall -HUP glusterd > /dev/null 2>&1 || true
  endscript
}

Este é o diretório:

username@server:/var/log/glusterfs/bricks$ ll
total 405980
-rw------- 1 root root         0 Dec 23 00:05 be-data.log
-rw------- 1 root root         1 Dec 29 09:38 be.log.1
-rw------- 1 root root         0 Dec 25 11:24 nl.log
-rw------- 1 root root         0 Dec 29 09:49 nl.log.1.1
-rw------- 1 root root         0 Dec 29 09:50 nl.log.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root         0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root 368402432 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1.1
-rw------- 1 root root    610304 Dec 23 00:05 bo.log.1
-rw------- 1 root root    860160 Dec 23 00:05 bricks.log.1
-rw------- 1 root root    589824 Dec 23 00:05 other.log.1

O que eu posso ver:

  • Os registros não são compactados
  • Os logs são maiores que 100 MB
  • A contagem não funciona
  • Arquivos de log vazios estão presentes, não quero arquivos de log vazios que são girados

Como deve minha configuração de logrotate resolver todos os problemas descritos acima?

    
por Kevin 29.12.2016 / 10:17

2 respostas

4

No arquivo de configuração, você especificou dois padrões para os arquivos de log no diretório /var/log/glusterfs/bricks :

  1. *.log
  2. *.log.*

O segundo desses padrões corresponderá a qualquer arquivo de log rotacionado. É por isso que você obtém arquivos com sufixos .1 aparentemente intermináveis.

Os arquivos de log não são compactados porque você tem delaycompress na configuração. Eles serão comprimidos na próxima rotação. Observe que o primeiro problema (rotação de logs já girados devido ao segundo padrão acima) efetivamente desativa qualquer compressão, já que todas as rotações são "a primeira" rotação.

Os arquivos de log são girados se forem maiores que 100M, conforme sua configuração. Existe um arquivo maior que isso. Ele está sendo rotacionado a cada invocação e nunca compactado, devido ao problema mencionado anteriormente com o segundo padrão de arquivo de log acima.

Existem arquivos de log vazios. Este é simplesmente mais um efeito do padrão de correspondência do arquivo de log defeituoso acima. Quando um arquivo de log é girado, ele é copiado para name-of-file.log.1 e o arquivo original, name-of-file.log , é truncado ("esvaziado"). Novamente, devido ao padrão *.log.* na configuração, o arquivo name-of-file.log.1 será copiado para name-of-file.log.1.1 na próxima rotação e o original name-of-file.log.1 será truncado.

Está tudo funcionando, mas como o padrão de arquivo de log pega não apenas os arquivos de log reais, mas também os arquivos de log girados, você acaba com essa bagunça.

    
por 29.12.2016 / 10:46
-1

A visualização do manpage do logrotate é gratuita durante esta semana!

   delaycompress
          Postpone compression of the previous log file to the next  rota‐
          tion  cycle.  This only has effect when used in combination with
          compress.  It can be used when some program cannot  be  told  to
          close  its logfile and thus might continue writing to the previ‐
          ous log file for some time.

   size size
          Log  files are rotated only if they grow bigger then size bytes.
          If size is followed by k, the size is assumed  to  be  in  kilo‐
          bytes.   If the M is used, the size is in megabytes, and if G is
          used, the size is in gigabytes. So size  100,  size  100k,  size
          100M and size 100G are all valid.

   ifempty
          Rotate  the  log  file  even  if  it  is  empty,  overriding the
          notifempty option (ifempty is the default).
    
por 29.12.2016 / 10:22

Tags