仅引入spring-cloud-starter-zipkin可生成spanId与TraceId,为何还需要Spring Sleuth?
依赖链路逻辑说明
spring-cloud-starter-zipkin默认依赖io.zipkin.brave(Zipkin官方的Java链路埋点实现库),Brave本身已经具备独立生成TraceID、SpanID、采集上报链路数据的基础能力,所以仅引入该依赖就能看到链路ID属于正常现象。
Spring Sleuth的核心作用
Spring Sleuth是Spring生态专属的链路追踪适配层,本身不实现底层链路生成逻辑,核心价值在于对Spring技术栈的开箱即用适配:
- 全Spring生态组件自动埋点:默认支持Spring MVC、RestTemplate、Feign、消息队列(RabbitMQ/Kafka)、Redis、JDBC等常用组件的链路埋点与ID传递,不需要手动编写Brave原生埋点代码。
- 日志框架自动集成:默认会把TraceID、SpanID自动塞入日志上下文(MDC),你直接在日志格式里配置
%X{traceId}%X{spanId}即可打印链路信息,无需手动操作MDC。 - 统一配置能力:通过Spring Boot配置文件即可快速调整采样率、忽略路径、上报规则等,不需要直接调用Brave原生API。
- Spring Cloud生态深度适配:默认支持Spring Cloud Gateway、负载均衡、熔断组件等微服务场景下的链路ID透传,还有
@NewSpan@ContinueSpan等注解方便你自定义埋点。
引入必要性判断
- 若你的应用是极简单服务,只需要基础链路ID生成和Zipkin上报,没有用到Spring其他组件,也不需要日志打印链路ID、自定义链路规则,可以不用引入Spring Sleuth,仅依赖Brave的基础能力即可。
- 若你的应用是微服务架构,用到了Spring MVC、Feign、消息队列等组件,需要全链路ID透传、日志排查问题、自定义链路规则,必须引入Spring Sleuth,否则你需要自行开发大量适配代码,实现成本极高。
补充说明:Spring Cloud 2020.0.0(Ilford)及以上版本中,
spring-cloud-starter-zipkin默认已经依赖了spring-cloud-starter-sleuth,如果你观察到没有拉取Sleuth依赖,大概率是使用的版本过旧,或者依赖被手动排除了。
内容的提问来源于stack exchange,提问作者user11546680
相关产品推荐
相关产品推荐

