Cómo crear un microservicio que escriba a la herramienta de Logs Centralizados

Disponible a partir de versión 2.3.0-immortal

Introducción

En esta guía seguiremos las instrucciones para configurar un microservicio Spring Boot 2 que escriba los logs a nuestra herramienta centralizada de logs.

¿Cómo hacerlo?

Configuración de logs centralizados

Empezaremos por la creación de un Stream en nuestra herramienta de logs centralizados. Con este propósito vamos a seguir los siguientes pasos estando registrados como usuario administrador:

  1. Iniciamos sesión en el ControlPanel con un usuario de rol administrador y vamos a “Logs Centralizados”:

  2. Vamos a la pestaña “Streams”:

  3.  Hacemos click en “Create Stream”:

     

  4. Rellenamos los datos de título y descripción como queramos. Dejaremos marcado el “index set” al que aparece por defecto:

     

  5. Buscamos el Stream recien creado y hacemos click en “Manage Rules”:

     

  6. Hacemos click en el botón “add stream rule”:

     

  7. Definimos la regla que queremos que se evalúe en este Stream. Para nuestro ejemplo, haremos que el Stream coja los datos si llegan logs con el campo “app_name” exactamente con el valor “scoringMicroservice”:

     

  8. Hacemos click en “I'm done” y después en “start Stream”:

     

    Con esto habremos creado y activado el Stream que contendrá los logs de nuestro microservicio.

     

Configuración de logs del microservicio

  1. Añadir una dependencia para poder crear appenders que soporten GELF. En el fichero pom.xml de nuestro microservicio añadiremos la siguiente dependencia:

    <dependency> <groupId>biz.paluch.logging</groupId> <artifactId>logstash-gelf</artifactId> <version>1.14.1</version> </dependency>

     

  2. Definir propiedades y variables de entorno para el host y puerto de Graylog. Esto nos ayudará a configurar la conexión a Graylog de manera sencilla para cualquier despliegue en cualquier entorno:

    1. En el dockerfile, definimos los valores por defecto para host y puerto (las dos últimas que mostramos a continuación):

      ENV JAVA_OPTS="$JAVA_OPTS -Xms1G -Xmx3G" \ ... GRAYLOG_HOST=localhost \ GRAYLOG_PORT=12201

       

    2. Definimos los mismos valores en el fichero application.yml (sección graylog)

      onesaitplatform: iotclient: multitenant: false ... writeTimeoutInSec: 30 readTimeoutInSec: 30 graylog: host: localhost port: 12201

       

    3. Definimos los mismos valores en el fichero application-docker.yml (sección graylog). Para despliegues con docker, configuraremos los valores para que los coja de variables de entorno en vez de valores fijos:

       

    4. Añadimos la configuración del appender GELF al fichero logback-spring.xml:

      1. Definimos variables a partir de los valores de las propiedades anteriores. Al principio del fichero (tras las etiquetas “property”) definimos las variables para puerto y host:

         

      2. Creación del appender GELF. Aquí se configura la conexión contra Graylog. Es fundamental que el campo app_name tenga el mismo valor que hemos puesto previamente en la regla del Stream (paso 1.g en esta guía). El Host y puerto se asignarán desde las propiedades o variables de entorno según sea necesario:

         

      3. Activamos el appender:


        Una vez hayamos realizado estos cambios, haremos commit y subiremos el código al repositorio.

Redesplegar el microservicio

Una vez hayamos subido los cambios al repositorio, es hora de redesplegar el microservicio y comprobar que efectivamente está mandando los logs a Graylog:

  1. Hacemos build del microservicio con los cambios anteriores. Para ello vamos a “Mis microservicios” y hacemos click en el botón “Construir microservicios”:

     

     

  2. Desplegamos los cambios. Una vez se ha generado la imagen del microservicio (paso anterior), redesplegaremos el servicio haciendo click en el botón “upgrade” :

     

  3. Aquí es donde entran en juego las variables de entorno que hemos definido previamente. En nuestro caso la herramienta de logs centralizados está desplegada en el mismo CAAS, en el servicio “log-centralizer” del stack “onesaitplatform”. De esta manera el host será: log-centralizer.onesaitplatform

     

 Una vez redesplegado el microservicio, podemos ir a la herramienta de logs centralizados, seleccionar el Stream en una búsqueda y comprobar que se están recibiendo los logs: