logrotate no comprime / var / log / messages

11

Con el tiempo noté algunos registros /var/logcomo auth, kerny se messagesestaban volviendo enormes. Hice logrotateentradas 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 compressopció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.logy 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/messagessin 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 logrotatepregunta 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/messagescomprimir 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.confarchivo:

$ 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 crontabestá 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/syslogy /var/log/auth.log.

A continuación, hizo un /var/log/messages-sólo logrotatearchivo 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í logrotatemanualmente:

$ 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, logrotatecomprimí 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 logrotateejecución después de agregar un .gzsufijo 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 logrotatecon 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, logrotateel 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 delaycompressopción para /var/log/messagesayudará. Lo habilité y comprobaré los resultados a la mañana siguiente.

Mike Mazur
fuente
¿Puedes publicar tu logrotate.conf? Nada en los extractos que haya compartido hasta ahora explicaría el sufijo de fecha en esos archivos de mensajes. Logrotate no solía admitir sufijos de fecha en archivos de registro rotados. Esto me lleva a creer que algo completamente distinto es crear esos archivos. Verifique / etc / crontab, crontab de root y /etc/cron.daily para ver si tiene otro script que intente hacer el mismo trabajo.
jmtd
Además de esto, ¿puede decirnos qué distribución de Linux está ejecutando? Debian / Ubuntu tiene su propio script de rotación de registros que podría estar arruinando sus cosas de rotación de registros.
thepocketwade
Gracias por la respuesta. Estoy ejecutando Gentoo Linux. Mis crontabs no están gestionando / var / log / messages. Por favor, vea la nueva información en mi pregunta para más detalles.
Mike Mazur

Respuestas:

8

Agregando delaycompressa la sección de configuración para /var/log/messagesresolver el 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.

Supongo que a sysklogdmi 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 delaycompressdirectiva), salió directamente man logrotate(excepto que cambié weeklya daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }
Mike Mazur
fuente
Dice la opción desconocida desconocida 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf que lee el archivo de configuración /etc/logrotate.d/apc_rtbinfo.conf que lee la información de configuración para /mnt/log/frengo/apc_rtbinfo.log error: /etc/logrotate.d/apc_rtbinfo.conf:7 opción desconocida 'delalycompress' - ignorando la línea Manejo de registros 1
Ashish Karpe
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {daily missingok notifempty size 2000M compress delalycompress sharedscripts copytruncate rotate 3}
Ashish Karpe
1
ok obtuvo el error de error tipográfico en "delalycompress"
Ashish Karpe
Pero ahora el problema es que log.1 es más de 2000M # du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.log .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log.2. gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe
5

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:

logrotate -d /etc/logrotate.conf

La salida le dirá qué está sucediendo exactamente. Además, si desea reducir la salida de depuración, puede hacer

logrotate -d /etc/logrotate.d/messages

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 -fopció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.

CarpeNoctem
fuente
Intenté ejecutar logrotate manualmente como sugeriste, y me dice que está comprimiendo los registros, pero no encuentro ningún registro comprimido en ninguna parte. Vea mi pregunta arriba para más detalles.
Mike Mazur
1
cambie el nombre de los 5 archivos de mensajes más antiguos para que terminen en .gz y vea si logrotate elimina el más antiguo como debería. Si es así, sabemos que el bloqueo está fallando debido a que gzip no se ejecuta correctamente. Esto al menos confirmará que la falta de compresión es la culpable de la falta de rotación.
CarpeNoctem
Hecho, detalles agregados a la pregunta anterior. Tengo curiosidad por saber si hay algún problema de contención con el /var/log/messagesarchivo en vivo y la delaycompressopción ayudará.
Mike Mazur
Otro punto interesante que descubrí. Cuando habilita la opción -d, el comando logrotate no tocaría los archivos de registro. Consulte el manual para más información. -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.
CBR
1

Considere probar esta configuración en su logrotate.conf:

dateformat .%Y%m%d

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.

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
Pausado hasta nuevo aviso.
fuente
No creo que esta sea la causa raíz. El formato de fecha actual, con un guión, funciona bien para otros archivos de registro. La diferencia entre esos archivos de registro y /var/log/messageses que los /var/log/messagesarchivos rotados no están comprimidos.
Mike Mazur