Cómo configurar y administrar la rotación de registros usando Logrotate en Linux


Uno de los directorios más interesantes (y quizás uno de los más importantes también) en un sistema Linux es /var/log . De acuerdo con el Estándar de Jerarquía del Sistema de Archivos, la actividad de la mayoría de los servicios que se ejecutan en el sistema se escriben en un archivo dentro de este directorio o uno de sus subdirectorios.

Tales archivos se conocen como registros y son la clave para examinar cómo funciona el sistema (y cómo se ha comportado en el pasado). Los registros también son la primera fuente de información que los administradores e ingenieros buscan mientras resuelven problemas.

Si observamos el contenido de /var/log en un CentOS/RHEL/Fedora y Debian/Ubuntu (para ver la variedad) veremos Los siguientes archivos de registro y subdirectorios.

Tenga en cuenta que el resultado puede ser algo diferente en su caso, dependiendo de los servicios que se ejecutan en su (s) sistema (s) y el tiempo que han estado funcionando.

# ls /var/log
# ls /var/log

En ambos casos, podemos observar que algunos de los nombres de registro terminan como se esperaba en “registro” , mientras que otros se renombran usando una fecha (por ejemplo, maillog-20160822 en CentOS ) o comprimido (considere auth.log.2.gz y mysql.log.1.gz en Debian ).

Este no es un comportamiento predeterminado basado en la distribución elegida, pero se puede cambiar a voluntad usando directivas en los archivos de configuración, como veremos en este artículo

Si los registros se guardaran para siempre, al final acabarían llenando el sistema de archivos donde reside /var/log . Para evitar eso, el administrador del sistema puede usar una utilidad agradable llamada logrotate para limpiar los registros periódicamente.

En pocas palabras, logrotate cambiará el nombre del registro principal o lo comprimirá cuando se cumpla una condición (más sobre eso en un minuto) para que el siguiente evento se registre en un archivo vacío.

Además, eliminará los archivos de registro "antiguos" y mantendrá los más recientes. Por supuesto, podemos decidir qué significa "antiguo" y con qué frecuencia queremos que logrotate limpie los registros para nosotros.

Instalando Logrotate en Linux

Para instalar logrotate , solo use su administrador de paquetes:

---------- On Debian and Ubuntu ---------- 
# aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
# yum update && yum install logrotate

Vale la pena y es bueno tener en cuenta que el archivo de configuración ( /etc/logrotate.conf ) puede indicar que se pueden colocar otras configuraciones más específicas en los archivos individuales de .conf dentro /etc/logrotate.d .

Este será el caso si y solo si la siguiente línea existe y no está comentada:

include /etc/logrotate.d

Seguiremos con este enfoque, ya que nos ayudará a mantener las cosas en orden y utilizar el cuadro Debia n para los siguientes ejemplos.

Siendo una herramienta muy versátil, logrotate proporciona muchas directivas para ayudarnos a configurar cuándo y cómo se rotarán los registros, y qué debe suceder justo después.

Insertemos el siguiente contenido en /etc/logrotate.d/apache2.conf (tenga en cuenta que lo más probable es que deba crear ese archivo) y examinar cada línea para indicar su propósito:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

La primera línea indica que las directivas dentro del bloque se aplican a todos los registros dentro de /var/log/apache2 :

  1. weekly means that the tool will attempt to rotate the logs on a weekly basis. Other possible values are daily and monthly.
  2. rotate 3 indicates that only 3 rotated logs should be kept. Thus, the oldest file will be removed on the fourth subsequent run.
  3. size=10M sets the minimum size for the rotation to take place to 10M. In other words, each log will not be rotated until it reaches 10MB.
  4. compress and delaycompress are used to tell that all rotated logs, with the exception of the most recent one, should be compressed.

Vamos a ejecutar un ensayo en seco para ver qué logrotate haría si realmente se ejecutara ahora. Use la opción -d seguida del archivo de configuración (en realidad puede ejecutar logrotate al omitir esta opción):

# logrotate -d /etc/logrotate.d/apache2.conf

Los resultados se muestran a continuación:

En lugar de comprimir los registros, podríamos cambiarles el nombre después de la fecha cuando se rotaron. Para hacerlo, utilizaremos la directiva dateext . Si nuestro formato de fecha es distinto del predeterminado yyyymmdd , podemos especificarlo utilizando dateformat .

Tenga en cuenta que incluso podemos evitar que ocurra la rotación si el registro está vacío con notifempty. Además, digamos a logrotate que envíe el registro rotado al administrador del sistema ( [correo electrónico protegido] en este caso) para su referencia (esto requerirá que se configure un servidor de correo, que Fuera del alcance de este artículo).

Si desea recibir correos sobre logrotate, puede configurar el servidor de correo Postfix como se muestra aquí: Instalar el servidor de correo Postfix

Esta vez utilizaremos /etc/logrotate.d/squid.conf para rotar solo /var/log/squid/access.log :

Calamar

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email protected]
}

Como podemos ver en la imagen de abajo, no fue necesario rotar este registro. Sin embargo, cuando se cumple la condición de tamaño (tamaño = 1M ), el registro rotado pasará a llamarse access.log-25082016 (si el registro se rotó en agosto 25, 2016 ) y el registro principal ( access.log ) se volverá a crear con los permisos de acceso establecidos en 0644 y con root como propietario y propietario de grupo.

Finalmente, cuando el número de registros finalmente llegue a 6 , el registro más antiguo se enviará a [correo electrónico protegido] .

Ahora supongamos que desea ejecutar un comando personalizado cuando tiene lugar la rotación. Para hacerlo, coloque la línea con dicho comando entre las directivas postrotate y endcript.

Por ejemplo, supongamos que queremos enviar un correo electrónico a la raíz cuando cualquiera de los registros dentro de /var/log/myservice se gira. Agreguemos las líneas en rojo a /etc/logrotate.d/squid.conf :

Logrotate

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Por último, pero no menos importante, es importante tener en cuenta que las opciones presentes en /etc/logrotate.d/*.conf anulan aquellas en el archivo de configuración principal en caso de conflictos.

Logrotate y Cron

De forma predeterminada, la instalación de logrotate crea un archivo crontab dentro de /etc/cron.daily llamado logrotate . Como es el caso con los otros archivos crontab dentro de este directorio, se ejecutará diariamente a partir de 6:25 am si no está instalado anacron.

De lo contrario, la ejecución comenzará alrededor de 7:35 am . Para verificar, busque la línea que contiene cron.daily en /etc/crontab o /etc/anacrontab .

Resumen

En un sistema que genera varios registros, la administración de dichos archivos puede simplificarse en gran medida utilizando logrotate. Como hemos explicado en este artículo, rotará, comprimirá, eliminará y enviará automáticamente los registros por correo electrónico o cuando el archivo alcance un tamaño determinado.

Solo asegúrese de que esté configurado para ejecutarse como un trabajo cron y logrotate le hará las cosas mucho más fáciles. Para más detalles, consulte la página del manual.

¿Tiene alguna pregunta o sugerencia sobre este artículo? No dude en hacernos saber mediante el formulario de comentarios a continuación.

Todos los derechos reservados © Linux-Console.net • 2019-2021