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

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Confirmación de la versión de Logrotate
  • Paso 2: Exploración de la configuración de Logrotate
  • Paso 3: Configuración de una configuración de ejemplo
    1. Agregar configuración a/etc/logrotate.d/
    2. Paso 4: Creación de una configuración independiente de Logrotate
  • Conclusió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:

    1. sudo apt update
    2. 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:

    1. 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 manpágina del manual ( ):

    1. 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 una includedeclaración para extraer la configuración de cualquier archivo del /etc/logrotate.ddirectorio.
    • /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, como apt, dpkg, rsyslogetc.

    De forma predeterminada, logrotate.confse 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.del catarchivo de la aptutilidad del paquete:

    1. 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.logy 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 aptregistros son:

    • rotate 12: conservar doce archivos de registro antiguos. Esto anula el rotate 4valor predeterminado.
    • monthly: rotar una vez al mes. Esto anula el weeklyvalor predeterminado.
    • compress: comprime los archivos rotados. Esto se usa gzipde manera predeterminada y da como resultado archivos que terminan en .gz. El comando de compresión se puede cambiar usando la compresscmdopció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 createcomportamiento 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 logrotateen 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:

    1. 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.
    2. 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 hourlyconfiguració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.logy error.logen /var/log/your-app/. Se ejecuta como www-datausuario y grupo.

    Para agregar una configuración para los your-apparchivos de registro /etc/logrotate.d/, primero abra un nuevo archivo en el /etc/logrotate.ddirectorio usando nanoo su editor preferido:

    1. 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én www-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-appsharedscriptspostrotate
    • postrotatepara endscript: 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 que postrotatese 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 el lastactionbloque en su lugar.

    Para guardar y salir nano, presione Ctrl+Xy cuando se le solicite, Yy luego Enter. Puede probar el archivo de configuración haciendo una ejecución en seco:

    1. 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 sammyy 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.destructura proporcionada por Ubuntu.

    Primero, crearemos un archivo de configuración en nuestro directorio de inicio. Ábralo en un editor de texto:

    1. 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 mkdircomando. Por último, creamos un archivo vacío en el logsdirectorio utilizando el touchcomando. Ejecutamos los siguientes comandos para completar estos pasos:

    1. cd ~
    2. mkdir logs
    3. touch logs/access.log

    Ahora que tenemos un archivo de registro en blanco en el lugar correcto, ejecutemos el logrotatecomando.

    Como los registros son propiedad de, sammyno 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.confconfiguració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.confque 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 --verbosebandera 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 catutilidad, notaremos que Logrotate registró cierta información sobre la ejecución:

    1. 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 --forceindicador:

    1. logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

    Esto es útil durante las pruebas postrotatey otros scripts.

    Por último, debemos configurar un trabajo cron para ejecutar Logrotate cada hora. Abra el crontab de su usuario:

    1. 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 nanopara 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 logrotatecomando que ejecutamos anteriormente, aunque ampliamos logrotatesu ruta completa para /usr/sbin/logrotatemayor 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.gzsi ejecutó Logrotate con la --forcebandera).

    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 logrotateen su terminal o visitando la documentación en línea .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion