Logrotate no elimina registros comprimidos

Logrotate no elimina registros comprimidos

Tengo una máquina CentOS que ejecuta rsyslog y logrotate como mi servidor syslog para una gran cantidad de dispositivos de red. He estado jugando con esto por un tiempo, la pieza logrotate/compresión está funcionando bien, pero parece que no puedo eliminar los antiguos registros .gz comprimidos. Aquí está la configuración básica:

Los registros se almacenan en: /var/log/syslog y cada host crea una nueva subcarpeta basada en su dirección IP o nombre de host. Tengo dos hosts en particular que son muy conversadores, por lo que tengo reglas específicas para que se trunquen después de 5 GB. La idea es comprimir e iniciar un nuevo registro todos los días y conservar registros equivalentes a 60 días.

Aquí están mis configuraciones (la mayoría de ellas no fueron creadas por mí, pero he mantenido y modificado varias de ellas):

gato /etc/cron.hourly/logrotate

#!/bin/sh`enter code here`
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

gato /etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    compress
    daily
    #delaycompress
    dateext
    missingok
    rotate 60
    maxage 60
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

gato /etc/logrotate.conf

/var/log/syslog/*/*.log {
daily
rotate 60
maxage 60
compress
}

daily
rotate 60
create
dateext
compress
include /etc/logrotate.d

/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
# Specific rule for HOST_A
/var/log/syslog/HOST_A/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}

# Specific rule for HOST_B
/var/log/syslog/HOST_B/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}

Y aquí hay un ejemplo de lo que tengo en mi carpeta \var\log\syslog\host_a:

ls /var/log/syslog/HOST_A/ | baño -l

104

ls /var/log/syslog/HOST_A/ -lh

-rw------- 1 root root  416M Jun 20 23:59 HOST_A_2018_06_20.log.1.gz
-rw------- 1 root root   64M Jun 20 16:18 HOST_A_2018_06_20.log.2.gz
-rw------- 1 root root  1.5G Jun 21 23:59 HOST_A_2018_06_21.log.1.gz
<many files redacted>
-rw------- 1 root root  1.6G Sep  4 23:59 HOST_A_2018_09_04.log.1.gz
-rw------- 1 root root  1.5G Sep  5 23:59 HOST_A_2018_09_05.log.1.gz
-rw------- 1 root root  7.7G Sep  6 10:58 HOST_A_2018_09_06.log

Como puede ver arriba, no se eliminan los registros .gz archivados antiguos después de 60 días. Es mantenerlos indefinidamente. Tuve que ingresar periódicamente y eliminar manualmente archivos más antiguos para mantener el tamaño bajo. Estos archivos van del 20/6 al 6/9 (hoy), que son 104 días. Estoy seguro de que lo tengo mal configurado, pero no estoy seguro de lo que me falta. Cualquier ayuda sería apreciada.

Respuesta1

Estás utilizando dos mecanismos para archivos de registro diarios y no cooperan entre sí.

Por un lado, permite que syslog genere archivos diarios y, por otro lado, permite que logrotate rote los archivos. Logrotate tratará cada archivo diario como un conjunto único de archivos separado (no considera que HOST_A_2018_09_05.log esté relacionado con HOST_A_2018_09_06.log) para rotar, por lo que nunca llega a cinco archivos por patrón.

Es mejor no incluir la fecha en el nombre del archivo o dejar que syslog haga su propia poda de archivos antiguos.

información relacionada