cdanielpy.github.io

Mi repositorio de publicaciones personales para el resto del mundo

Follow me on GitHub

Logging Centralizado

Spring Boot + Logback + RabbitMQ + MongoDB

logback logo logo rabbitmq logo spring-boot logo mongodb


logo json


Presentación

Pasado algún tiempo abandonado este blog estoy de vuelta para plasmar otro de mis trabajos cubriendo una necesidad personal en mi ámbito laboral, que en esta ocasión era el poder visualizar en forma centralizada los eventos generados por mis aplicaciones instaladas en distintos servidores.

Después de mucho leer, evidentemente no era el primero en toparse con esta necesidad así que ya habían bastantes antedecentes y proyectos precendentes, como el Graylog, que se puede utilizar gratuitamente hasta los 5GB/día de datos, y que en mi caso tengo proyectado incluir varias a aplicaciones más por lo que podría quedarse corto.

Tecnologías

Aprovechando mi experiencia decidí investigar como desarrollar cada uno de los elementos citados en cada lectura valíendome de las herramientas que más conozco:

  • Logback(v1.2.3): para el registro de los eventos marcados a nivel de código de aplicación.
  • RabbitMQ(v3.3.5): para el transporte de los datos hasta la base de datos NoSQL.
  • Spring Boot(v2.0.5): utilizando la integración de fábrica con el RabbitMQ y una de sus clases, particularmente.
  • MongoDB(v3.4.1): como almacén de los datos de eventos registrados, y
  • JSON: como estructura modelo de los datos en todo el flujo.

Diagrama de Flujo

dfd logger


En la imagen podemos ver cómo sería el flujo de datos de eventos registrados (de izquierda a derecha):
  1. Los eventos de cada aplicación se generan y se notifican a una cola en el RabbitMQ.
  2. El RabbitMQ absorbe la carga de datos entrantes y se centralizan en la cola determinada.
  3. La aplicación (que desarrollaremos) monitorea la cola de mensajes y recibe cada uno de ellos, los formatea y persiste en la base de datos MongoDB.
  4. A partir de aquí se puede hacer lo que se quiera con los datos, reportes, otras aplicaciones de monitoreo, filtrado, envío de correos, etc.

Manos a la obra

Despúes de tanta teoría ya podemos empezar con la parte dura en la que escribiremos el código de las aplicaciones de origenes de eventos como también la de recepción y persistencia de los mismos.

Paso 1: Preparar el RabbitMQ