GNU/Linux >> Tutoriales Linux >  >> Linux

Uso de Logrotate en Linux para administrar archivos de registro (con ejemplos)

El sistema operativo Linux y las aplicaciones que se ejecutan a menudo generan registros en archivos. Estos archivos a menudo se almacenan en el /var/log directorio o cualquier otro archivo especificado por la aplicación. Si estos archivos de registro no se rotan, comprimen y eliminan periódicamente, eventualmente consumirán todo el espacio disponible en el disco y el servidor se congelará.

En esta guía, veremos cómo funciona logrotate y luego veremos un ejemplo sobre cómo configurar logrotation para nuestra aplicación personalizada.

Requisitos

Para seguir esta guía, necesita:

  • Una distribución Linux moderna como Ubuntu, Debian, Centos, Rhel, Rocky Linux
  • Acceso root al servidor o un usuario con privilegios sudo

Verifique su versión de logrotate con este comando:

logrotate --version

Salida de mi sistema:

# logrotate --version
logrotate 3.8.6

Si Logrotate no está instalado obtendrá un error. Instale el software utilizando el administrador de paquetes de su distribución de Linux.

Configuración de Logrotate

La configuración de logrotate se puede encontrar en este archivo /etc/logrotate.conf . Aquí es donde se encuentran los ajustes predeterminados. También encontrará algunas configuraciones de rotación para registros que no pertenecen a ningún paquete del sistema.

La línea más importante en este archivo de configuración es include /etc/logrotate.d . Esto le indica a logrotate que también verifique las configuraciones agregadas en ese directorio. Esto significa que para nuestras aplicaciones, no necesitamos agregar todo en ese archivo principal, podemos crear archivos de configuración individuales y agregarlos a /etc/logrotate.d directorio. La mayoría de los paquetes que instale y que necesiten ayuda con la rotación de registros también colocarán sus archivos de configuración logrotate en ese directorio.

Este es parte del contenido del /etc/logrotate.conf principal archivo:

weekly
rotate 4
create
dateext
compress
  • weekly configurar rotaciones de registro semanales con archivos de registro propiedad de la raíz usuario y el syslog grupo
  • rotate 4 se mantienen cuatro archivos de registro (guardar 4 semanas de trabajos atrasados)
  • create nuevos archivos de registro vacíos que se crean después de rotar el actual
  • dateex use la fecha como sufijo del archivo rotado
  • compress comprimir archivos rotados

Para los archivos individuales en el /etc/logrotate.d directorio, echemos un vistazo a uno como ejemplo:

cat /etc/logrotate.d/yum

Salida:

/var/log/yum.log {
    missingok
    notifempty
    maxsize 30k
    yearly
    create 0600 root root
}

Cada una de esas configuraciones heredará las configuraciones predeterminadas en /etc/logrotate.conf directorio.

Explicación:

  • /var/log/yum.log esta primera línea indica qué archivo son los objetivos de configuración
  • missingok si el archivo no existe, todavía está bien y logrotate no debería generar ningún error ni registrar ningún error
  • notifempty no gire el archivo de registro si está vacío
  • maxsize si el tamaño supera los 30k, rotar
  • yearly correr una vez al año
  • create 0600 root root cree el nuevo archivo rotado como root :root con permisos 0600

Algunas otras opciones no enumeradas anteriormente:

  • rotate 30 mantener treinta archivos, podar los más antiguos cuando excedan
  • monthly rotar una vez al mes
  • compress comprimir los archivos rotados. esto usa gzip por defecto y da como resultado archivos que terminan en .gz . El comando de compresión se puede cambiar usando compresscmd opción.

Logrotating Archivo de registro de aplicaciones personalizadas

Cuando tenemos nuestra aplicación personalizada generando y escribiendo registros en un archivo, es nuestra tarea configurar cómo se realiza la rotación para ese archivo.

  • Si tenemos acceso de root, lo ideal sería colocar el archivo de configuración en /etc/logrotate.d/ directorio y funcionaría como se describe arriba
  • Si no tenemos acceso de root tendríamos que configurar un cron para ejecutar logrotate comando pasando la configuración que definimos
  • Si desea rotar los registros con más frecuencia que diariamente, como cada hora porque la configuración de Logrotate del sistema solo se ejecuta una vez al día

Configuración en /etc/logrotate.d/

Digamos que tenemos una aplicación que genera registros en /var/log/our-app/app.log y se ejecuta como centos . Vamos a crear nuestro archivo de configuración logrotate /etc/logrotate/ourapp.conf con algunas configuraciones de ejemplo:

sudo vim /etc/logrotate.d/ourapp.conf

Configuración:

/var/log/our-app/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 0640 centos centos
    sharedscripts
    postrotate
        systemctl reload our-app
    endscript
}

Algunas directivas nuevas:

  • create 0640 centos centos crea un archivo de registro vacío después de la rotación con los permisos especificados 0640 y el usuario y grupo especificado centos
  • sharedscripts significa que cualquier secuencia de comandos agregada a la configuración se ejecuta solo una vez por ejecución, en lugar de cada archivo rotado. Si la directiva /var/log/our-app/*.log coincide con más de un archivo de registro, el script especificado en postrotate se ejecutaría dos veces sin esta opción
  • postrotate a endscript El bloque contiene una secuencia de comandos para ejecutar después de rotar el archivo de registro. En nuestro caso recargando la app. Esto a veces es necesario para que su aplicación cambie al archivo de registro recién creado. Tenga en cuenta que postrotate se ejecuta antes de que se compriman los registros. La compresión puede llevar mucho tiempo y su software debería cambiar al nuevo archivo de registro inmediatamente. Para tareas que deben ejecutarse después los registros están comprimidos, utilice la lastaction bloquear en su lugar.

Para probar la configuración anterior, use este comando:

sudo logrotate /etc/logrotate.conf --debug

El resultado será sobre qué archivos de registro está manejando Logrotate y qué les habría hecho. El trabajo Logrotate estándar se ejecutará una vez al día e incluirá su nueva configuración.

Datos de muestra en la salida

...
rotating pattern: /var/log/our-app/*.log  after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...

Usando logrotate comando para configuración personalizada

Si no tiene acceso de root al sistema y desea obtener sus propios archivos personalizados, esta sección le brinda una forma de hacerlo.

Digamos una aplicación our-app está generando archivos de registro y guardándolos en una ruta personalizada dentro de nuestro directorio de inicio, p. ~/apps/our-app/logs/ . Si los registros se generan con frecuencia, nos gustaría rotarlos hourly . ¿Pero logrotate no funciona cada hora?

Primero vamos a crear un archivo de configuración logrotate. Colocaré el archivo dentro del directorio conf de la aplicación en esta ruta ~/apps/our-app/conf/lorotate.conf con la siguiente configuración:

Edite el archivo:

vim ~/apps/our-app/conf/lorotate.conf

Con la siguiente configuración:

/home/centos/apps/our-app/logs/*.log {
    rotate 30
    hourly
    compress
    sharedscripts
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    copytruncate
}

La configuración anterior rota los archivos en el directorio /home/centos/apps/our-app/logs/*.log por hora, comprimiendo y manteniendo solo 30 registros antiguos.

  • copytruncate copia el contenido de un archivo de registro en un archivo nuevo y luego lo trunca.
  • dateformat especifica el formato del archivo girado
  • dateext indica a logrotate que incluya la extensión de fecha para los archivos rotados.

Para probar:

mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log

Ahora que tenemos el archivo en su lugar, ahora podemos usar logrotate para rotarlo. Lo único que tenemos que hacer es especificar un state expediente. Un state el archivo registra lo que logrotate vio la última vez que se ejecutó, por lo que sabe qué hacer. Para la configuración de la instalación del sistema, ya se maneja en /var/lib/logrotate/status pero en nuestro caso necesitamos especificar.

Podemos usar el directorio de inicio para esto:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
  • --verbose imprimirá información detallada sobre lo que está haciendo Logrotate.

Debería ver una salida como esta:

 $ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /home/centos/apps/our-app/logs/*.log  hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
  log does not need rotating (log has been already rotated)set default create context

Parte de la información se registró en el archivo de estado logrotate:

$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0

Logrotate anotó los troncos que vio y cuándo los consideró por última vez para la rotación. Si ejecutamos este mismo comando una hora más tarde, el registro se rotará como se esperaba.

Si desea obligar a Logrotate a rotar el archivo de registro cuando de otro modo no lo habría hecho, use --force bandera:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force

Esto es útil cuando se prueba postrotate y otros guiones.

Lo siguiente es hacer que el comando anterior se ejecute automáticamente. Esto se puede lograr usando crones. El crontab El comando es útil.

Para editar crones para que podamos usar este comando:

crontab -e

Esto abrirá un archivo de texto. Es posible que ya haya algunos comentarios en el archivo que expliquen la sintaxis básica esperada. Mueva el cursor hacia abajo a una nueva línea en blanco al final del archivo y agregue lo siguiente:

3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status

Lo anterior ejecutará el comando logrotate cada 3 minutos de cada hora. Usamos la ruta completa /usr/sbin/logrotate para que no obtengamos el error Comando no encontrado.

Guarda el archivo y cierra. Esto instalará el crontab y nuestra tarea se ejecutará en el horario especificado.

Conclusión

Analizamos logrotate en esta guía. Pudimos verificar su versión, verificar la configuración predeterminada y configurar nuestra propia configuración personalizada. Para obtener más información sobre la línea de comandos y las opciones de configuración disponibles para Logrotate, puede leer su página de manual ejecutando man logrotate en tu terminal:

man logrotate

Linux
  1. Comando wc Linux con ejemplos

  2. Ordenar comando en Linux con ejemplos

  3. Más de 10 comandos de Linux VI con ejemplos

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

  5. Comando chattr en Linux con ejemplos

Comando WC de Linux con ejemplos

Marcas de tiempo de archivos de Linux explicadas con ejemplos

Uso del comando Linux mv con ejemplos

Comando de montaje de Linux con ejemplos

Comando gawk de Linux con ejemplos

Comando make de Linux con ejemplos