Com o tempo, notei alguns registros /var/log
, como auth
, kern
e messages
estavam ficando enormes. 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 compress
opção 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 gzip, com os últimos 5 dias de logs retidos. /var/log/messages
no entanto, não está sendo compactado, resultando em mais de 5 dias de logs:
$ 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
Conforme explicado em outra logrotate
pergunta no ServerFault , os logs antigos (provavelmente) não estão sendo removidos porque as terminações dos arquivos são diferentes para cada arquivo. Parece ser porque os arquivos não estão sendo compactados em gzip.
O que posso fazer para /var/log/messages
compactar e girar os últimos 5 dias de logs retidos, assim como todos os meus outros arquivos de log? o que estou perdendo?
EDIT 1 : informações adicionais, conforme solicitado nas primeiras respostas.
Estou executando o Gentoo Linux. Meu /etc/logrotate.conf
arquivo:
$ 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, como mencionado acima, juntamente com configurações para mysql, rsync, etc instaladas por esses pacotes.
Minha raiz crontab
está vazia:
$ sudo crontab -l
no crontab for root
Eu verifiquei tudo /etc/cron.{daily,hourly,monthly,weekly}
para qualquer coisa relacionada a syslog, e há um script que gira /var/log/syslog
e /var/log/auth.log
.
Em seguida, criei um arquivo de configuração /var/log/messages
apenas logrotate
como sugerido por 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
}
Então eu corri 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
compactado o log com / bin / gzip, mas não vejo um arquivo de mensagens compactadas /var/log
. Além disso, a busca por arquivos rotacionados antigos falhou.
EDIT 2 : adicionando saída de depuração da logrotate
execução após anexar um .gz
sufixo aos /var/log/message-*
arquivos 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 o logrotate
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, logrotate
o glob consegue 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 executando no modo de depuração.
Estou curioso para saber se habilitar a delaycompress
opção for /var/log/messages
ajudará. Eu o habilitei e vou verificar os resultados na manhã seguinte.
Respostas:
Adicionando
delaycompress
à seção de configuração para/var/log/messages
resolvido o problema.De
man logrotate
: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
delaycompress
diretiva) saiu diretamente deman logrotate
(exceto que eu mudeiweekly
paradaily
):fonte
É difícil dizer apenas com essas informações, mas posso dizer o que me salvou algumas vezes.
O Logrotate possui uma opção de depuração que imprimirá uma reprodução por reprodução de cada etapa necessária para o stdout. Então, neste caso, você poderia fazer:
A saída dirá o que exatamente está acontecendo. Além disso, se você quiser restringir a saída de depuração, poderá fazer
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 lerá as principais opções de configuração. A especificação do arquivo individual também significa que você pode usar a
-f
opção (force) em combinação com a opção debug para ver uma rotação real do arquivo de mensagens que está ocorrendo.fonte
/var/log/messages
arquivo ativo e adelaycompress
opção ajudará.-d, --debug
Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
Considere tentar esta configuração no seu logrotate.conf:
e renomeie os arquivos de mensagens existentes para usar um ponto em vez de um hífen. Em seguida, tente seu logrotate novamente.
As pistas abaixo me levaram a acreditar que o traço pode estar causando a falha do globo se estiver sendo interpretado de alguma forma como uma opção (onde - seria consertar isso). Não faz sentido, mas apenas pode ser possível.
fonte
/var/log/messages
é que os/var/log/messages
arquivos girados não são compactados.