Introducción
En cualquier servidor Linux, los procesos y aplicaciones generan continuamente archivos de registro (logs). Sin una estrategia adecuada, estos archivos pueden crecer sin control, consumiendo espacio en disco y dificultando la depuración. El comando logrotate ofrece una solución automática para rotar, comprimir y eliminar esos logs según políticas definidas.
¿Qué es logrotate?
logrotate es una utilidad que se ejecuta típicamente mediante cron diariamente. Lee su archivo de configuración y aplica reglas a cada archivo de registro especificado, creando versiones rotadas (por ejemplo, access.log.1, access.log.2.gz) y eliminando las más antiguas según el número de rotaciones o la antigüedad.
Cómo funciona logrotate
El demonio cron invoca a /usr/sbin/logrotate con el archivo de configuración /etc/logrotate.conf y los archivos adicionales dentro de /etc/logrotate.d/. Cada bloque de configuración define:
- Los archivos de registro a afectar (se pueden usar comodines).
- La frecuencia de rotación (diaria, semanal, mensual).
- El número de rotaciones a retener.
- Acciones adicionales como compresión, eliminación de archivos viejos, ejecución de scripts antes o después de la rotación.
Archivo de configuración principal
El archivo /etc/logrotate.conf contiene opciones globales que se heredan a menos que se sobrescriban en bloques específicos. Algunas directivas comunes son:
weekly– rotación semanal.rotate 4– mantener cuatro copias rotadas.create 0640 root adm– crear un nuevo archivo de registro después de la rotación con los permisos y propietario indicados.compress– comprimir los archivos rotados con gzip.delaycompress– posponer la compresión hasta el segundo ciclo de rotación (útil cuando algún proceso aún necesita escribir en el archivo reciente).dateext– añadir una fecha al nombre del archivo rotado en lugar de un número simple.dateformat .%Y-%m-%d– definir el formato de la fecha añadida cuando se usadateext.
Bloques de configuración por servicio
En el directorio /etc/logrotate.d/ se encuentran archivos individuales para cada aplicación. Por ejemplo, el archivo nginx podría contener:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/usr/sbin/invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
Ejemplo de configuración para Apache basado en tamaño
Además de la rotación por tiempo, logrotate puede rotar cuando un archivo supera un tamaño determinado usando la directiva size. Esto es útil para aplicaciones que generan logs esporádicos pero voluminosos.
/var/log/apache2/*log {
size 100M
rotate 5
compress
create 0640 root adm
sharedscripts
postrotate
/usr/sbin/invoke-rc.d apache2 reload >/dev/null 2>&1
endscript
}
En este ejemplo, cada vez que cualquier archivo de log en el directorio supere los 100 megabytes, se rotará, se comprimirá y se mantendrán las cinco copias más recientes.
Directivas avanzadas
size– define el tamaño máximo antes de rotar (ej.100M,1G).dateext– agrega una fecha al nombre del archivo rotado.dateformat .%Y-%m-%d-%s– personaliza el formato de la fecha.olddir /var/log/archive– mueve los logs rotados a un directorio diferente.prerotateypostrotate– scripts que se ejecutan antes y después de la rotación.sharedscripts– asegura que los scripts se ejecuten una sola vez cuando varios archivos coinciden con el patrón.mail direccion@dominio.com– envía por correo el archivo rotado antes de eliminarlo (requiere que esté configurado un MTA).
Prueba y depuración
Para probar la configuración sin aplicar cambios reales, use:
logrotate -d /etc/logrotate.conf
La opción -d (debug) muestra qué haría logrotate sin tocar los archivos. Para forzar una rotación inmediata, use:
logrotate -f /etc/logrotate.conf
Si necesita ver qué archivos serían afectados en una ejecución real pero sin modificar el estado, combine -d con -v (verbose) para obtener más detalle.
En caso de problemas, revise los permisos de los archivos de registro y asegúrese de que el usuario bajo el cual se ejecuta cron (usualmente root) tenga permiso para leer, escribir y crear en los directorios especificados. También examine los logs de cron en /var/log/syslog o /var/log/cron para ver si se ejecutó la tarea.
Buenas prácticas
- Mantenga los archivos de configuración lo más simples posible; evite duplicar directivas que ya están definidas globalmente.
- Use
sharedscriptscuando varios archivos de registro compartan el mismo script de postrotación. - Si su aplicación necesita señalar explícitamente la rotación (por ejemplo, mediante
kill -USR1), coloque esa orden dentro del bloquepostrotate. - Monitoree el uso de disco con herramientas como
dfodupara asegurarse de que la política de retención sea adecuada. - Documente cualquier cambio en la configuración y revíselo periódicamente, especialmente después de actualizaciones de software que puedan modificar la ubicación de los logs.
- Considere usar
olddirpara separar los logs rotados de los activos, facilitando la copia de seguridad y la búsqueda histórica.
Conclusión
logrotate es una herramienta esencial para cualquier administrador de sistemas Linux. Su configuración declarativa permite automatizar la gestión de logs, evitando el crecimiento descontrolado de archivos y facilitando la auditoría y solución de problemas. Con los conceptos y ejemplos presentados, ya está listo para implementar una estrategia de rotación de logs eficiente y segura en su entorno.