spring-cloud-starter-sleuth 使用brave 的 Tracing 来实现日志trace输出
javascript
maven:java
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-dubbo-rpc</artifactId> <version>5.6.0</version> </dependency>
dubbo配置spring
dubbo.provider.filter: tracing dubbo.consumer.filter: tracing
此处的tracing 对应的是 brave-instrumentation-dubbo-rpc 包内的 文件 com.alibaba.dubbo.rpc.Filter 配置的 brave.dubbo.rpc.TracingFilter 处理类。async
SleuthInterceptor.invoke ->NonReactorSleuthMethodInvocationProcessor.proceedUnderSynchronousSpan -> Trace.withSpanInScopemaven
在invoke时,经过com.alibaba.dubbo.rpc.RpcContext断定当前服务的角色:
consumer 从当前的Tracer中生成nextSpan,将span.context()扔入中com.alibaba.dubbo.rpc.RpcInvocation的attachments中,传递到provider去。
provider 从RpcInvocation中的Attachments获取传入的TraceContext,并joinSpan到当前trace。
(固然,若是为空,会生成新的TraceContext)
ide
在真正的Invoker.invoke前
brave.Tracer.withSpanInScope -> brave.propagation.ThreadLocalCurrentTraceContext.newScope -> brave.propagation.CurrentTraceContext.decorateScope
-> org.springframework.cloud.sleuth.log.Slf4jScopeDecorator.decorateScope 设置MDC值
post