es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los IDs de traza de Spring Sleuth han desaparecido en Spring Cloud Gateway.

Tengo una aplicación de Spring Cloud Gateway muy simple (nada personalizado, descargado directamente desde start.spring.io, solo selecciona gateway y sleuth). Para habilitar los registros de acceso, debo establecer la propiedad del sistema reactor.netty.http.server.accessLogEnabled:

@SpringBootApplication
class Application

fun main(args: Array<string>) {
    System.setProperty(ReactorNetty.ACCESS_LOG_ENABLED, "true")
    runApplication<application>(*args)
}

Y todo funciona perfectamente:

2021-12-27 17:19:05.245 INFO [gateway,,] 62156 — [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty iniciado en el puerto 8080
2021-12-27 17:19:05.284 INFO [gateway,,] 62156 — [ main] com.example.demo.ApplicationKt : ApplicationKt iniciado en 1.855 segundos (JVM en ejecución durante 2.262)
2021-12-27 17:19:09.914 INFO [gateway,e075b59a8a4bca5d,e075b59a8a4bca5d] 62156 — [ctor-http-nio-2] reactor.netty.http.server.AccessLog : 127.0.0.1 – – [27/Dic/2021:17:19:09 +0100] “GET /get HTTP/1.1” 404 132 111
Ahora, cuando agrego una ruta a la aplicación:

@SpringBootApplication
class Application

fun main(args: Array<string>) {
    System.setProperty(ReactorNetty.ACCESS_LOG_ENABLED, "true")
    runApplication<application>(*args) {
        addInitializers(
            beans {
                bean {
                    ref<routelocatorbuilder>().routes {
                        route {
                            path("/")
                            uri("https://httpbin.org")
                        }
                    }
                }
            }
        )
    }
}

La información de seguimiento desaparece:
2021-12-27 17:23:48.010 INFO [gateway,,] 62423 — [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty iniciado en el puerto 8080
2021-12-27 17:23:48.042 INFO [gateway,,] 62423 — [ main] com.example.demo.ApplicationKt : ApplicationKt iniciado en 1.774 segundos (JVM en ejecución durante 2.145)
2021-12-27 17:24:21.864 INFO [gateway,,] 62423 — [ctor-http-nio-2] reactor.netty.http.server.AccessLog : 127.0.0.1 – – [27/Dic/2021:17:24:20 +0100] “GET /get HTTP/1.1” 200 613 949
También sucede con las rutas definidas en application.xml.
¿Qué me falta? ¿Necesito hacer algo mientras configuro las rutas?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que agregar una ruta a la aplicación Spring Cloud Gateway está haciendo que desaparezca la información de trazabilidad. Para habilitar la información de trazabilidad, necesitamos usar Spring Cloud Sleuth, que ya está incluido en la aplicación. Sin embargo, para que Sleuth funcione correctamente con el gateway, debe configurarse para pasar los encabezados de trazabilidad a los servicios de aguas abajo.

    Para habilitar este comportamiento en nuestra aplicación, debemos agregar un bean personalizado de la clase HttpTracing de Sleuth que incluya la configuración necesaria para propagar los encabezados de trazabilidad:

    @SpringBootApplication
    class Application
    
    fun main(args: Array<string>) {
        System.setProperty(ReactorNetty.ACCESS_LOG_ENABLED, "true")
    
        runApplication<application>(*args) {
            addInitializers(
                beans {
                    bean {
                        ref<routelocatorbuilder>().routes {
                            route {
                                path("/*")
                                uri("https://httpbin.org")
                            }
                        }
                    }
    
                    // Agregar bean personalizado de Sleuth HttpTracing
                    bean {
                        SleuthHttpTracing.create(
                            SleuthTracing.create(),
                            HttpTracingCustomizer { builder ->
                                builder.propagationFactory(CompositePropagation.INSTANCE)
                                       .addPropagator(B3Propagation.FACTORY)
                            }
                        )
                    }
                }
            )
        }
    }
    

    Con esta configuración adicional, la aplicación ahora debería propagar correctamente los encabezados de trazabilidad a los servicios de aguas abajo, lo que nos permitirá seguir recolectando información de trazabilidad incluso con la adición de rutas en la aplicación Spring Cloud Gateway.

Comments are closed.