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 determinado
  • rotate N — número de copias archivadas que se conservan antes de que las más antiguas se eliminen
  • create — crea un nuevo archivo de log vacío tras la rotación, manteniendo el propietario y los permisos originales
  • compress — comprime los logs archivados (gzip por defecto)
  • dateext — incluye la fecha en el nombre del archivo archivado, p. ej. access.log-20250918
  • missingok — no genera un error si el archivo de log no existe
  • notifempty — omite la rotación si el archivo de log está vacío
  • postrotate ... 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ía
  • rotate 14 — conserva dos semanas de archivos
  • compress — comprime los logs antiguos con gzip
  • notifempty — no rota si el archivo de log está vacío
  • create 0640 www-data www-data — crea el nuevo archivo de log con permisos 0640 y propietario www-data
  • postrotate ... endscript — recarga la aplicación tras cada rotación para que use el nuevo archivo de log

Nuestros servicios y productos

HostingFunciona en discos NVMe ultrarrápidos. Apto para sitios web de cualquier complejidad.
Pedir
VPSParámetros ajustables y configuración flexible del SO. Administración gratuita incluida.
Pedir
Servidores dedicadosDisponibles diversas configuraciones Supermicro con procesadores Intel y AMD.
Pedir

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!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos