Rotado de logs con logrotate

Hace ya algún tiempo que le quería dedicar un artículo a logrotate. No solo a logrotate, sino en general a los logs. Se trata de una herramienta fundamental y necesaria, pero, no solo si trabajas como administrador de sistemas, que en ese caso no hace falta ni justificarlo. En el caso de que seas un aficionado a la Raspberry Pi, o cualquier otra placa, tienes un buen motivo para conocer a fondo todo lo relativo a los logs.

Pero incluso, en el caso de que seas un usuario de escritorio, conocer el funcionamiento de los logs, también te será de gran utilidad, puesto que te permitirá, en su caso, detectar anomalías en el correcto funcionamiento de un controlador, de una aplicación o del propio sistema de escritorio. Por cualquiera de estas razones, es interesante tener un conocimiento de los logs o registros. Y, ¿que tiene que ver los logs con logrotate, a parte del nombre?

Pues si, has acertado, esto del logrotate, te permite gestionar los logs. Sobre todo, el objetivo es no llenar un sistema de archivos solo de logs. Y aunque puedas pensar que esto es una exageración, te puedo decir que sucede mas a menudo de lo que te puedes imaginar. Y sucede, básicamente o porque no has configurado logrotate o porque no lo has hecho correctamente.

Rotado de logs con logrotate

logrotate o no llenes tu partición de logs

Pero exactamente, ¿que es esto de logrotate? La necesidad de los logs es indudable. Necesitas tener información de lo que sucede en los equipos que administras. Por supuesto, necesitas estar informado cuando se produce un error, pero no solo, esto, también tienes que saber cuando se producen sucesos destacables, o simplemente sucesos de los que quieres estar informado por la razón que sea.

Todo esta información la vas guardando en registros, en logs. Sin embargo, no lo puedes guardar de forma eterna, porque ocupa espacio, y tu objetivo no es llenar tu sistema de archivos con esta información, pero necesitas guardar cuantos mas registros posibles mejor, para saber a ciencia cierta que es lo que está sucediendo.

Rotar los logs

La solución se encuentra en rotar los logs. ¿En que consiste? En primer lugar, vas a guardar los registros por días. Así tendrás un archivo para el lunes, otro para el martes, y así sucesivamente. Que pasa cuando es de nuevo lunes, pues se borra el de lunes, y se crea uno nuevo. Así siempre tienes la información de los últimos 7 días. ¿Sencillo verdad?

Pero no es necesario que lo guardes por días, también lo puedes guardar por horas, semanas, meses, etc. Aquí es precisamente donde tienes que prestar atención. Si tu aplicación genera una gran cantidad de información, necesitarás guardarla en periodos mas cortos, y almacenar menos periodos. Por ejemplo, puedes guardarla cada hora, y solo almacenar las últimas 10 horas por ejemplo.

Entendiendo la configuración

En el archivo /etc/logrotate.conf encontrarás la configuración por defecto en tu equipo. Por ejemplo, en mi caso, la configuración es la siguiente,

weekly
rotate 4
create
include /etc/logrotate.d

la configuración es la siguiente,

  • weekly indica que el rotado es semanal. Es decir, que cada semana se sobreescribe el registro mas antiguo.
  • rotate 4 establece que se guardarán un máximo de cuatro registros
  • create indica que se crea un registro nuevo cuando se rota el mas antiguo
  • compress define que los registros se guardarán comprimidos

Por último se incluye la línea include /etc/logrotate.d donde se indica que se incluirán todos los archivos que se encuentren en ese directorio.

Así, por ejemplo, si miras la configuración de rsyslog, te encontrarás algo similar a esto,

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate                              
        endscript
}

Aquí puedes ver algunas opciones adicionales. Así por ejemplo, tienes que el rotado se hace diario, que se guardan los últimos siete días, se comprimen los archivos rotados, pero además tienes estas nuevas opciones,

  • notifempty que indica que no se rota en el caso de que el archivo esté vacío.
  • missingok indica que no se producirá un mensaje de error si no existe el archivo de registro
  • posrotate a endscript son las marcas que señalan el script que se ejecuta después de que el archivo de registro, el log, ha sido rotado. Indicar que este script se ejecuta justo antes de ser comprimido.

Comprobar tus archivos de configuración

Una vez definido tu archivo de configuración, es interesante probarlo. De esta manera te evitarás la desagradable sorpresa que no funcione como te esperas. O lo que es mas grave, que por una mala configuración has perdido toda la información de los últimos meses. Una auténtica catástrofe.

Para probar estos archivos de configuración ejecuta la siguiente instrucción,

sudo logrotate /etc/logrotate.conf --debug

Esto lo que hace es una simulación de la ejecución del rotado de registros. Con esto obtendrás información detallada de lo que habría sucedido en el caso de realizar un rotado.

De cualquier forma, siempre es posible realizar el rotado de forma manual ejecutando la instrucción anterior pero sin la opción --debug, es decir,

sudo logrotate /etc/logrotate.conf

E incluso ejecutar el rotado de un único archivo de configuración. Así, para el caso anterior de rsyslog, la instrucción sería,

sudo logrotate /etc/logrotate.d/rsyslog

Es posible comprobar el estado del rotado de registros ejecutando la siguiente instrucción,

cat /var/lib/logrotate/status

Que te arrojará algo como lo que puedes ver a continuación, pero mas extenso,

logrotate state -- version 2
"/var/log/syslog" 2019-7-15-0:0:25
"/var/log/dpkg.log" 2019-7-1-0:0:9
"/var/log/speech-dispatcher/debug-flite" 2019-4-23-0:0:0

Otras opciones de logrotate

Además de las opciones indicadas hasta ahora, también existen algunas otras opciones que seguro que también te resultan muy interesantes.

  • size <valor> fuerza el rotado cuando el tamaño del archivo es superior a <valor>
  • delaycompress pospone la compresión del registro durante un ciclo. Por ejemplo, si tu rotas diariamente, no se comprimirá nada mas que haya sido rotado, sino al día siguiente.
  • create crea un archivo de registro vacío con los permisos indicados para un usuario y grupo. La definición es create <modo> <usuario> <grupo>.
  • Es posible establecer que comandos se tienen que ejecutar antes y después de realizar la rotación. Para esto hay que utilizar prerotate y postrotate conforme viste en el ejemplo anterior.

Conclusión

Como has podido ver, configurar el rotado de los logs es algo relativamente sencillo. Lo que probablemente es mas complicado, es acertar con los parámetros que hay que establecer para evitar llenar tu sistema de archivos. Coo he indicado anteriormente, esto es cuestión de experiencia. Experiencia en ver con que frecuencia se escribe en el registro y que cantidad.


Más información,

1 comentario en “Rotado de logs con logrotate

  1. JU
    juancarlos hace 2 años

    Excelente blog, favor arreglar el atributo postrotate esta mal escrito en los ejemplos como posrotate

Deja una respuesta

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