logrotate
es una herramienta en sistemas Linux que se utiliza para gestionar archivos de registro (logs), evitando que ocupen demasiado espacio en el disco. Permite rotar, comprimir, eliminar y enviar por correo los archivos de logs. A continuación te proporciono una guía detallada con ejemplos y explicaciones de las opciones más comunes de logrotate
.
1. ¿Cómo funciona logrotate
?
logrotate
lee su configuración desde uno o varios archivos, los cuales pueden estar en:
- El archivo de configuración principal:
/etc/logrotate.conf
. - Archivos de configuración individuales ubicados en:
/etc/logrotate.d/
.
1.1. Sintaxis básica del archivo de configuración
Cada entrada en un archivo de configuración de logrotate
especifica qué archivo de registro debe gestionarse y cómo. La estructura básica es:
/path/to/logfile {
opción1 valor1
opción2 valor2
...
}
2. Opciones más comunes de logrotate
A continuación, las opciones más utilizadas y lo que hacen:
2.1. rotate
Define cuántas copias antiguas del archivo de registro se deben conservar. Si pones rotate 5
, se conservarán 5 versiones antiguas del archivo de log.
rotate 5
2.2. size
Especifica el tamaño máximo que puede alcanzar un archivo de registro antes de ser rotado. Puedes usar sufijos como M
(megabytes), G
(gigabytes), etc.
size 100M
2.3. compress
/ nocompress
Habilita o deshabilita la compresión de los archivos de log rotados. Generalmente se usa la compresión gzip
por defecto.
compress
nocompress
2.4. create
Indica a logrotate
que cree un nuevo archivo de log después de rotar el anterior. Puedes especificar los permisos, propietario y grupo del nuevo archivo.
create 0644 root root
2.5. dateext
Añade la fecha actual como una extensión al nombre del archivo rotado.
dateext
2.6. missingok
Si el archivo de registro no existe, no muestra un error y sigue adelante con los otros archivos de log. Esta opción es útil para logs que no se generan siempre.
missingok
2.7. notifempty
No rota archivos de registro vacíos.
notifempty
2.8. daily
, weekly
, monthly
Define la frecuencia con la que logrotate
debe rotar el archivo de log. Puedes elegir entre rotar los logs diariamente, semanalmente o mensualmente.
daily
weekly
monthly
2.9. postrotate
/ prerotate
Estos bloques permiten ejecutar scripts o comandos antes (prerotate
) o después (postrotate
) de rotar un archivo de log. Es útil si necesitas reiniciar un servicio o realizar alguna tarea adicional después de rotar un log.
postrotate
systemctl restart nginx
endscript
2.10. maxage
Elimina archivos de registro rotados que sean más antiguos que el número especificado de días.
maxage 30
2.11. olddir
Mueve los archivos de log rotados a otro directorio.
olddir /var/log/old
3. Ejemplos de uso
3.1. Rotación de logs de Apache
Supongamos que quieres rotar los archivos de log de Apache en /var/log/apache2/access.log
y /var/log/apache2/error.log
diariamente, comprimirlos y conservar las últimas 7 rotaciones. El archivo de configuración sería algo así:
/var/log/apache2/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 root root
postrotate
systemctl reload apache2 > /dev/null
endscript
}
3.2. Rotación de logs de un sistema personalizado
Si tienes un archivo de registro personalizado en /var/log/myapp.log
que deseas rotar cuando alcance los 50 MB, sin importar la antigüedad, puedes usar:
/var/log/myapp.log {
size 50M
rotate 5
compress
missingok
notifempty
create 0644 root root
postrotate
systemctl restart myapp.service
endscript
}
3.3. Mantener logs por 30 días
Si deseas mantener los archivos de logs durante 30 días y luego eliminarlos:
/var/log/mylog.log {
daily
rotate 30
compress
missingok
notifempty
maxage 30
}
4. Usando logrotate
manualmente
Para probar cómo funcionará logrotate
con tu archivo de configuración sin hacer cambios, puedes usar el siguiente comando:
logrotate -d /etc/logrotate.conf
El flag -d
es para modo de depuración, que muestra lo que haría sin realizar ninguna acción.
Si quieres forzar una rotación de logs manualmente, puedes usar:
logrotate -f /etc/logrotate.conf
El flag -f
fuerza la rotación, sin importar si las condiciones establecidas en la configuración (como tamaño o frecuencia) se cumplen o no.
5. Archivo de configuración principal /etc/logrotate.conf
El archivo principal de configuración /etc/logrotate.conf
también puede contener configuraciones globales. Estas configuraciones se aplican a todos los archivos de log a menos que sean sobreescritas en configuraciones individuales.
Ejemplo del archivo /etc/logrotate.conf
:
# Rotar semanalmente
weekly
# Mantener 4 copias antiguas
rotate 4
# Comprimir archivos antiguos
compress
# Incluir configuraciones específicas de aplicaciones
include /etc/logrotate.d
El archivo logrotate.conf
a menudo incluye un bloque include
que apunta a /etc/logrotate.d
, donde se encuentran configuraciones individuales para varios servicios.
6. Programación de logrotate
con cron
logrotate
generalmente es ejecutado por el sistema a través de cron
diariamente. Puedes ver el archivo de tareas programadas en:
cat /etc/cron.daily/logrotate
Si necesitas ejecutar logrotate
con más o menos frecuencia, puedes editar las tareas de cron
o mover el archivo de logrotate a otro directorio de cron como cron.hourly
, cron.weekly
o cron.monthly
.
7. Conclusión
logrotate
es una herramienta esencial en cualquier servidor Linux para la administración eficiente de los archivos de registro. Te permite controlar el tamaño y la cantidad de logs, automatizar la compresión y mantener los registros limpios, lo que a su vez asegura que los sistemas no se llenen de archivos de log innecesarios.