Spring-Cloud-Gateway 创建的初始 Trace 都命名为“/”,无论路径如何
Posted
技术标签:
【中文标题】Spring-Cloud-Gateway 创建的初始 Trace 都命名为“/”,无论路径如何【英文标题】:Initial Traces created by Spring-Cloud-Gateway are all named "/", no matter the path 【发布时间】:2020-04-28 07:02:37 【问题描述】:我已将 sleuth 集成到我的应用程序网关及其背后的服务中。 Stackdriver (GKE) 中的跟踪看起来不错,但根跨度始终命名为“/”。例如:
第二个跨度也是由网关创建的,并且有一个更好的名称。
如何在我的网关服务中配置 sleuth 以使用不同的命名或修复导致两个跨度的任何原因?
EDIT1:
我使用 spring-gateway、sleuth 和 gcp 创建了一个最小项目,并编写了一个 LoggingReporter 来打印所有报告的跨度,同时让 GCP 自动配置工作。
StackdriverHttpClientParser
名称跨度基于请求 uri。第二个跨度由 TraceWebFilter 基于具有完整 uri 的请求创建。第一个跨度由HttpClientBeanPostProcessor
基于uri“/”创建。
我认为这不是 gcp 问题。这可能是spring-gateway的问题。有趣的是,首先创建了 TraceWebFilter 跨度,但 PostProcessor 仍然是父级。
EDIT2:我在 spring sleuth https://github.com/spring-cloud/spring-cloud-sleuth/issues/1535987654322@
中创建了一个问题【问题讨论】:
这可能是堆栈驱动程序的问题。离线运行时,您必须查看是否有同样的问题 【参考方案1】:我同意 Marcin 的评论,问题可能出在 Stackdriver 上,您可以通过在您的环境(离线)中运行跟踪来验证这一点,并确保 x-cloud-trace-context: TRACE_ID/SPAN_ID
的格式正确,按照我所看到的有三种方法可以做到这一点,并提到了here。
如果在不更改任何内容的情况下脱机运行跟踪结果成功,则问题出在堆栈驱动程序上。
【讨论】:
我调试了一个示例项目并添加了我的发现。这似乎不是 GCP 特有的问题。以上是关于Spring-Cloud-Gateway 创建的初始 Trace 都命名为“/”,无论路径如何的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 spring-cloud-gateway 以使用 sleuth 记录请求/响应正文
无法根据活动的 Spring 配置文件生成不同的 spring-cloud-gateway 路由
java学习---spring-cloud-gateway网关配置
sentinal spring-cloud-gateway adapter(1.6)异常错误之@EnableCircuitBreaker