Rotación y compresión de registros usando logrotate | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Rotación y compresión de registros usando logrotate

  • Nivel: Intermedio
  • Tiempo estimado: ~20 minutos
  • Objetivo: Configurar logrotate para comprimir y rotar automáticamente los archivos de registro de la aplicación para evitar el agotamiento del espacio en disco.

Introducción

Los registros son una parte crítica de la gestión de cualquier aplicación en producción: sin ellos, entender de manera confiable qué salió mal y qué hacer al respecto sería muy difícil. Una aplicación ocupada puede generar miles de entradas por minuto, y todas ellas se almacenan típicamente en archivos. Necesitamos comprimir y eliminar los registros antiguos de manera oportuna para evitar quedarnos sin espacio en disco. En este tutorial, configuraremos logrotate en un servidor Linux.

¿Qué es logrotate?

logrotate es una utilidad de Linux diseñada para simplificar la administración de sistemas que generan grandes cantidades de archivos de registro. Permite que los registros se compriman, roten y eliminen automáticamente. Normalmente se ejecuta diariamente, semanalmente o mensualmente a través de cron o un temporizador de systemd.

Requisitos previos

Antes de comenzar, asegúrese de que se cumplan las siguientes condiciones:

  • Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12, o CentOS/RHEL 7+
  • logrotate: versión 3.x (verificar en el paso 1)
  • Acceso: acceso sudo o root al servidor
  • Conocimientos requeridos: uso confiado de la línea de comandos de Linux y edición básica de archivos

Paso 1: Verificar la instalación de logrotate

Para verificar la instalación, simplemente ejecute:

logrotate --version

Salida esperada:

logrotate 3.19.0 Comando de correo predeterminado: /usr/bin/mail Comando de compresión predeterminado: /bin/gzip Comando de descompresión predeterminado: /bin/gunzip Extensión de compresión predeterminada: .gz Ruta del archivo de estado predeterminada: /var/lib/logrotate/status

Si el comando no se encuentra, logrotate no está instalado. Instálelo:

Debian/Ubuntu:

sudo apt install logrotate

CentOS/RHEL:

sudo yum install logrotate

Paso 2: Comprender la estructura de configuración

El archivo de configuración principal se encuentra en /etc/logrotate.conf – lo dejaremos sin cambios por ahora. Nuestras reglas para servicios específicos irán en /etc/logrotate.d/ – se debe colocar un archivo separado allí para cada servicio.

Antes de agregar algo, verifique si ya existe una configuración para su servicio:

ls /etc/logrotate.d/

Para servicios populares como nginx o Apache, las configuraciones suelen estar ya presentes. Si nginx o apache2 ya están allí, abra ese archivo y ajuste la cantidad de rotaciones y la configuración de compresión según sus necesidades, en lugar de crear un duplicado.

Paso 3: Agregar una configuración de servicio

Supongamos que hay una aplicación personalizada y sus registros se encuentran en /opt/myapp/*.log.

Cree y abra el archivo:

sudo nano /etc/logrotate.d/myapp

Pegue lo siguiente dentro:

/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }

Esta configuración instruye a logrotate para:

  1. daily – rotar los registros diariamente; también puede especificar weekly o monthly.
  2. missingok – no fallar con un error si falta el archivo de registro.
  3. rotate 14 – mantener 14 copias rotadas antes de la eliminación.
  4. compress – comprimir los registros rotados usando gzip.
  5. delaycompress – no comprimir la rotación más reciente; útil si la aplicación aún mantiene el archivo abierto.
  6. notifempty – omitir la rotación si el archivo de registro está vacío.
  7. create 0640 www-data adm – crear un nuevo archivo de registro vacío con los permisos, propietario y grupo especificados. El propietario debe coincidir con el usuario bajo el cual se ejecuta la aplicación (en sistemas basados en Debian a menudo www-data, en sistemas basados en RHEL generalmente apache o nginx).
  8. sharedscripts – ejecutar el script postrotate una vez, incluso si se han coincidido varios archivos.
  9. postrotate – señalar a la aplicación que vuelva a abrir sus manejadores de archivos después de la rotación.

Info

Si el directorio /opt/myapp/ o los archivos de registro aún no existen en el momento de la primera ejecución, eso no es un problema. La directiva missingok hará que logrotate omita silenciosamente el archivo sin lanzar un error. La rotación de registros comenzará automáticamente tan pronto como la aplicación cree los registros.

Paso 4: Probar la configuración

4.1 Ejecución de prueba

Después de escribir la configuración, debe verificarse. La opción -d ejecuta logrotate en modo de depuración – no se cambia nada realmente:

sudo logrotate -d /etc/logrotate.d/myapp

Info

El modo -d muestra información de diagnóstico pero no modifica ningún archivo.

4.2 Ejecución real forzada

Si la ejecución de prueba parece correcta, fuerce una rotación real usando la opción -f:

sudo logrotate -f /etc/logrotate.d/myapp

Info

Importante: La opción -f desencadena una rotación real. Ejecútela solo después de que la prueba parezca correcta.

Paso 5: Verificar el resultado

Después de las primeras rotaciones, verifique el directorio de registros:

ls -lh /opt/myapp/

Salida esperada:

total 28K -rw-r----- 1 www-data adm 0 Jan 17 12:00 app.log -rw-r----- 1 www-data adm 12K Jan 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Jan 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Jan 15 12:00 app.log.3.gz

La rotación más reciente (app.log.1) permanece sin comprimir debido a delaycompress. Todo lo más antiguo está comprimido en gzip. Eso es exactamente lo que queríamos.

Paso 6: Verificar la programación automática

logrotate se ejecuta automáticamente – a través de cron o un temporizador de systemd, dependiendo de la distribución.

Sistemas basados en cron

cat /etc/cron.daily/logrotate

Si el archivo existe, ese es el archivo que ejecuta logrotate diariamente.

Sistemas basados en systemd

En sistemas más nuevos, logrotate puede ejecutarse a través de un temporizador de systemd en lugar de cron.

Verifique:

systemctl list-timers | grep logrotate

Debería ver un temporizador con las horas de la última y próxima ejecución, algo como:

Thu 2026-01-18 00:00:00 UTC 23h left Wed 2026-01-17 00:00:11 UTC 47 min ago logrotate.timer

Si el logrotate.timer falta en la salida, el temporizador está deshabilitado. Habilítelo:

sudo systemctl enable logrotate.timer

sudo systemctl start logrotate.timer

Archivo de estado

Puede verificar cuándo se ejecutó logrotate por última vez a través de su propio archivo de estado:

cat /var/lib/logrotate/status

Este es el historial de rotación propio de logrotate. Después de la primera ejecución real, verá cada archivo de registro con la fecha de su última rotación:

"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17

Si algún registro no se está rotando cuando se espera, este es el primer lugar para mirar.

Reversión

Para deshacer todo lo hecho, simplemente elimine el archivo de configuración de /etc/logrotate.d/:

sudo rm /etc/logrotate.d/myapp

Esto detendrá el procesamiento de registros para su aplicación. Los archivos ya rotados no se eliminan.

Para eliminar logrotate por completo:

Debian/Ubuntu:

sudo apt remove logrotate

CentOS/RHEL:

sudo yum remove logrotate

Info

Importante: Eliminar logrotate deshabilitará la rotación de registros para todo el sistema, incluidos nginx, rsyslog y otros servicios que dependen de él.

Conclusión

Eso es todo. Un archivo bien escrito en /etc/logrotate.d/, verificado con -d – y está hecho. Los registros se mantienen limpios, el disco se mantiene saludable, y no tiene que pensar más en ello.

Versión del documento: 1.2
Última actualización: Marzo 2026
Propietario: Equipo de Documentación Técnica

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA