Logrotate Linux | Rotación de Logs

El servicio Logrotate en Linux nos ayuda con la gestión y almacenamiento de los logs del sistema.

 

De hecho, algo muy importante que hace logrotate es evitar que los Logs devoren el espacio del disco, porque podemos crear una partición o volúmen lógico para ellos (configurando un punto de montaje, por ejemplo para todo /var/log), y también hace algo muy útil que es comprimirlos (para que ocupen menos espacio).

Logrotate funciona con el demonio de gestión de logs: rsyslogd
 
 
logrotate | rotacion delogs linux

 

En este artículo:

 

 

 

 

1. Qué hace Logrotate y cómo funciona

 

  • La utilidad Logrotate se encarga de dividir los Logs, comprimirlos y archivarlos, según como lo hayamos configurado. Por defecto, ya se ocupa de aplicar políticas de rotación y compresión, pero podemos personalizarlas.
  • Por defecto Logrotate se ejecuta una vez a la semana, ya que así se encuentra definido el el archivo de configuración principal /etc/logrotate.conf  , o en el archivo concreto de logrotate para el demonio rsyslogd, este archivo es es /etc/logrotate.d/rsyslog, en el cual se define cómo gestiona el demonio rsyslogd el rotado de ciertos Logs: syslogmail.err, mail.log, auth.log, kern.log

 

2.1 El archivo /etc/logrotate.conf por defecto:

archivo /etc/logrotate.conf

 

 

2.2 El fichero /etc/logrotate.d/rsyslog

archivo etc/logrotate.d/rsyslog por defecto
 

 

2. El daemon rsyslogd

 

  • El daemon rsyslogd se configura en /etc/rsyslog.conf
  • En dicho archivo rsyslog.conf, podemos configurar la forma en que se deben tratar los mensajes de log provenientes de diferentes tipos de archivo de registro, por ejemplo: mail, user, kern, daemon
  • Podemos definir nuestro propio tipo de archivo de registro en /etc/rsyslog.conf, si por ejemplo queremos monitorizar la memoria, y creamos un archivo de registro llamado memoria.log .

 

Archivo /etc/rsyslog.conf

archivo /etc/rsyslog.conf

 

 

3. Configuración de Logrotate

 

Tenemos diversos métodos para configurar la rotación de los logs en Linux con logrotate:

 

 

3.1 Config 1 de Logrotate (/etc/logrotate.d/nuevo-archivo-log)

 

  • Logrotate se puede configurar en los archivos específicos que se encuentran en /etc/logrotate.d/nuevoarchivo . Rsyslogd es el demonio que gestiona los Logs.

 
Un ejemplo de configuración de un nuevo tipo de archivo de Log podría ser este (es el que usaremos en el ejercicio al final del artículo):

/var/log/memoria.log
{
rotate 4
hourly
missingok
notifempty
compress
maxsize 10K
}

 
/etc/logrorate.d/nuevo-archivo-log

  • Reiniciar rsyslogd
  • y ejecutar /etc/cron.daily/logrotate

 

 

3.2 Config 2 de logrotate (/etc/logrotate.d/rsyslog)

 
Definir nuevo tipo de archivo de Log en /etc/logrotate.d/rsyslog (Dentro del subdirectorio /logrotate.d, en el propio archivo principal de configuración del servicio del daemon rsyslogd (en el subdirectorio de configuraciones de logrotate). Recordemos que el daemon rsyslogd es el que gestiona todos los tipos de logs del sistema que están definidos en el archivo):
 
archivo etc/logrotate.d/rsyslog por defecto
 

  • Después hemos de Reiniciar rsyslogd
  • /etc/init.d/rsyslog restart

     

  • y ejecutar /etc/cron.daily/logrotate

 

 

3.3 Config 3 de Logrotate (/etc/rsyslog.conf)

 

  • Definir en /etc/rsyslog.conf (archivo principal de configuración de rsyslog) un tipo de archivo de log personalizado, por ejemplo memoria.log, de esta forma:
memoria.* -/var/log/memoria.log

archivo /etc/rsyslog.conf
 

  • Reiniciar rsyslogd
  • y ejecutar /etc/cron.daily/logrotate

 

 

3.4 Config 4 de logrotate (/etc/logrotate.conf)

 

  • También existe el archivo /etc/logrotate.conf, que contiene la config principal y predeterminada de logrotate, y la de algunos registros no específicos, que a su vez llama a todos los archivos de config contenidos dentro de /etc/logrotate.d cuando se carga. Aunque se puede incluir aquí nuestro nuevo archivo de Log, mejor utilizar el método 1.

archivo /etc/logrotate.conf
 

  • Ejecutar /etc/cron.daily/logrotate

 

 

4. EJERCICIO práctico de Logrotate y Rsyslog

 

  • Vamos a crear un script, lo mandaremos a segundo plano;
  • Mientras, ese script ha de enviar los logs a un log concreto.
  • y luego ha de aplicarse una directiva concreta de logrotate que hayamos configurado previamente.

 

 

a). Creamos el script

 
En este caso vamos a crear un script que manda log de memoria libre a archivo

#!/bin/bash
while true
do
date >> /var/log/memoria.log
free -m >> /var/log/memoria.log
echo "--------------------------" >> /var/log/memoria.log
sleep 4
done

logrotate script
 

 

b). Ejecutamos y mandamos el script a segundo plano

 
Ahora ejecutamos en segundo plano el script que revisa la memoria y lo envia al fichero /var/ log/memoria.log

Lo hacemos con:

nohup ./logrotate.sh  &

 

 

c). Comprobamos que el script funciona (listamos archivos log)

 

  • Comprobamos que el script funciona ejecutando un
    tail -f /var/log/memoria.log

logrotate | comprobamos nuevo fichero de log
 

 

d). Configuramos un nuevo archivo de Log en el archivo /etc/logrotate.d/rsyslog

 

  • editamos /etc/logrotate.d/rsyslog y configuramos nuevo log

 

logrotate rsyslog

y añadimos la linea correspondiente a la config de nuestro nuevo log
 

 

e). Reiniciamos servicio rsyslog

 

  • AHORA reiniciamos servicio rsyslog:
/etc/init.d/rsyslog restart

 

 

f). Lanzamos la tarea /cron.daily/logrotate

 
 

sh /etc/cron.daily/logrotate

 

 

g). Comprobamos que la rotación de logs funciona

 

  • Y finalmente podemos comprobar que Logrotate funciona

 
Ejecutamos el archivo /etc/cron.daily/logrotate, que aplicará la configuración de Logrotate, y podremos comprobar que se comprimen los logs y que se aplican las opciones que hemos configurado.
/etc/cron.daily/logrotate - se aplica la config de los logs