Guía completa para usar logrotate en Linux con ejemplos y opciones

Artículos Guías Manuales Sistemas Linux Windows Binario 0

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.