Saltar al contenido

Mantenimiento de LOGs con LOGROTATE

3 diciembre 2020

En Linux tenemos una utilidad llamada «logrotate» que es muy potente para ayudarnos a que los filesystems no se llenen a causa de los logs que van almacenando las aplicaciones.

Pongamos por caso que una aplicación va guardando sus logs en /test, a modo de ejemplo, Y estos logs nunca se eliminan. Llegará un momento en que el filesystem se llene y no se puedan guardar más logs, causando un problema de pérdida de información o funcionamiento de la aplicación.

Gracias a logrotate podemos automatizar el mantenimiento de los logs.

¿Cómo funciona logrotate?

[embedded content][embedded content]

Por defecto, la configuración de los logs del sistema operativo se almacena en /etc/logrotate.d/, en donde encontraremos una serie de políticas de rotación de logs para diferentes filesystems del sistema operativo.

IMPORTANTE: Todas las políticas que se almacenan en /etc/logrotate.d son ejecutadas por el usuario root, por lo que un usuario sin privilegios de administrador no lo debería utilizar, pues representa un grave problema de seguridad. Logrotate puede ejecutar cualquier comando del sistema operativo con privilegios de root.

Lo que puede hacer un usuario no privilegiado es llamar al comando logrotate desde el cron. Así no tendremos ningún problema de seguridad en el sistema, ya que logrotate se está ejecutando con un usuario que no es administrador del sistema.

logrotate -f mi_fichero_de_politicas_de_rotacion_de_logs

Veamos un ejemplo de logrotate en funcionamiento

Siguiendo con el ejemplo anterior del filesystem /test, he preparado una pequeña prueba para rotar los logs que allí se encuentran.

[[email protected] test]# ll |grep test
-rw-r--r-- 1 root root 107372544 Jan 1 2020 test_20201101.log
-rw-r--r-- 1 root root 107372544 Dec 3 15:33 test.log
[[email protected] test]# 

A continuación, un fichero de rotación de políticas de logs.

[[email protected] test]# cat /etc/logrotate.d/test /test/*.log
*
{ daily notifempty rotate 1 missingok copytruncate compress postrotate /usr/bin/find /test -name "*.gz" -mtime +30 -exec rm {} \; endscript
}
[[email protected] test]# 

La explicación de las directivas que aparecen en este fichero es:

  • /test/*.log: Indica que vamos a rotar todos los fichero con extensión .log* ubicados en el filesystem /test.
  • daily: Vamos a ejecutar diariamente la política de rotación de logs.
  • notifempty: No haremos nada si el fichero a rotar está vacío.
  • rotate 1: Vamos a guardar una copia del fichero rotado.
  • missingok: Si el fichero no exite continuamos chequeando la política de logs.
  • copytruncate: Realizamos una copia de seguridad del fichero y el log actual lo vaciamos.
  • compress: Comprimimos en gzip el fichero rotado.
  • postrotate: Ejecutamos comandos del sistema operativo una vez hemos rotado el log. Si lo ejecutamos como root, podremos realizar cuaquier cualquier comando en el sistema, por eso es conveniente que logrotate no se ejecute con root. En este ejemplo, vamos a eliminar los ficheros gz con más de treinta días de antigüedad.

Seguidamente, vamos a comprobar si las políticas de rotación de logs hacen lo que queremos que hagan.

[[email protected] test]# ll |grep test
-rw-r--r-- 1 root root 0 Dec 3 15:42 test_20201101.log
-rw-r--r-- 1 root root 0 Dec 3 15:42 test.log
-rw-r--r-- 1 root root 104228 Dec 3 15:33 test.log.1.gz
[[email protected] test]# 

Efectivamente, ha guardado el log actual y lo ha comprimido en gzip.

Logrotate es un comando extenso, así que ejecutaremos man logrotate para conocer todas sus posibilidades.

Espero que este tutorial te haya servidor para comprender su funcionamiento.

Anuncios 10⭐Estrellas

La mejor forma de potenciar tu negocio a través de la plataforma de Google Ad Manager