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:
-
- 2. El daemon rsyslogd
- 4. EJERCICIO práctico de Logrotate y Rsyslog
- a). Creamos el script
- b). Ejecutamos y mandamos el script a segundo plano
- c). Comprobamos que el script funciona (listamos archivos log)
- d). Configuramos un nuevo archivo de Log en el archivo /etc/logrotate.d/rsyslog
- e). Reiniciamos servicio rsyslog
- f). Lanzamos la tarea /cron.daily/logrotate
- g). Comprobamos que la rotación de logs funciona
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: syslog, mail.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
- y ejecutar /etc/cron.daily/logrotate
/etc/init.d/rsyslog restart |
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.