logrotate não compacta / var / log / messages

10

Com o tempo, percebi que alguns logs em /var/log , como auth , kern e messages estavam ficando enormes. Eu fiz logrotate entradas para eles:

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

também tenho a opção compress ativada:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

Isso funciona muito bem para auth.log , kern.log e outros, o que significa que cada um desses logs é compactado e girado, com os últimos 5 dias de registros retidos. /var/log/messages , no entanto, não está sendo compactado, resultando em mais de 5 dias de registros:

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

Como é explicado em outra questão logrotate no ServerFault , os logs antigos (provavelmente) não estão sendo removidos porque as terminações de arquivo são diferentes para cada arquivo. Isso parece ser porque os arquivos não estão sendo compactados.

O que posso fazer para ter /var/log/messages compactado e rotacionado com os últimos 5 dias de registros mantidos como todos os meus outros arquivos de log? O que estou perdendo?

EDIT 1 : informações adicionais, conforme solicitado nas primeiras duas respostas.

Estou executando o Gentoo Linux. Meu arquivo /etc/logrotate.conf :

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d contém meus arquivos de configuração personalizados, conforme mencionado acima, juntamente com as configurações para o mysql, rsync, etc instalados por esses pacotes.

Minha raiz crontab está vazia:

$ sudo crontab -l
no crontab for root

Eu verifiquei todos os /etc/cron.{daily,hourly,monthly,weekly} para qualquer coisa relacionada ao syslog, e há um script que rotaciona /var/log/syslog e /var/log/auth.log .

Em seguida, criei um arquivo /var/log/messages -only logrotate config conforme sugerido pelo CarpeNoctem:

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Em seguida, executei logrotate manualmente:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

De acordo com o log acima, logrotate compactou o log com / bin / gzip, mas não vejo um arquivo de mensagens compactado em /var/log . Além disso, a globulação de arquivos antigos girados falhou.

EDIT 2 : adicionando a saída de depuração de logrotate , execute após anexar um sufixo .gz aos arquivos /var/log/message-* antigos.

Começamos com:

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

Em seguida, execute logrotate com nosso arquivo de configuração personalizado:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

Desta vez, o glob logrotate é bem-sucedido e encontra o sexto arquivo de log compactado, com a intenção de removê-lo. O arquivo não é realmente removido; Eu acho que é porque estamos correndo no modo de depuração.

Tenho curiosidade em saber se ativar a opção delaycompress para /var/log/messages ajudará. Eu habilitei e verifiquei os resultados na manhã seguinte.

    
por Mike Mazur 24.02.2010 / 13:03

3 respostas

7

A adição de delaycompress à seção de configuração de /var/log/messages resolveu o problema.

De man logrotate :

   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.

Eu acho que sysklogd , meu daemon syslog, não pode ser instruído a fechar seu arquivo de log e, portanto, isso é necessário.

Curiosamente, a configuração original que eu tinha (sem a diretiva delaycompress ) veio diretamente de man logrotate (exceto que eu mudei weekly para daily ):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }
    
por 26.02.2010 / 02:16
5

É difícil dizer apenas com esta informação, mas posso dizer-lhe o que me salvou algumas vezes.

O Logrotate tem uma opção de depuração que irá imprimir uma jogada por jogada de cada passo que leva para stdout. Então, neste caso, você poderia fazer:

logrotate -d /etc/logrotate.conf

A saída informará exatamente o que está acontecendo. Além disso, se você quiser restringir a saída de depuração, você pode fazer

logrotate -d /etc/logrotate.d/messages

Embora você queira colocar temporariamente as principais opções do logrotate.conf nesse bloco de arquivos, uma vez que especificar o arquivo diretamente significa que ele nunca terá lido as opções principais de configuração. Especificar o arquivo individual também significa que você pode usar a opção -f (force) em combinação com a opção de depuração para dar uma olhada em uma rotação real do arquivo de mensagens que está ocorrendo.

    
por 24.02.2010 / 13:38
1

Considere tentar esta configuração no seu logrotate.conf:

dateformat .%Y%m%d

e renomeie seus arquivos de mensagens existentes para usar um ponto em vez de um traço. Então tente seu logrotate novamente.

As pistas abaixo me levaram a acreditar que o traço pode estar causando a falha do globo se ele está sendo interpretado de alguma forma como uma opção (onde - iria corrigir isso). Não faz sentido, mas pode ser possível.

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
    
por 24.02.2010 / 15:04