mirror of
https://gitee.com/yudaocode/SpringBoot-Labs.git
synced 2026-09-03 05:53:54 +08:00
增加 zipkin 对 dubbo 的链路追踪
This commit is contained in:
@@ -50,6 +50,43 @@
|
||||
<version>2.13.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Brave 核心库 -->
|
||||
<!-- The below are needed to report traces to http://localhost:9411/api/v2/spans -->
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.zipkin.reporter2</groupId>
|
||||
<artifactId>zipkin-sender-okhttp3</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Adds the MVC class and method names to server spans -->
|
||||
<!-- Brave 对 Spring MVC 的支持 -->
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave-instrumentation-spring-webmvc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Brave 针对 Dubbo 的插件,实现链路追踪 -->
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave-instrumentation-dubbo</artifactId>
|
||||
<version>5.10.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
<!-- Brave Bom 文件 -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave-bom</artifactId>
|
||||
<version>5.9.1</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package cn.iocoder.springboot.lab40.zpkindemo.consumerdemo.config;
|
||||
|
||||
import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
@Import(SpanCustomizingAsyncHandlerInterceptor.class)
|
||||
public class SpringMvcConfiguration implements WebMvcConfigurer {
|
||||
|
||||
@Autowired
|
||||
public SpanCustomizingAsyncHandlerInterceptor webMvcTracingCustomizer;
|
||||
|
||||
/**
|
||||
* Decorates server spans with application-defined web tags
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(webMvcTracingCustomizer);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package cn.iocoder.springboot.lab40.zpkindemo.consumerdemo.config;
|
||||
|
||||
import brave.CurrentSpanCustomizer;
|
||||
import brave.SpanCustomizer;
|
||||
import brave.Tracing;
|
||||
import brave.http.HttpTracing;
|
||||
import brave.servlet.TracingFilter;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import zipkin2.Span;
|
||||
import zipkin2.reporter.AsyncReporter;
|
||||
import zipkin2.reporter.Sender;
|
||||
import zipkin2.reporter.okhttp3.OkHttpSender;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
|
||||
@Configuration
|
||||
public class ZipkinConfiguration {
|
||||
|
||||
// ==================== 通用配置 ====================
|
||||
|
||||
/**
|
||||
* Configuration for how to send spans to Zipkin
|
||||
*/
|
||||
@Bean
|
||||
public Sender sender() {
|
||||
return OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans");
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration for how to buffer spans into messages for Zipkin
|
||||
*/
|
||||
@Bean
|
||||
public AsyncReporter<Span> spanReporter() {
|
||||
return AsyncReporter.create(sender());
|
||||
}
|
||||
|
||||
/**
|
||||
* Controls aspects of tracing such as the service name that shows up in the UI
|
||||
*/
|
||||
@Bean
|
||||
public Tracing tracing(@Value("${spring.application.name}") String serviceName) {
|
||||
return Tracing.newBuilder()
|
||||
.localServiceName(serviceName)
|
||||
// .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
|
||||
// .addScopeDecorator(MDCScopeDecorator.create()) // puts trace IDs into logs
|
||||
// .build()
|
||||
// )
|
||||
.spanReporter(spanReporter()).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows someone to add tags to a span if a trace is in progress
|
||||
*/
|
||||
@Bean
|
||||
public SpanCustomizer spanCustomizer(Tracing tracing) {
|
||||
return CurrentSpanCustomizer.create(tracing);
|
||||
}
|
||||
|
||||
// ==================== HTTP 相关 ====================
|
||||
|
||||
/**
|
||||
* Decides how to name and tag spans. By default they are named the same as the http method
|
||||
*/
|
||||
@Bean
|
||||
public HttpTracing httpTracing(Tracing tracing) {
|
||||
return HttpTracing.create(tracing);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates server spans for http requests
|
||||
*/
|
||||
@Bean
|
||||
public Filter tracingFilter(HttpTracing httpTracing) {
|
||||
return TracingFilter.create(httpTracing);
|
||||
}
|
||||
|
||||
// ==================== SpringMVC 相关 ====================
|
||||
// @see SpringMvcConfiguration 类上的,@Import(SpanCustomizingAsyncHandlerInterceptor.class)
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,8 +1,15 @@
|
||||
spring:
|
||||
application:
|
||||
name: user-service-consumer
|
||||
|
||||
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
|
||||
dubbo:
|
||||
# Dubbo 应用配置
|
||||
application:
|
||||
name: user-service-consumer # 应用名
|
||||
name: ${spring.application.name} # 应用名
|
||||
# Dubbo 注册中心配置
|
||||
registry:
|
||||
address: zookeeper://127.0.0.1:2181 # 注册中心地址。个鞥多注册中心,可见 http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html 文档。
|
||||
# Dubbo 服务提供者的配置,对应 ConsumerConfig 类
|
||||
consumer:
|
||||
filter: tracing
|
||||
|
||||
@@ -50,6 +50,36 @@
|
||||
<version>2.13.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Brave 核心库 -->
|
||||
<!-- The below are needed to report traces to http://localhost:9411/api/v2/spans -->
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.zipkin.reporter2</groupId>
|
||||
<artifactId>zipkin-sender-okhttp3</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Brave 针对 Dubbo 的插件,实现链路追踪 -->
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave-instrumentation-dubbo</artifactId>
|
||||
<version>5.10.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
<!-- Brave Bom 文件 -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.zipkin.brave</groupId>
|
||||
<artifactId>brave-bom</artifactId>
|
||||
<version>5.9.1</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package cn.iocoder.springboot.lab40.zipkindemo.providerdemo.config;
|
||||
|
||||
import brave.CurrentSpanCustomizer;
|
||||
import brave.SpanCustomizer;
|
||||
import brave.Tracing;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import zipkin2.Span;
|
||||
import zipkin2.reporter.AsyncReporter;
|
||||
import zipkin2.reporter.Sender;
|
||||
import zipkin2.reporter.okhttp3.OkHttpSender;
|
||||
|
||||
@Configuration
|
||||
public class ZipkinConfiguration {
|
||||
|
||||
// ==================== 通用配置 ====================
|
||||
|
||||
/**
|
||||
* Configuration for how to send spans to Zipkin
|
||||
*/
|
||||
@Bean
|
||||
public Sender sender() {
|
||||
return OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans");
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration for how to buffer spans into messages for Zipkin
|
||||
*/
|
||||
@Bean
|
||||
public AsyncReporter<Span> spanReporter() {
|
||||
return AsyncReporter.create(sender());
|
||||
}
|
||||
|
||||
/**
|
||||
* Controls aspects of tracing such as the service name that shows up in the UI
|
||||
*/
|
||||
@Bean
|
||||
public Tracing tracing(@Value("${spring.application.name}") String serviceName) {
|
||||
return Tracing.newBuilder()
|
||||
.localServiceName(serviceName)
|
||||
// .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
|
||||
// .addScopeDecorator(MDCScopeDecorator.create()) // puts trace IDs into logs
|
||||
// .build()
|
||||
// )
|
||||
.spanReporter(spanReporter()).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows someone to add tags to a span if a trace is in progress
|
||||
*/
|
||||
@Bean
|
||||
public SpanCustomizer spanCustomizer(Tracing tracing) {
|
||||
return CurrentSpanCustomizer.create(tracing);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,12 @@
|
||||
spring:
|
||||
application:
|
||||
name: user-service-provider
|
||||
|
||||
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
|
||||
dubbo:
|
||||
# Dubbo 应用配置
|
||||
application:
|
||||
name: user-service-provider # 应用名
|
||||
name: ${spring.application.name} # 应用名
|
||||
# Dubbo 注册中心配
|
||||
registry:
|
||||
address: zookeeper://127.0.0.1:2181 # 注册中心地址。个鞥多注册中心,可见 http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html 文档。
|
||||
@@ -13,3 +17,6 @@ dubbo:
|
||||
# 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者
|
||||
scan:
|
||||
base-packages: cn.iocoder.springboot.lab40.zipkindemo.providerdemo.service
|
||||
# Dubbo 服务提供者的配置,对应 ProviderConfig 类
|
||||
provider:
|
||||
filter: tracing
|
||||
|
||||
@@ -16,7 +16,7 @@ dubbo:
|
||||
# Dubbo 服务注册中心配置,对应 RegistryConfig 类
|
||||
registry:
|
||||
address: spring-cloud://127.0.0.1:8848 # 指定 Dubbo 服务注册中心的地址
|
||||
# Dubbo 服务提供者的配置,对应 ProviderConfig 类
|
||||
# Dubbo 服务提供者的配置,对应 ConsumerConfig 类
|
||||
consumer:
|
||||
filter: tracing
|
||||
# Spring Cloud Alibaba Dubbo 专属配置项,对应 DubboCloudProperties 类
|
||||
|
||||
Reference in New Issue
Block a user