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 gruporotate 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 actualdateex
use la fecha como sufijo del archivo rotadocompress
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ónmissingok
si el archivo no existe, todavía está bien y logrotate no debería generar ningún error ni registrar ningún errornotifempty
no gire el archivo de registro si está vacíomaxsize
si el tamaño supera los 30k, rotaryearly
correr una vez al añocreate 0600 root root
cree el nuevo archivo rotado comoroot
:root
con permisos0600
Algunas otras opciones no enumeradas anteriormente:
rotate 30
mantener treinta archivos, podar los más antiguos cuando excedanmonthly
rotar una vez al mescompress
comprimir los archivos rotados. esto usagzip
por defecto y da como resultado archivos que terminan en.gz
. El comando de compresión se puede cambiar usandocompresscmd
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 especificados0640
y el usuario y grupo especificadocentos
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 enpostrotate
se ejecutaría dos veces sin esta opciónpostrotate
aendscript
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 quepostrotate
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 lalastaction
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 giradodateext
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