SpringCloud项目做链路追踪,比较常见的会集成Sleuth+ZipKin来完成,但这次的需求要集成开源框架OpenTelemetry,这里整理下实现过程。相关文章:
【SpringCloud集成Sleuth+Zipkin进行链路追踪】
【OpenTelemetry框架Trace部分整理】
文章目录
- 1、Demo项目介绍
- 2、maven配置
- 3、生成OpenTelemetrySdk对象
1、Demo项目介绍
这里用一个简单的SpringCloud项目来演示如何集成OpenTelemetry,项目中有三个服务,网关gateway、订单服务order、用户服务user,且order通过Feign远程调用user,最后数据导出到zipkin。(OpenTelemetry专注的是生成、收集、导出,存储和可视化的事儿交给其他工具,如ZipKin、Jager)
2、maven配置
父项目中定义OpenTelemetry依赖,版本根据实际情况自适应,这里选1.1.0
<properties>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<opentelemetry.version>1.1.0</opentelemetry.version>
<grpc.version>1.36.1</grpc.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-bom</artifactId>
<version>${opentelemetry.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
加入opentelemetry依赖项:
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-semconv</artifactId>
<version>1.1.0-alpha</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
复习@Tip:
- 在父项目中的dependencies中定义的所有依赖,在子项目中都会直接继承
- 在父项目中的dependencyManagement中定义的所有依赖,子项目并不会继承,还要在子项目中引入我们需要的依赖,才能进行使用,但是,在子项目中不用设置版本,说白了就像后面的manager单词,只是做个统一管理
3、生成OpenTelemetrySdk对象
准备OpenTelemetrySdk对象,用于生成tracer、textMapPropagator等后面要用的对象,这里我用静态代码块实现(也可直接注册为Bean):
在这里插入代码片
以下为注册为Bean的方式,二选一即可:
在这里插入代码片