La gestión eficiente de los archivos de registro (logs) es crítica para mantener la estabilidad del sistema y prevenir el agotamiento del espacio en disco. logrotate es la herramienta estándar en sistemas Linux diseñada para automatizar el proceso de rotación, compresión y eliminación de estos archivos.
Verificación del estado actual de la rotación
Antes de aplicar cambios, es fundamental conocer qué archivos están siendo procesados actualmente por el sistema y cuándo fue su última ejecución. Esta información se almacena en el archivo de estado:
# Consultar el historial de rotación
cat /var/lib/logrotate/status
El contenido mostrará una lista de rutas de archivos junto con la última fecha en la que se rotaron, similar a lo siguiente:
logrotate state -- version 2
"/var/log/syslog" 2024-10-15-10:0:0
"/var/log/nginx/access.log" 2024-10-14-12:0:0
"/var/log/auth.log" 2024-10-15-0:0:0
Comandos esenciales para la ejecución
Existen diversos parámetros para interactuar con el binario de logrotate dependiendo de si necesitamos forzar una acción o simplemente depurar la configuración:
1. Simulación o depuración (Dry Run): Permite verificar si la sintaxis del archivo de configuración es correcta y qué acciones se realizarían sin modificar realmente los archivos.
sudo logrotate -d /etc/logrotate.conf
2. Forzar rotación inmediata: Útil cuando el disco está casi lleno y necesitamos liberar espacio ignorando las condiciones temporales programadas.
sudo logrotate -f /etc/logrotate.d/mi_aplicacion.conf
3. Ejecución estándar: Procesa las configuraciones de acuerdo a las reglas definidas.
sudo logrotate /etc/logrotate.conf
Configuración de políticas personalizadas
Para gestionar registros específicos, se deben crear archivos de configuración dentro del directorio /etc/logrotate.d/. A continuación, se presenta una estructura avanzada para un servicio personalizado:
/var/log/app_servicios/*.log {
weekly # Rotación semanal
rotate 5 # Mantener solo 5 copias de seguridad
missingok # No generar error si el archivo no existe
notifempty # No rotar si el archivo está vacío
compress # Comprimir archivos antiguos (gzip)
delaycompress # Dejar el último log rotado sin comprimir
dateext # Añadir fecha al nombre del archivo
create 0660 app_user adm # Crear nuevo archivo con permisos específicos
sharedscripts # Ejecutar el script postrotate una sola vez
postrotate
/usr/bin/systemctl reload nginx > /dev/null 2>&1
endscript
}
Procesamiento y depuración de registros voluminosos
En ocasiones, tras la rotación, es necesario analizar el contenido de los registros para identificar patrones o errores recurrentes de forma limpia. Si el archivo es demasiado grande, se pueden filtrar etnradas únicas y exportarlas a un archivo temporal para su revisión:
# Extraer accesos únicos de una IP específica y ordenarlos
grep "192.168.1.100" /var/log/app_servicios/access.log | awk '{print $7}' | sort -u > /tmp/analisis_rutas.txt
Este flujo permite mantener los registros bajo control, asegurando que el sistema siempre disponga de espacio suficiente y que los datos históricos estén organizados correctamente.