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 archivadasmonthly— rotar una vez al mescompress— comprimir los logs antiguos con gzipmissingok— no generar error si el archivo de log no existenotifempty— 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 permisos0640, propietario y grupowww-datasharedscripts— el scriptpostrotatese ejecuta una sola vez después de procesar todos los archivos, no para cada archivo por separadopostrotate ... 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
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
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
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
--debugantes de aplicarlos. - Usa la directiva
createpara 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
666o777en 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!