Gestión de logs con Logrotate en CentOS 7
Configuración de logrotate para mantener bajo control los registros del sistema y de las aplicaciones.
Logrotate es una de esas herramientas que trabajan en silencio para mantener tu servidor en orden. Evita que los archivos de log crezcan de forma descontrolada y acaben con el espacio en disco — algo especialmente importante en VPS y servidores dedicados, donde el almacenamiento es limitado y la estabilidad es clave.
Verificar la instalación
Antes de entrar en la configuración, comprueba que logrotate esté realmente instalado. En CentOS 7 viene preinstalado, pero una comprobación rápida nunca está de más:
logrotate --version
Si ves un número de versión — algo como logrotate 3.18.0 — ya puedes continuar.
Estructura de la configuración
La configuración de logrotate se encuentra en dos lugares:
/etc/logrotate.conf— el archivo de configuración principal con los valores predeterminados globales/etc/logrotate.d/— un directorio con archivos de configuración por servicio que sobreescriben o amplían esos valores predeterminados
Juntos definen qué logs se rotan, con qué frecuencia, cuántas copias archivadas conservar y si deben comprimirse.
El archivo de configuración principal
Abre /etc/logrotate.conf con tu editor preferido — vi, por ejemplo:
vi /etc/logrotate.conf
Un archivo típico tiene este aspecto:
# Rotar los logs una vez a la semana
weekly
# Conservar 4 copias archivadas
rotate 4
# Crear un nuevo archivo de log vacío tras la rotación
create
# Añadir la fecha a los nombres de los archivos archivados
dateext
# Comprimir los logs antiguos (descomentar si es necesario)
#compress
# Incluir configuraciones por servicio desde /etc/logrotate.d
include /etc/logrotate.d
# Configuración de logs del sistema
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
Cada directiva definida aquí se aplica de forma global — las configuraciones de servicios individuales en /etc/logrotate.d/ pueden sobreescribirlas según sea necesario.
Las principales directivas de un vistazo
daily / weekly / monthly / size— frecuencia de rotación: según un calendario, o cuando un archivo alcanza un tamaño determinadorotate N— número de copias archivadas que se conservan antes de que las más antiguas se eliminencreate— crea un nuevo archivo de log vacío tras la rotación, manteniendo el propietario y los permisos originalescompress— comprime los logs archivados (gzip por defecto)dateext— incluye la fecha en el nombre del archivo archivado, p. ej.access.log-20250918missingok— no genera un error si el archivo de log no existenotifempty— omite la rotación si el archivo de log está vacíopostrotate ... endscript— ejecuta un bloque de comandos tras la rotación (útil para recargar un servicio)maxage N— elimina automáticamente los archivos más antiguos que N días
Configurar la rotación para una aplicación concreta
Supongamos que tu aplicación my-app escribe sus logs en /var/log/my-app/. Crea un archivo de configuración dedicado para ella:
vi /etc/logrotate.d/my-app
Un buen punto de partida:
/var/log/my-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload my-app
endscript
}
Lo que hace cada línea:
daily— rotación cada díarotate 14— conserva dos semanas de archivoscompress— comprime los logs antiguos con gzipnotifempty— no rota si el archivo de log está vacíocreate 0640 www-data www-data— crea el nuevo archivo de log con permisos0640y propietariowww-datapostrotate ... endscript— recarga la aplicación tras cada rotación para que use el nuevo archivo de log
Nuestros servicios y productos
Probar la configuración
Simulación en seco (no se aplican cambios, solo muestra lo que ocurriría):
sudo logrotate /etc/logrotate.conf --debug
Probar la configuración de un servicio concreto:
sudo logrotate -d /etc/logrotate.d/my-app
Forzar una rotación inmediata:
sudo logrotate /etc/logrotate.conf --force
Rotación de logs en directorios personalizados
Si tu aplicación escribe logs en una ruta no estándar — por ejemplo /home/user/logs/ — puedes gestionarla igualmente con un archivo de configuración local:
vi /home/user/logrotate.conf
/home/user/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Crea el directorio y un archivo de log de prueba:
mkdir ~/logs
touch ~/logs/access.log
Luego ejecuta una rotación forzada indicando un archivo de estado personalizado:
logrotate /home/user/logrotate.conf \
--state /home/user/logrotate-state \
--verbose --force
--state— indica a logrotate dónde almacenar el registro de su última ejecución--verbose— imprime un log detallado de todo lo que hace
Automatizar con Cron
Para que logrotate se ejecute automáticamente según un calendario, añade una tarea cron:
crontab -e
Por ejemplo, para ejecutarlo cada hora en el minuto 14:
14 * * * * /usr/sbin/logrotate /home/user/logrotate.conf --state /home/user/logrotate-state
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!