Gestión de registros del sistema con Logrotate en distribuciones basadas en Ubuntu

Introducción a Lorgotate

Logrotate es una utilidad del sistema diseñada para simplificar la administración de archivos de registro generados por servicios y aplicaciones. Permite la rotación automática, compresión y eliminación de logs antiguos, evitando así el consumo excesivo de espacio en disco. En sistemas Ubuntu, Logrotate suele estar preinstalado y configurado para gestionar los registros de paquetes del sistema como rsyslog.

Para verificar la instalación y versión de Logrotate, se puede ejecutar el siguiente comando:

logrotate --version

La documentación completa está disponible mediante la página del manual:

man logrotate

Estructura de configuración

La configuración de Logrotate se distribuye en dos ubicaciones principales:

  • /etc/logrotate.conf: Contiene parámetros globales y utiliza directivas include para cargar configuraciones adicionales desde el directorio /etc/logrotate.d/.
  • /etc/logrotate.d/: Directorio donde los paquetes de software y aplicaciones personalizadas colocan sus archivos de configuración para la rotación de registros.

Un ejemplo de configuración predeterminada puede incluir rotación semanal, compresión y retención de varios archivos de respaldo. Para examinar una configuración específica, como la del gestor de paquetes apt:

cat /etc/logrotate.d/apt

Las directivas comunes incluyen rotate (número de respaldos), compress (compresión con gzip), missingok (ignorar archiovs faltantes) y notifempty (evitar rotar archivos vacíos).

Creación de configuraciones personalizadas

Método integrado en el sistema

Para aplicaciones que se ejecutan como servicio del sistema, se recomienda agregar archivos de configuración en /etc/logrotate.d/. Por ejemplo, para una aplicación web con registros en /var/log/mi-app/:

sudo nano /etc/logrotate.d/mi-app

Contenido de ejemplo con directivas adaptadas:

/var/log/mi-app/*.log {
    diario
    missingok
    rotar 15
    comprimir
    notifempty
    crear 0640 www-data www-data
    scriptcompartido
    postrotar
        systemctl reload mi-app
    fin
}

Esta configuración implementa rotación diaria, creación de nuevos archivos con permisos específicos y recarga del servicio tras la rotación. La directiva scriptcompartido asegura que los scripts se ejecuten una sola vez por ejecución de Logrotate, incluso si coinciden múltiples archivos.

Para probar la configuración:

sudo logrotate /etc/logrotate.conf --debug

Configuración independiente para usuarios no privilegiados

Cuando se requiere rotación de registros para aplicaciones de usuario con frecuencia horaria, se puede crear una configuración externa al sistema global. Ejemplo para un usuario "analista":

nano ~/config/logrotate-personal.conf

Contenido:

/home/analista/registros/*.log {
    horario
    missingok
    rotar 48
    comprimir
    crear
}

Para probar manualmente:

logrotate ~/config/logrotate-personal.conf --state ~/logrotate-estado --verbose

El archivo de estado rastrea las ejecuciones enteriores. La directiva --force permite forzar la rotación para pruebas.

Para automatización, se configura una tarea cron que ejecute Logrotate cada hora:

crontab -e

Agregar la línea:

15 * * * * /usr/sbin/logrotate ~/config/logrotate-personal.conf --state ~/logrotate-estado

Caso práctico: rotación diaria con eliminación automática

Escenario: Rotar registros en /var/log/servicio-analisis/ diariamente y eliminar archivos mayores a 30 días.

Crear archivo de configuración:

sudo nano /etc/logrotate.d/servicio-analisis

Configuración inicial:

/var/log/servicio-analisis/*.log {
    diario
    rotar 30
    missingok
    notifempty
    copiartruncar
    fechaprefijo
    directorioviejo /var/log/servicio-analisis/archivados
    postrotar
        find /var/log/servicio-analisis/archivados -name "*.log" -type f -mtime +30 -exec rm -f {} \;
    fin
}

Si se produce un error de permisos inseguros, se debe especificar el usuario y grupo mediante la directiva su:

/var/log/servicio-analisis/*.log {
    su raiz raiz
    diario
    rotar 30
    missingok
    notifempty
    copiartruncar
    fechaprefijo
    postrotar
        find /var/log/servicio-analisis -name "*.log" -type f -mtime +30 -exec rm -f {} \;
    fin
}

Prueba con rotación forzada:

sudo logrotate -f /etc/logrotate.d/servicio-analisis

Para automatización diaria, se verifica la configuración de cron y se reinicia el servicio si es necesario:

sudo systemctl restart cron

Los parámetros clave de Logrotate incluyen:

  • compress/nocompress: Gestión de compresión con gzip.
  • copiartruncar: Alternativa a mover archivos, que crea copias y trunca el original.
  • create/modo propietario grupo: Control de permisos para archivos nuevos.
  • directorioviejo: Ubicación alternativa para archivos rotados.
  • pre/postrotar: Ejecución de comandos antes o después de la rotación.
  • diario/semanal/mensual: Control de frecuencia.
  • rotar cantidad: Número de respaldos a mantener.
  • size tamaño: Rotación basada en tamaño del archivo.

El comando find en el script postrotar utiliza parámetros -mtime para filtrar archivos por antigüedad, donde +n significa mayor a n días, -n menor a n días, y n exactamente n días.

Etiquetas: logrotate Ubuntu cron system-logs log-rotation

Publicado el 6-3 01:39