Gestión de logs con Logrotate en Debian

Cómo configurar correctamente la rotación de logs para mantener el sistema limpio y evitar el desbordamiento del disco.

Logrotate es una de las herramientas fundamentales para la administración de sistemas Linux. Rota, comprime y elimina automáticamente los archivos de log antiguos, ayudándote a mantener el orden en el sistema y a evitar que los logs llenen el disco. Tanto si gestionas servidores privados virtuales como servidores dedicados, una configuración correcta de la rotación de logs garantiza la estabilidad y la previsibilidad de tus servicios.

En Debian 9 y versiones posteriores, logrotate viene instalado por defecto y ya está configurado para la mayoría de los servicios del sistema.

Comprobar la instalación

logrotate --version

Salida esperada:

logrotate 3.11.0

Estructura de la configuración

Logrotate utiliza dos ubicaciones principales:

  • /etc/logrotate.conf — archivo de configuración principal con los parámetros globales por defecto
  • /etc/logrotate.d/ — directorio con los archivos de configuración individuales para servicios y aplicaciones específicos

Ejemplo de configuración para APT (en /etc/logrotate.d/apt):

/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

El archivo contiene dos bloques — para term.log e history.log. Cualquier parámetro no especificado en un bloque se hereda de /etc/logrotate.conf.

Descripción de las directivas:

  • rotate 12 — conservar 12 copias archivadas
  • monthly — rotar una vez al mes
  • compress — comprimir los logs antiguos con gzip
  • missingok — no generar error si el archivo de log no existe
  • notifempty — omitir la rotación si el log está vacío

Método 1: configuración estándar (recomendada)

Es el mejor enfoque para la mayoría de los casos. Los archivos de configuración se colocan en /etc/logrotate.d/ y son ejecutados diariamente por cron.

Ejemplo: crea una configuración para una aplicación personalizada que escribe logs en /var/log/example-app/:

sudo nano /etc/logrotate.d/example-app
/var/log/example-app/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload example-app
    endscript
}

Descripción de las directivas:

  • create 0640 www-data www-data — crea un nuevo archivo de log tras la rotación con los permisos 0640, propietario y grupo www-data
  • sharedscripts — el script postrotate se ejecuta una sola vez después de procesar todos los archivos, no para cada archivo por separado
  • postrotate ... endscript — bloque de comandos ejecutados tras la rotación; en el ejemplo se recarga la aplicación

Tras la configuración, verifica los ajustes en modo debug:

sudo logrotate /etc/logrotate.conf --debug

El comando muestra información detallada sobre los archivos que procesa logrotate, sin aplicar los cambios realmente.

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

Método 2: configuración personalizada con Cron (para planificaciones no estándar)

Usa este método si necesitas una rotación horaria o quieres gestionar los logs de un usuario específico.

Supongamos que la aplicación se ejecuta con el usuario testing y escribe los logs en /home/testing/logs/. Crea un archivo de configuración:

nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
    hourly
    rotate 24
    compress
    missingok
    create
}

Archivo de configuración de logrotate Archivo de configuración de logrotate

Esta configuración rota los archivos cada hora, conserva 24 copias archivadas y crea un nuevo archivo de log tras cada rotación.

Crea un archivo de log de prueba:

cd ~
mkdir logs
touch logs/access.log

Ejecuta logrotate manualmente especificando el archivo de estado:

logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force

Salida:

reading config file /home/testing/logrotate.conf

Handling 1 logs

rotating pattern: /home/testing/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
  log does not need rotating

--state — indica dónde almacenar la información sobre la última rotación. --verbose — muestra un registro de ejecución detallado. --force — fuerza la rotación aunque todavía no sea necesaria según la planificación.

Comprueba el contenido del archivo de estado:

cat /home/testing/logrotate-state

Logrotate registra en este archivo cuándo y qué logs procesó por última vez.

Automatización con Cron

Para que la rotación se ejecute automáticamente cada hora, añade una tarea a cron:

crontab -e

Añade la siguiente línea al final del archivo:

14 * * * * /usr/sbin/logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state

Tarea cron para logrotate Tarea cron para logrotate

La tarea se ejecutará en el minuto 14 de cada hora, todos los días.

Consejos útiles

  • Prueba siempre los cambios de configuración con --debug antes de aplicarlos.
  • Usa la directiva create para garantizar los permisos correctos en los nuevos archivos de log.
  • Para servicios con alto tráfico, considera períodos de rotación más cortos y la compresión.
  • Nunca establezcas permisos 666 o 777 en archivos de log o directorios — supone un grave riesgo de seguridad.

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