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.