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 weeklyconfigurar rotaciones de registro semanales con archivos de registro propiedad de la raíz usuario y el syslog gruporotate 4se mantienen cuatro archivos de registro (guardar 4 semanas de trabajos atrasados)createnuevos archivos de registro vacíos que se crean después de rotar el actualdateexuse la fecha como sufijo del archivo rotadocompresscomprimir 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.logesta primera línea indica qué archivo son los objetivos de configuraciónmissingoksi el archivo no existe, todavía está bien y logrotate no debería generar ningún error ni registrar ningún errornotifemptyno gire el archivo de registro si está vacíomaxsizesi el tamaño supera los 30k, rotaryearlycorrer una vez al añocreate 0600 root rootcree el nuevo archivo rotado comoroot:rootcon permisos0600
Algunas otras opciones no enumeradas anteriormente:
rotate 30mantener treinta archivos, podar los más antiguos cuando excedanmonthlyrotar una vez al mescompresscomprimir los archivos rotados. esto usagzippor defecto y da como resultado archivos que terminan en.gz. El comando de compresión se puede cambiar usandocompresscmdopció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
logrotatecomando 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 centoscrea un archivo de registro vacío después de la rotación con los permisos especificados0640y el usuario y grupo especificadocentossharedscriptssignifica 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/*.logcoincide con más de un archivo de registro, el script especificado enpostrotatese ejecutaría dos veces sin esta opciónpostrotateaendscriptEl 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 quepostrotatese 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 lalastactionbloquear 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.
copytruncatecopia el contenido de un archivo de registro en un archivo nuevo y luego lo trunca.dateformatespecifica el formato del archivo giradodateextindica 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 --verboseimprimirá 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