在项目中使用Zipkin--链路追踪
在项目中使用Zipkin--链路追踪
右边线框内代表了Zipkin的服务端,其中各组件的功能如下:
zipkin-client端 client需要有多个,本篇只拿一个进行举例。
启动工程打开浏览器访问:http://localhost:9412/
zipkin简介
随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin分布式跟踪系统就能很好的解决这样的问题。
zipkin基本概念
1.Span:每个服务的处理跟踪是一个Span,可以理解为一个基本的工作单元。
2.Trace:一组Span的集合,表示一条调用链路。举个例子:当前存在服务A调用服务B然后调用服务C,这个A->B->C的链路就是一条Trace,而每个服务例如B就是一个Span,如果在服务B中另起2个线程分别调用了D、E,那么D、E就是B的子Span。Trace结构表示对一次请求的跟踪,一次请求可能由后台的若干服务负责处理,每个服务的处理是一个Span,Span之间有依赖关系,Trace就是树结构的Span集合;
3.Transport:收集的Spans必须从被追踪的服务运输到Zipkin collector,有三个主要的传输方式:HTTP, Kafka和Scribe;
4.Components:有4个组件组成Zipkin:collector,storage,search,web UI
运行关系图
左边部分代表了客户端分别为:
1.InstrumentedClient:使用了Zipkin客户端工具的服务调用方
2.InstrumentedServer:使用了Zipkin客户端工具的服务提供方
3.Non-InstrumentedServer:未使用Trace工具的服务提供方,当然还可能存在未使用工具的调用方
总结:一个调用链路是贯穿InstrumentedClient->InstrumentedServer的,每经过一个服务都会以Span的形式通过Transport把经过自身的请求上报的Zipkin服务端中
右边线框内代表了Zipkin的服务端,其中各组件的功能如下:
1.UI:提供web页面,用来展示Zipkin中的调用链和系统依赖关系等
2.Collector:对各个客户端暴露,负责接受调用数据,支持HTTP、MQ等
3.Storage:负责与各个存储适配后存储数据,支持内存,MySQL,ES等
4.API:为web界面提供查询存储中的数据的接口
在项目中使用Zipkin
zipkin-server端
1.导入依赖
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-test</artifactId>
-
<scope>test</scope>
-
</dependency>
-
-
<!--zipkin服务端所需的依赖-->
-
<dependency>
-
<groupId>io.zipkin.java</groupId>
-
<artifactId>zipkin-server</artifactId>
-
<version>2.12.3</version>
-
</dependency>
-
<dependency>
-
<groupId>io.zipkin.java</groupId>
-
<artifactId>zipkin-autoconfigure-ui</artifactId>
-
<version>2.12.3</version>
-
</dependency>
-
</dependencies>
2. 编写配置文件
-
server:
-
port: 9412
-
-
-
#zipkin启动报错无法访问的解决方法
-
management:
-
metrics:
-
web:
-
server:
-
auto-time-requests: false
3.创建引导类
-
/**
-
* @Author: Promsing(张有博)
-
* @Date: 2021/7/23 - 10:33
-
* @Description: Zipkin的服务端
-
* @version: 1.0
-
*/
-
@SpringBootApplication
-
@EnableZipkinServer //zipkin的注解
-
public class ZipkinApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(ZipkinApplication.class,args);
-
}
-
}
zipkin-client端 -- client需要有多个,本篇只拿一个进行举例。
1.引入依赖
-
<!--Zipkin的依赖-->
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-zipkin</artifactId>
-
<version>2.2.1.RELEASE</version>
-
</dependency>
2.编写配置文件
-
spring:
-
cloud:
-
application:
-
name: video
-
zipkin:
-
base-url: http://localhost:9412
3.创建引导类
-
@SpringBootApplication
-
public class VideoApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(VideoApplication.class,args);
-
}
-
}
4.写一个服务之间相互调用的接口
使用到openFeign--只是示例,没有业务代码
-
@ApiOperation(value = "feign测试")
-
@GetMapping("/queryFeign")
-
public Result queryFeign(){
-
System.out.println("screen通过Feign调取project成功");
-
return Result.build(Result.SUCCESS,"查询成功");
-
}
其他的zipkin-client端 ,可按照以上四步去做
启动工程查看效果
启动工程打开浏览器访问:http://localhost:9412/
当有服务之间的调用时可以看到详情
如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。
文章来源: blog.csdn.net,作者:小小张自由—>张有博,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/promsing/article/details/119278860
- 点赞
- 收藏
- 关注作者
评论(0)