Categorías Linux

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
 
 

 

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:

 

 

2.2 El fichero /etc/logrotate.d/rsyslog


 

 

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

 

 

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
}

 

  • 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):
 

 

  • 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


     

    • 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.


     

    • 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
    


     

     

    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


     

     

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

     

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

     

    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.

     

     

    Los comentarios de Disqus están cargando....