Zipkin
这个示例演示了 Dubbo 集成 Zipkin 全链路追踪的基础示例,此示例共包含三部分内容:
- dubbo-samples-spring-boot3-tracing-provider
- dubbo-samples-spring-boot3-tracing-consumer
- dubbo-samples-spring-boot3-tracing-interface
快速开始
安装 & 启动 Zipkin
参考 Zipkin’s quick start 安装 Zipkin。
这里我们使用 Docker 来掩饰如何快速的启动 Zipkin 服务。
docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin
紧接着,你可以通过如下链接确认 Zipkin 正常工作 [http://localhost:9411](http://localhost:9411)
安装 & 启动 Nacos
跟随 Nacos’s quick start 快速安装并启动 Nacos。
启动示例 Provider
在 IDE 中直接运行 org.apache.dubbo.springboot.demo.provider.ProviderApplication
。
启动示例 Consumer
在 IDE 中直接运行 org.apache.dubbo.springboot.demo.consumer.ConsumerApplication
。
检查监控效果
在浏览器中打开 [http://localhost:9411/zipkin/](http://localhost:9411/zipkin/)
查看效果。
如何在项目中使用 Dubbo Tracing
1. 添加 Micrometer Observation 依赖
首先需要添加 dubbo-metrics-api
依赖将 Micrometer 和 Dubbo Metrics 引入项目中:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-metrics-api</artifactId>
</dependency>
通过集成 Micrometer Observations Dubbo 可以在只被拦截一次的情况下,导出多种不同类型的监控指标如 Metrics、Tracer、其他一些信号等,这具体取决于你对 ObservationHandlers
的配置。 可以参考以下链接 documentation under docs/observation 了解更多内容。
2. 配置 Micrometer Tracing Bridge
为了启用 Dubbo 全链路追踪统计,需要为 Micrometer Tracing 和实际的 Tracer(本示例中的 Zipkin)间配置 bridge
。
注意:Tracer 是一个管控 span 生命周期的二进制包,比如 span 的 创建、终止、采样、上报等。
Micrometer Tracing 支持 OpenTelemetry and Brave 格式的 Tracer。Dubbo 推荐使 OpenTelemetry 作为标准的 tracing 协议,bridge
的具体配置如下:
<!-- OpenTelemetry Tracer -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
3. 添加 Micrometer Tracing Exporter
添加 Tracer 后,需要继续配置 exporter(也称为 reporter)。exporter 负责导出完成 span 并将其发送到后端 reporter 系统。Micrometer Tracer 原生支持 Tanzu Observability by Wavefront 和 Zipkin。以 Zipkin 为例:
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
你可以在此阅读更多关于 Tracing 的配置信息 this documentation, under docs/tracing.
4. 配置 ObservationRegistry
@Configuration
public class ObservationConfiguration {
// reuse the applicationModel in your system
@Bean
ApplicationModel applicationModel(ObservationRegistry observationRegistry) {
ApplicationModel applicationModel = ApplicationModel.defaultModel();
applicationModel.getBeanFactory().registerBean(observationRegistry);
return applicationModel;
}
// zipkin endpoint url
@Bean
SpanExporter spanExporter() {
return new ZipkinSpanExporterBuilder().setEndpoint("http://localhost:9411/api/v2/spans").build();
}
}
5. 定制 Observation Filters
To customize the tags present in metrics (low cardinality tags) and in spans (low and high cardinality tags) you should
create your own versions of DubboServerObservationConvention
(server side) and DubboClientObservationConvention
(
client side) and register them in the ApplicationModel
’s BeanFactory
. To reuse the existing ones
check DefaultDubboServerObservationConvention
(server side) and DefaultDubboClientObservationConvention
(client
side).
Extension
其他 Micrometer Tracing Bridge
<!-- Brave Tracer -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
其他 Micrometer Tracing Exporter
Tanzu Observability by Wavefront
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-reporter-wavefront</artifactId>
</dependency>
OpenZipkin Zipkin with Brave
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-brave</artifactId>
</dependency>
An OpenZipkin URL sender dependency to send out spans to Zipkin via a URLConnectionSender
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-urlconnection</artifactId>
</dependency>