GNU/Linux >> Tutoriales Linux >  >> Linux

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. Brindan 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 /var/log. 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 te des cuenta, los archivos de registro habrán aumentado de tamaño, ocupando gran parte del espacio de tu disco duro y, si no tienes cuidado, puedes quedarte 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 en juego 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, apport.log se convierte en apport.log.1 y un nuevo apport.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  apport.log.2.gz , apport.log.3.gz , apport.log.4.gz , y así sucesivamente.

El proceso de rotación de registros se facilita mediante 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 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 límite determinado.

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,

linuxtech[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. En particular, utiliza un 'incluir ‘directiva para extraer configuraciones ubicada en el ‘/etc/logrotate.d ‘directorio. Echemos un vistazo al archivo de configuración.

$ cat /etc/logrotate.conf

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

  • Línea 7 indica que el usuario root 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 la 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 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ía:

[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 gestión de paquetes dpkg.

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

  • mensual :Esto indica la rotación de los archivos de registro una vez al mes
  • rotar 12 :12 archivos de registro antiguos están respaldados.
  • 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.
  • notifempty :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 /home/linuxtechi/logs 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 que se muestra:

/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.

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 crearon o no.

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

Obtendrá un resultado similar a este:

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 –force bandera como se muestra.

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

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

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

Comprime y gira 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 maxsize 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 M denota Megabytes , por kilobytes usa k mientras G 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]:~$

Utilice '-d ' 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

Como podemos ver en el resultado, 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,

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 formas de hacerlo:

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:

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.


Linux
  1. Rotar y archivar registros con el comando logrotate de Linux

  2. Cómo administrar archivos de registro usando Logrotate en Linux

  3. Cómo encontrar archivos grandes de Linux con los comandos find y du

  4. Cómo archivar y comprimir archivos en Linux

  5. ¿Cómo comprimir y extraer archivos usando el comando tar en Linux?

Cómo cambiar el nombre de archivos y directorios en Linux

Cómo excluir archivos y directorios con Rsync

Cómo comprimir archivos y directorios en Linux

Cómo manejar archivos ISO en Linux con Mount, AcetoneISO y Furious

Cómo instalar y usar Pigz para comprimir archivos más rápido en Linux

¿Cómo copiar archivos y subdirectorios ocultos (comenzando con un punto) en Linux?