Con el tiempo noté algunos registros /var/log
como auth
, kern
y se messages
estaban volviendo enormes. Hice logrotate
entradas para ellos:
$ 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
}
También tengo la compress
opción habilitada:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Esto funciona muy bien para auth.log
, kern.log
y para otros, lo que significa que cada uno de esos registros se comprime y gira, con los últimos 5 días de registros retenidos. /var/log/messages
sin embargo, no se está comprimiendo, lo que resulta en más de 5 días 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 se explica en otra logrotate
pregunta en ServerFault , los registros antiguos (muy probablemente) no se eliminan porque las terminaciones de los archivos son diferentes para cada archivo. Esto parece ser porque los archivos no se están comprimiendo.
¿Qué puedo hacer para /var/log/messages
comprimir y rotar con los últimos 5 días de registros retenidos al igual que todos mis otros archivos de registro? ¿Qué me estoy perdiendo?
EDITAR 1 : información adicional según lo solicitado en las primeras dos respuestas.
Estoy ejecutando Gentoo Linux. Mi /etc/logrotate.conf
archivo:
$ 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
contiene mis archivos de configuración personalizados como se mencionó anteriormente junto con las configuraciones para mysql, rsync, etc. instaladas por esos paquetes.
Mi raíz crontab
está vacía:
$ sudo crontab -l
no crontab for root
Verifiqué todo /etc/cron.{daily,hourly,monthly,weekly}
para cualquier cosa relacionada con syslog, y hay un script que gira /var/log/syslog
y /var/log/auth.log
.
A continuación, hizo un /var/log/messages
-sólo logrotate
archivo de configuración según lo 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
}
Luego corrí 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
Según el registro anterior, logrotate
comprimí el registro con / bin / gzip, pero no veo un archivo de mensajes comprimido /var/log
. Además, falló la búsqueda de archivos rotados antiguos.
EDITAR 2 : agregar salida de depuración de logrotate
ejecución después de agregar un .gz
sufijo a los /var/log/message-*
archivos antiguos .
Comenzamos con:
$ 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
Luego, ejecute logrotate
con nuestro archivo de configuración 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
Esta vez, logrotate
el globo tiene éxito y encuentra el sexto archivo de registro comprimido, con la intención de eliminarlo. El archivo no se elimina realmente; Supongo que es porque estamos corriendo en modo de depuración.
Tengo curiosidad por saber si habilitar la delaycompress
opción para /var/log/messages
ayudará. Lo habilité y comprobaré los resultados a la mañana siguiente.
Respuestas:
Agregando
delaycompress
a la sección de configuración para/var/log/messages
resolver el problema.De
man logrotate
:Supongo que a
sysklogd
mi demonio syslog no se le puede decir que cierre su archivo de registro, por lo que esto es necesario.Curiosamente, la configuración original que tenía (sin la
delaycompress
directiva), salió directamenteman logrotate
(excepto que cambiéweekly
adaily
):fuente
Es difícil decir con solo esta información, pero puedo decirte lo que me ha salvado algunas veces.
Logrotate tiene una opción de depuración que imprime una jugada por jugada de cada paso que se necesita para stdout. Entonces, en este caso, podrías hacer:
La salida le dirá qué está sucediendo exactamente. Además, si desea reducir la salida de depuración, puede hacer
Aunque es posible que desee colocar temporalmente las opciones principales de logrotate.conf en ese bloque de archivos, ya que especificar el archivo directamente significa que nunca habrá leído las opciones de configuración principales. Especificar el archivo individual también significa que puede usar la
-f
opción (forzar) en combinación con la opción de depuración para ver una rotación real del archivo de mensajes que tiene lugar.fuente
/var/log/messages
archivo en vivo y ladelaycompress
opción ayudará.-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 probar esta configuración en su logrotate.conf:
y cambie el nombre de sus archivos de mensajes existentes para usar un punto en lugar de un guión. Luego intente su logrotate nuevamente.
Las pistas a continuación me llevaron a creer que el guión puede estar causando que el globo falle si se interpreta de alguna manera como una opción (donde - solucionaría esto). No tiene sentido, pero podría ser posible.
fuente
/var/log/messages
es que los/var/log/messages
archivos rotados no están comprimidos.