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?
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: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.