Cómo administrar archivos de registro con Logrotate en Ubuntu 20.04

Introducción
Logrotate es una utilidad del sistema que administra la rotación y compresión automáticas de los archivos de registro. Si los archivos de registro no se rotaran, comprimieran y eliminaran periódicamente, podrían acabar consumiendo todo el espacio de disco disponible en un sistema.
Logrotate se instala de forma predeterminada en Ubuntu 20.04 y está configurado para gestionar las necesidades de rotación de registros de todos los paquetes instalados, incluido rsyslog
, el procesador de registros del sistema predeterminado.
En este artículo, exploraremos la configuración predeterminada de Logrotate y luego configuraremos la rotación de registros para una aplicación personalizada ficticia.
Prerrequisitos
Este tutorial asume que tienes un servidor Ubuntu 20.04, con un usuario habilitado para sudo no root, como se describe en Configuración inicial del servidor con Ubuntu 20.04 .
Logrotate también está disponible en muchas otras distribuciones de Linux, pero la configuración predeterminada puede ser bastante diferente. Las demás secciones de este tutorial seguirán siendo válidas siempre que su versión de Logrotate sea similar a la de Ubuntu 20.04. Siga el Paso 1 para determinar su versión de Logrotate.
Inicie sesión en su servidor como su usuario habilitado para sudo para comenzar.
Paso 1: Confirmación de la versión de Logrotate
Logrotate está instalado de forma predeterminada en Ubuntu. Sin embargo, si necesita instalarlo, ejecute los siguientes comandos para actualizar la lista de paquetes y recuperar el paquete:
- sudo apt update
- sudo apt install logrotate
Si está utilizando un servidor que no es Ubuntu, primero asegúrese de que Logrotate esté instalado solicitando información sobre su versión:
- logrotate --version
Outputlogrotate 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
Si Logrotate está instalado pero el número de versión es significativamente diferente, es posible que tenga problemas con algunas de las opciones de configuración que se exploran en este tutorial. Consulte la documentación de su versión específica de Logrotate leyendo su man
página del manual ( ):
- man logrotate
También puedes consultar la versión online de la documentación de Logrotate. A continuación veremos la estructura de configuración por defecto de Logrotate en Ubuntu.
Paso 2: Exploración de la configuración de Logrotate
La información de configuración de Logrotate generalmente se puede encontrar en dos lugares en Ubuntu:
/etc/logrotate.conf
: este archivo contiene algunas configuraciones predeterminadas y configura la rotación de algunos registros que no pertenecen a ningún paquete del sistema. También utiliza unainclude
declaración para extraer la configuración de cualquier archivo del/etc/logrotate.d
directorio./etc/logrotate.d/
: aquí es donde los paquetes que instales y que necesiten ayuda con la rotación de registros colocarán su configuración de Logrotate. En una instalación estándar, ya deberías tener aquí los archivos para las herramientas principales del sistema, comoapt
,dpkg
,rsyslog
etc.
De forma predeterminada, logrotate.conf
se configurarán rotaciones de registros semanales, con archivos de registro propiedad del usuario root y del grupo syslog , con cuatro archivos de registro retenidos a la vez ( rotate 4
) y nuevos archivos de registro vacíos que se crearán después de que se rote el actual ( create
).
Echemos un vistazo al archivo de configuración de Logrotate de un paquete en /etc/logrotate.d
el cat
archivo de la apt
utilidad del paquete:
- cat /etc/logrotate.d/apt
Output/var/log/apt/term.log { rotate 12 monthly compress missingok notifempty}/var/log/apt/history.log { rotate 12 monthly compress missingok notifempty}
Este archivo contiene bloques de configuración para dos archivos de registro diferentes en el /var/log/apt/
directorio: term.log
y history.log
. Ambos tienen las mismas opciones. Cualquier opción que no esté configurada en estos bloques de configuración heredará los valores predeterminados o aquellos configurados en /etc/logrotate.conf
. Cualquier configuración en un archivo logrotate anulará los valores predeterminados de logrotate, que están configurados en /etc/logrotate.conf
. Las opciones configuradas para los apt
registros son:
rotate 12
: conservar doce archivos de registro antiguos. Esto anula elrotate 4
valor predeterminado.monthly
: rotar una vez al mes. Esto anula elweekly
valor predeterminado.compress
: comprime los archivos rotados. Esto se usagzip
de manera predeterminada y da como resultado archivos que terminan en.gz
. El comando de compresión se puede cambiar usando lacompresscmd
opción .missingok
:No escriba un mensaje de error si falta el archivo de registro.notifempty
:no rote el archivo de registro si está vacío.
Estos archivos de configuración también heredan el create
comportamiento predeterminado, que indica a Logrotate que cree nuevos registros después de la rotación. Esto se puede anular con nocreate
, aunque eso deshabilitaría de manera efectiva la mayoría de las demás funciones.
Hay muchas más opciones de configuración disponibles. Puedes leer sobre todas ellas escribiendo man logrotate
en la línea de comandos para abrir la página del manual de Logrotate.
A continuación, configuraremos un archivo de configuración para manejar los registros de un servicio ficticio llamado your-app
.
Paso 3: Configuración de una configuración de ejemplo
Para administrar archivos de registro usando logrotate para aplicaciones fuera de los servicios del sistema preconfigurados y empaquetados previamente, tenemos dos opciones:
- Cree un nuevo archivo de configuración de Logrotate y colóquelo en
/etc/logrotate.d/
. Este se ejecutará diariamente como usuario root junto con todos los demás trabajos estándar de Logrotate. - Cree un nuevo archivo de configuración y ejecútelo fuera de la configuración predeterminada de Logrotate de Ubuntu. Esto solo es realmente necesario si necesita ejecutar Logrotate como un usuario que no sea root o si desea rotar los registros con una frecuencia mayor a la diaria (una
hourly
configuración en este caso/etc/logrotate.d/
no sería efectiva, ya que la configuración de Logrotate del sistema solo se ejecuta una vez al día).
Repasemos estas dos opciones con algunas configuraciones de ejemplo.
Agregar configuración a/etc/logrotate.d/
Queremos configurar la rotación de registros para un servidor web ficticio que coloca un access.log
y error.log
en /var/log/your-app/
. Se ejecuta como www-data
usuario y grupo.
Para agregar una configuración para los your-app
archivos de registro /etc/logrotate.d/
, primero abra un nuevo archivo en el /etc/logrotate.d
directorio usando nano
o su editor preferido:
- sudo nano /etc/logrotate.d/your-app
Agregue las siguientes líneas a su nuevo archivo de configuración:
/etc/logrotate.d/su-aplicacion
/var/log/your-app/*.log {dailymissingokrotate 14compressnotifemptycreate 0640 www-data www-datasharedscriptspostrotatesystemctl reload your-appendscript}
Algunas de las nuevas directivas de configuración en este archivo son:
create 0640 www-data www-data
:Esto crea un nuevo archivo de registro vacío después de la rotación, con los permisos especificados (0640
), propietario (www-data
) y grupo (tambiénwww-data
).sharedscripts
: esta bandera significa que cualquier script agregado a la configuración se ejecuta solo una vez por ejecución, en lugar de por cada archivo rotado. Dado que la ruta incluye un comodín , esta configuración coincidiría con cualquier cantidad de archivos de registro en el directorio. Sin la opción, el script especificado en se ejecutaría cada vez que logrotate procesa un archivo de registro sin esta opción./var/log/your-app/*.log
*
your-app
sharedscripts
postrotate
postrotate
paraendscript
: este bloque contiene un script que se ejecuta después de rotar el archivo de registro. En este caso, estamos recargando nuestra aplicación de ejemplo. 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 tardar mucho tiempo y su software debe cambiar al nuevo archivo de registro de inmediato. Para las tareas que necesitan ejecutarse después de que se compriman los registros, use ellastaction
bloque en su lugar.
Para guardar y salir nano
, presione Ctrl+X
y cuando se le solicite, Y
y luego Enter
. Puede probar el archivo de configuración haciendo una ejecución en seco:
- sudo logrotate /etc/logrotate.conf --debug
Este comando llama a logrotate
, lo apunta al archivo de configuración estándar y activa el modo de depuración.
Se imprimirá información sobre qué archivos de registro está manejando Logrotate y qué habría hecho con ellos. Si todo parece correcto, habrá terminado. El trabajo estándar de Logrotate se ejecutará una vez al día e incluirá su nueva configuración.
A continuación, probaremos una configuración que no utiliza en absoluto la configuración predeterminada de Ubuntu.
Paso 4: Creación de una configuración independiente de Logrotate
En este ejemplo, tenemos una aplicación que se ejecuta como nuestro usuario sammy
y genera registros que se almacenan en /home/sammy/logs/
. Queremos rotar estos registros cada hora, por lo que debemos configurar esto fuera de la /etc/logrotate.d
estructura proporcionada por Ubuntu.
Primero, crearemos un archivo de configuración en nuestro directorio de inicio. Ábralo en un editor de texto:
- nano /home/sammy/logrotate.conf
Luego pegue la siguiente configuración:
/inicio/sammy/logrotate.conf
/home/sammy/logs/*.log {hourlymissingokrotate 24compresscreate}
Guarde y cierre el archivo. Hemos visto todas estas opciones en pasos anteriores, pero resumamos: esta configuración rotará los archivos cada hora, comprimiendo y conservando veinticuatro registros antiguos y creando un nuevo archivo de registro para reemplazar el rotado.
Necesitará personalizar la configuración para adaptarla a su aplicación, pero este es un buen comienzo.
Para comprobar que la configuración funciona, vamos a crear un archivo de registro. Primero cd
, en el directorio de inicio del usuario, utilizando el cd ~
comando. Luego, creamos un directorio para los registros utilizando el mkdir
comando. Por último, creamos un archivo vacío en el logs
directorio utilizando el touch
comando. Ejecutamos los siguientes comandos para completar estos pasos:
- cd ~
- mkdir logs
- touch logs/access.log
Ahora que tenemos un archivo de registro en blanco en el lugar correcto, ejecutemos el logrotate
comando.
Como los registros son propiedad de, sammy
no necesitamos usar sudo
. Sin embargo, necesitamos especificar un archivo de estadologrotate
. Este archivo registra lo que encontró y las acciones que realizó la última vez que se ejecutó, de modo que sepa qué hacer la próxima vez que se ejecute. Este seguimiento de estado se maneja por nosotros cuando usamos la /etc/logrotate.conf
configuración predeterminada. El archivo de estado se almacena en /var/lib/logrotate/status
. Como no estamos usando la configuración predeterminada, necesitaremos configurar la ubicación del archivo de estado manualmente.
Para este ejemplo, haremos que Logrotate coloque el archivo de estado directamente en nuestro directorio de inicio. Puede ir a cualquier lugar que sea accesible y conveniente. Ejecute el siguiente comando para usar el /home/sammy/logrotate.conf
que creó y registrar el estado que encuentra logrotate:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.confHandling 1 logsrotating pattern: /home/sammy/logs/*.log hourly (24 rotations)empty log files are rotated, old logs are removedconsidering log /home/sammy/logs/access.log log does not need rotating
La --verbose
bandera imprimirá información detallada sobre lo que está haciendo Logrotate. En este caso, no rotó nada. Esta es la primera vez que Logrotate encuentra este archivo de registro y tiene cero horas de antigüedad, por lo que no debería rotarse.
Si examinamos el archivo de estado utilizando la cat
utilidad, notaremos que Logrotate registró cierta información sobre la ejecución:
- cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2"/home/sammy/logs/access.log" 2021-12-3-19:0:0
Logrotate anotó los registros 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 forzar a Logrotate a rotar el archivo de registro cuando de otra manera no lo haría, use el --force
indicador:
- logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
Esto es útil durante las pruebas postrotate
y otros scripts.
Por último, debemos configurar un trabajo cron para ejecutar Logrotate cada hora. Abra el crontab de su usuario:
- crontab -e
Esto abrirá un archivo de texto. Si es la primera vez que usa cron, es posible que se le solicite que elija un editor de texto predeterminado. Si no tiene una preferencia, recomendamos este nano
para usuarios nuevos. Es posible que ya haya algunos comentarios en el archivo que expliquen la sintaxis de cron. Mueva el cursor hacia abajo hasta una nueva línea en blanco al final del archivo y agregue lo siguiente:
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Esta tarea se ejecutará el minuto 14 de cada hora, todos los días. Ejecuta casi el mismo logrotate
comando que ejecutamos anteriormente, aunque ampliamos logrotate
su ruta completa para /usr/sbin/logrotate
mayor seguridad. Es una buena práctica utilizar rutas completas al escribir trabajos cron. Para obtener más información sobre cron, puede revisar nuestros otros tutoriales .
Guarde el archivo y salga. Esto instalará el crontab y nuestra tarea se ejecutará según el cronograma especificado.
Si volvemos a visitar nuestro directorio de registro en aproximadamente una hora, deberíamos encontrar el archivo de registro rotado y comprimido access.log.1.gz
(o .2.gz
si ejecutó Logrotate con la --force
bandera).
Conclusión
En este tutorial verificamos nuestra versión de Logrotate, exploramos la configuración predeterminada de Ubuntu Logrotate y configuramos dos tipos diferentes de configuraciones personalizadas. 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 ejecutándola man logrotate
en su terminal o visitando la documentación en línea .
Deja una respuesta