Mantenimiento de LOGs con LOGROTATE

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

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?

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.

HP Color Laser MFP 178nw 4ZB96A, Impresora Láser Color Multifunción, Imprime, Escanea y...
  • Imprime a doble cara manualmente, escanea y fotocopia documentos con negros nítidos y colores vibrantes; la velocidad de impresión es de 18 ppm en negro...
  • La bandeja de entrada cuenta con una capacidad de hasta 150 hojas, la bandeja de salida con una capacidad de hasta 50 hojas y un escáner de superficie...
  • Conectividad: Wi-Fi, Wi-Fi Direct, Fast Ethernet, Puerto USB 2.0 de alta velocidad, HP Smart App, Apple AirPrint y Mopria

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.

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Artículos Recientes

Deja un comentario