Estás viendo una versión antigua de esta página. Ve a la versión actual.

Comparar con el actual Ver el historial de la página

« Anterior Versión 4 Siguiente »

Rastreo distribuido, en nuestro contexto de FundeWebJS, es el proceso por el que podemos rastrear una request a través de todas las APIs.
Al llegar una request a una API, se le asigna un ID de traza único, que se va propagando entre todas las APIs que se invoquen desde la primera.

Como resultado, tendremos un ID único y común (llamado traceId) que todas las APIs podrán usar para filtrar los logs en LAGAR y seguir el recorrido completo de la petición aunque haya saltado de aplicación.

Además del traceId común, se genera otro ID de segundo nivel (spanId), que permite enlazar todos los logs correspondientes a una petición dentro de una misma aplicación.

Se podrá ver un ejemplo práctico en la página Visualización de rastreo distribuido en LAGAR.


Sleuth (detective en inglés), es la librería de Spring-cloud que implementa el proceso de rastreo distribuido.

Esta página es una guía de introducción y configuración de Sleuth en nuestros proyectos FundeWebJS.

Todas las APIs FundeWebJS se han configurado para usar Sleuth. En principio, NO ES NECESARIO que los programadores realicen la configuración.

Esta página es una referencia, por si alguna aplicación se ha escapado del radar de MNCS.

Guía detallada

A continuación se detallan los pasos para configurar Sleuth.


1. Fichero pom.xml:

  • Añadir una property con la versión de Spring-Cloud

    <properties>...
    <spring.cloud.version>2021.0.3</spring.cloud.version> <!-- Para versiones de spring-boot-starter-parent a partir de 2.6.X ->
    
    <spring.cloud.version>2020.0.6</spring.cloud.version> <!-- Para versiones de spring-boot-starter-parent de 2.4.X y 2.5.X ->
    
    <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <!-- Para versiones de spring-boot-starter-parent 2.2.X y 2.3.X ->
    ...
    </properties>


    SOLO DEBE HABER UNA PROPERTY spring.cloud.version, la que corresponda con el parent spring-boot-starter-parent que tengamos configurado en nuestro pom.xml.


    Estas versiones son a fecha de agosto 2022, se recomienda visitar la página https://spring.io/projects/spring-cloud y obtener la versión actualizada "release.train" de la tabla Table 1. Release train Spring Boot compatibility.

    Release TrainBoot Version

    2021.0.x aka Jubilee

    2.6.x, 2.7.x (Starting with 2021.0.3)

    2020.0.x aka Ilford

    2.4.x, 2.5.x (Starting with 2020.0.3)

    Hoxton

    2.2.x, 2.3.x (Starting with SR5)

    Greenwich

    2.1.x

    Finchley

    2.0.x

    Edgware

    1.5.x

    Dalston

    1.5.x

    Ejemplo de Tabla de compatibilidades Spring-Cloud - Spring-Boot agosto'22.


  • Incluir la dependencia spring-cloud-dependencies en el dependencyManagement de nuestro pom.xml. (Si dependencyManagement no está, añadir entero el siguiente bloque).

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • Añadir la dependencia de Sleuth. (En este caso, junto al resto de dependencias del proyecto)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

2. Fichero application.properties:


  • Añadir las siguientes propiedades en el fichero application.properties de Helm Chart:

    spring.application.name=${app.author}/${app.apiname} ##SOLO SI NO ESTÁ DEFINIDA ANTES Y TENEMOS app.author y app.apiname
    spring.zipkin.enabled=false ##Deshabilita el envío a Zipkin, aunque no debe hacerse si la dependencia de Zipkin no está en el pom.xml.
    spring.sleuth.baggage.remote-fields=UMU-User-SessionID #Define el campo para recibir y propagar a otros servicios
    spring.sleuth.baggage.correlation-fields=UMU-User-SessionID #Añade el campo al MDC
    spring.sleuth.baggage.tag-fields=UMU-User-SessionID #Define el campo para enviarlo como tag y poder filtrar en zipkin/jaeger en el futuro


    En las referencias hay un enlace a la documentación de Sleuth (#appendix) con la tabla con todas las propiedades de configuración.

Integraciones

Sleuth se integra automáticamente con los RestController (para gestionar las trazas "entrantes" al llegar una petición a nuestro servicio) y con RestTemplate (para gestionar las trazas "salientes" cuando hacemos un cliente a otro servicio).

Para integrar correctamente Sleuth con WebClient (ver confluence WebClient) es imprescindible registrar el WebClient a usar como @Bean. 
Si aún así, tenemos una excepción al lanzar el cliente, añadir la property "spring.sleuth.reactor.enabled=false" en el application.properties. Si el problema persiste, hay que poner Jira a DJ-AT-MNCS.

Se pueden ver ejemplos de Sleuth con otras integraciones en la documentación de Sleuth en referencias, pero no se han usado en FundeWebJS hasta la fecha. 

Referencias




  • Sin etiquetas