Cómo rotar y comprimir archivos de registro en Linux con Logrotate

En un sistema Linux y en casi todos los sistemas, los archivos de registro son cruciales cuando se trata de examinar y solucionar errores. Proporcionan pistas importantes sobre lo que podría haber salido mal con varios servicios del sistema antes de la falla.

Cualquier servicio instalado en sus sistemas Linux, como el servidor web Apache o el servidor de base de datos MySQL, genera archivos de registro que generalmente se almacenan en el /var/registro directorio. Si revisas el contenido de este directorio, verás contenidos similares a los que tenemos a continuación:

Con el tiempo, a medida que se registra información adicional, los archivos de registro aumentan de tamaño y ocupan más espacio en el disco duro. Antes de que se dé cuenta, los archivos de registro habrán aumentado de tamaño, ocupando gran parte del espacio de su disco duro y, si no tiene cuidado, puede quedarse sin espacio en el disco fácilmente.

Con eso en mente, es prudente mantener los archivos de registro en un tamaño manejable y eliminar las entradas de registro antiguas que acaparan un espacio precioso en el disco. Y aquí es donde entra la rotación de registros.

¿Qué es la rotación de registros?

Rotación de registros es un proceso que crea nuevos archivos de registro y archivos y elimina los antiguos para ahorrar espacio en el disco. El proceso cambia el nombre de un archivo de registro actual. Por ejemplo, appport.log se convierte aport.log.1 y un nuevo appport.log El archivo de registro se crea para registrar nuevas entradas de registro. Los archivos de registro más antiguos suelen estar comprimidos y aparecen como appport.log.2.gz, appport.log.3.gz, appport.log.4.gz, y así.

El proceso de rotación de registros se facilita utilizando una utilidad llamada logrotate. Esta es una herramienta que facilita la rotación de archivos de registro y el archivo y eliminación de los antiguos para liberar espacio en disco. En resumen, logrotate logra lo siguiente:

  • Creación de nuevos archivos de registro después de rotar los antiguos.
  • Archivo de archivos de registro antiguos.
  • Purga de archivos de registro más antiguos que se han rotado para ahorrar espacio.

La rotación de registros generalmente se activa cuando el tamaño de los archivos de registro crece y supera un cierto límite.

Cómo funciona la utilidad logrotate

Antes de examinar el funcionamiento de la utilidad logrotate, asegúrese de que logrotate esté instalado en su sistema. Para hacer eso, emita el comando:

Para el sistema Debian/Ubuntu:

$ sudo apt-get install logrotate -y

Para el sistema CentOS/RHEL/Fedora:

$ sudo yum install logrotate -y
or 
$ sudo dnf  install logrotate -y

Ejecute el siguiente comando para verificar la versión de logrotate,

[email protected]:~$ logrotate --version
logrotate 3.14.0
    Default mail command:       /usr/bin/mail
    Default compress command:   /bin/gzip
    Default uncompress command: /bin/gunzip
    Default compress extension: .gz
    Default state file path:    /var/lib/logrotate/status
    ACL support:                yes
    SELinux support:            yes
[email protected]:~$

Desde el resultado, podemos ver claramente que tenemos logrotate versión 3.14.0. De forma predeterminada, logrotate viene preinstalado en las distribuciones modernas de Linux y, por lo tanto, no es necesario instalarlo.

Logrotar archivos de configuración

Logrotate se ejecuta diariamente como un trabajo cron, revisa varios archivos de registro, los rota y purga los archivos de registro más antiguos como se define en el archivo de configuración. Hay dos fuentes de configuración principales a las que debe prestar mucha atención:

/etc/logrotate.conf – Este es el archivo de configuración principal de la herramienta logrotate. Contiene configuraciones predeterminadas y facilita la rotación de registros para registros de paquetes que no son del sistema. Más notablemente, utiliza un ‘incluir‘ directiva para extraer configuraciones ubicadas en el ‘/etc/logrotate.d‘directorio. Echemos un vistazo al archivo de configuración.

$ cat /etc/logrotate.conf

Logrotate-archivo-linux

A partir de la configuración que se muestra, el archivo /etc/logrotate.conf rota los archivos de registro en un semanalmente base como se indica en línea 3.

  • Línea 7 indica que el usuario raíz y el grupo adm son propietarios de los archivos de registro.
  • línea 10 indica que solo se realiza una copia de seguridad de los archivos de registro de 4 semanas, después de lo cual los más antiguos se purgarán o eliminarán para crear más espacio en el disco.
  • línea 13 indica la creación de un nuevo archivo de registro después de la rotación del archivo de registro actual.
  • La declaración de inclusión en línea 22 extrae las configuraciones de los archivos de la aplicación que se enumeran en el directorio /etc/logrotate.d.

/etc/logrotate.d – Este es un directorio que contiene la configuración logrotate de los paquetes instalados cuyos archivos de registro requieren rotación de registros. Por lo general, también es probable que encuentre archivos de configuración de herramientas del sistema como apt y dpkg (para sistemas Debian), rsyslog, ufw y cups-daemon. Esto es lo que encontrarías:

[email protected]:~$ ls -l /etc/logrotate.d/
total 60
-rw-r--r-- 1 root root 120 Sep  5  2019 alternatives
-rw-r--r-- 1 root root 126 Dec  4 20:25 apport
-rw-r--r-- 1 root root 173 Apr  9 11:21 apt
-rw-r--r-- 1 root root  91 Apr  1 10:49 bootlog
-rw-r--r-- 1 root root 130 Jan 21  2019 btmp
-rw-r--r-- 1 root root 181 Feb 17 08:19 cups-daemon
-rw-r--r-- 1 root root 112 Sep  5  2019 dpkg
-rw-r--r-- 1 root root 329 Feb  4  2019 nginx
-rw-r--r-- 1 root root  94 Feb  8  2019 ppp
-rw-r--r-- 1 root root 501 Mar  7  2019 rsyslog
-rw-r--r-- 1 root root 677 Nov 29 02:08 speech-dispatcher
-rw-r--r-- 1 root root 119 Mar 30 21:49 ubuntu-advantage-tools
-rw-r--r-- 1 root root 178 Jan 21 22:16 ufw
-rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades
-rw-r--r-- 1 root root 145 Feb 19  2018 wtmp
[email protected]:~$

Echemos un vistazo al archivo de configuración de la herramienta de administración de paquetes dpkg.

$ cat -n /etc/logrotate.d/dpkg

dpkg-logrotate-linux

  • mensual: Esto indica la rotación de los archivos de registro una vez al mes
  • rotar 12: Se realizan copias de seguridad de 12 archivos de registro antiguos.
  • comprimir: Esto implica que los archivos rotados deben comprimirse utilizando la compresión gzip predeterminada con archivos de registro que tienen una extensión de archivo .gz.
  • Crear raíz raíz 644: crea un nuevo archivo de registro tan pronto como se completa la rotación del registro con permisos de archivo octales de 644 con propiedad raíz de usuario y grupo.
  • faltaok: La directiva suprime los mensajes de error en caso de que falte un archivo de registro.
  • notifico: Esto ignora la rotación de archivos si el archivo de registro está vacío.

Cree un archivo de configuración logrotate de muestra

Supongamos que tenemos una aplicación ejecutándose como usuario de linuxtechi y está generando archivos de registro que se almacenan en el /inicio/linuxtechi/registros directorio. Necesitamos configurar los archivos de registro para rotar semanalmente.

Pero primero, vamos a crear un archivo de configuración logrotate en el directorio de inicio como se muestra:

$ vim /home/linuxtechi/logrotate.conf

A continuación, vamos a pegar la configuración mostrada:

/home/linuxtechi/logs/*.log {
    weekly
    missingok
    rotate 14
    compress
    create
}

Pongamos esto en contexto:

Los archivos de registro se rotarán semanalmente, con la supresión de cualquier mensaje de error si falta alguno de los archivos de registro. Se realizarán copias de seguridad de 14 archivos de registro en el transcurso del mes con la creación de un nuevo archivo de registro después de la rotación del archivo de registro actual.

Archivo de registro personalizado-linux

Ahora vamos a crear un directorio de registros que contendrá los archivos de registro de la aplicación y luego crearemos un archivo de registro llamado app.log.

[email protected]:~$ mkdir logs && cd logs
[email protected]:~/logs$ touch app.log
[email protected]:~/logs$ ls
app.log
[email protected]:~/logs$

Ahora, ejecutaremos el comando logrotate para crear un archivo de estado logrotate en el directorio de inicio para verificar si las entradas de registro se han creado o no.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose

Obtendrá una salida similar a esta:

Logrotate-estado-linux-servidor

A partir de la salida, el archivo de registro no se rotó por la sencilla razón de que la rotación se produce semanalmente y el archivo de registro tiene apenas una hora de antigüedad.

Examine el archivo logrotate para verificar si se registró alguna información sobre la ejecución de la rotación de registros.

[email protected]:~$ cat logrotate-state
logrotate state -- version 2
"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0
[email protected]:~$

A partir de la salida, podemos ver que la utilidad logrotate reconoció la última vez que consideró el archivo de registro para la rotación, y se imprime la marca de tiempo.

Ahora obligaremos a logrotate a rotar el archivo de registro, lo que de otro modo no haría por ahora, ya que aún no se ha excedido el intervalo de tiempo especificado, usando el -fuerza bandera como se muestra.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force

Forefully-logrotate-linux-log-files

Si regresa al directorio de registros, observará un archivo de registro adicional que se ha girado y comprimido como se muestra.

[email protected]:~$ cd logs/
[email protected]:~/logs$ ls
app.log  app.log.1.gz
[email protected]:~/logs$

Comprimir y rotar los archivos de registro según el tamaño

A veces, los archivos de registro pueden crecer y consumir espacio incluso antes del intervalo de tiempo especificado para la rotación, ya sea diaria, semanal o mensual.

Una forma de resolver el problema es especificar el tamaño máximo del archivo que, cuando se supere, se activará la rotación del archivo de registro. Para lograr esto, especifique el tamaño máximo opción en el archivo logrotate.

Por ejemplo, para activar la rotación cuando el tamaño del archivo crece más de 40 Megabytes, incluya la opción:

tamaño máximo 40M

Supongamos que creamos un archivo de rotación de registro personalizado para nuestra aplicación en la carpeta /etc/logrotate.d,

[email protected]:~$ cd /etc/logrotate.d/
[email protected]:/etc/logrotate.d$ sudo vi custom-app
/home/linuxtechi/logs/app-access.log
{
    daily
    missingok
    size 40M
    rotate 4
    compress
    create
}

Guarde y cierre el archivo,

el sufijo METRO denota Megabytes, Para kilobytes usar k mientras GRAMO indica el tamaño en Gigabytes.

La declaración implica que los archivos de registro de más de 40 megabytes se rotarán sin tener en cuenta el intervalo de tiempo de rotación. Esto implica que para un archivo de registro que debe rotarse después de 1 hora, se rotará antes del intervalo especificado si supera el umbral de 40 MB.

Volquemos algunos datos en el archivo de registro de nuestra aplicación personalizada y luego veamos cómo logrotate rotará los archivos de registro,

[email protected]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=25
25+0 records in
25+0 records out
26214400 bytes (26 MB, 25 MiB) copied, 0.0422015 s, 621 MB/s
[email protected]:~$ du -sh /home/linuxtechi/logs/app-access.log
25M     /home/linuxtechi/logs/app-access.log
[email protected]:~$

Usar ‘-D‘ opción en el comando logrotate para realizar una ejecución en seco de logrotate en el archivo de registro, ejecute el siguiente comando,

$ logrotate -d /etc/logrotate.d/custom-app

logrotate-d-dry-run-log-archivos-linux

Como podemos ver en la salida, logrotate no rotará el archivo de registro ya que el tamaño no supera los 40 MB.

Ahora hagamos que el tamaño del archivo de registro sea superior a 40 MB,

[email protected]:~$ cd logs/
[email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=45
45+0 records in
45+0 records out
47185920 bytes (47 MB, 45 MiB) copied, 0.136979 s, 344 MB/s
[email protected]:~/logs$ du -sh app-access.log
46M     app-access.log
[email protected]:~/logs$

Ahora, intente ejecutar el comando logrotate con la opción ‘-d’ nuevamente,

logrotate-d-opción-linux

El resultado anterior confirma que logroate rotará el archivo de registro ya que el tamaño es superior a 40 MB.

Además de mejorar la rotación de los archivos de registro en función del tamaño, es prudente asegurarse de que el archivo de configuración logrotate se llame con una frecuencia regular mediante un trabajo cron. Esto es especialmente crítico para los archivos de registro que aumentan de tamaño tan rápidamente y corren el riesgo de llenar su espacio en disco.

Hay dos maneras de hacer esto:

Puede copiar el script logrotate del directorio /etc/cron.daily a la ubicación /etc/cron.hourly. Esto cambiará la rotación de registros a una hora en lugar de una diaria.

Otra forma es especificar un trabajo cron en el archivo /etc/crontab como se muestra

*/10 * * * * /etc/cron.daily/logrotate

Esto activará la rotación cada 10 minutos.

El uso de crontab para llamar a la secuencia de comandos logrotate además de especificar el tamaño máximo mediante la directiva maxsize, es una combinación perfecta para garantizar que sus archivos de registro se rotan a tiempo para evitar llenar su disco duro.

Para obtener opciones adicionales con la herramienta logrotate, visite las páginas man como se muestra:

manual-logrotate-linux

Conclusión

En esta guía, hemos aclarado la importancia de los archivos de registro, la amenaza que pueden causar si se dejan aumentar de tamaño y cómo la herramienta logrotate puede ayudar a administrar el tamaño de los archivos de registro en su sistema. También analizamos algunas de las opciones disponibles para usar en la configuración de logrotate.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *