Spring Boot中的Zipkin:分布式跟踪系统

简介: Spring Boot中的Zipkin:分布式跟踪系统

Spring Boot中的Zipkin:分布式跟踪系统


简介


在现代的分布式应用程序中,由于业务逻辑被分解为多个微服务,因此我们需要跟踪每个服务的性能和行为。Zipkin是一个分布式跟踪系统,它可以帮助我们收集、存储和分析跨越多个服务的请求。本文将介绍Spring Boot中的Zipkin,它如何帮助我们跟踪分布式应用程序,并介绍如何使用Zipkin。


image.png


Zipkin介绍


Zipkin是一个开源的分布式跟踪系统,它可以帮助我们跟踪多个服务之间的请求。Zipkin通过使用Google Dapper的开放标准,将跨越多个服务的请求进行追踪,并将结果可视化展示出来。Zipkin可以帮助我们发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


Zipkin的架构如下图所示:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l78ATkP4-1688528173532)(https://zipkin.io/pages/architecture.png)]


Zipkin包含以下组件:


  • Collector:用于收集跟踪信息的组件。
  • Storage:用于存储跟踪信息的组件。
  • Search:用于搜索跟踪信息的组件。
  • API:用于查询跟踪信息的API。
  • UI:用于可视化展示跟踪信息的Web界面。


Zipkin与Spring Boot集成


Spring Boot提供了对Zipkin的集成支持,通过添加Spring Cloud Sleuth和Zipkin Client的依赖来实现。Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助我们跟踪应用程序中的请求。Zipkin Client是一个Zipkin的客户端,它可以帮助我们将跟踪信息发送到Zipkin Server中。


添加依赖


首先,我们需要在pom.xml文件中添加以下依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>


配置Zipkin Server


Zipkin Server是一个用于存储和查询跟踪信息的中央存储库。我们需要配置Zipkin Server的URL,以便Sleuth可以将跟踪信息发送到Zipkin Server中。在application.properties文件中添加以下配置:


spring.zipkin.base-url=http://localhost:9411/


配置应用程序


我们需要在应用程序中添加一些配置,以便将跟踪信息发送到Zipkin Server中。在application.properties文件中添加以下配置:


spring.application.name=my-app
spring.sleuth.sampler.probability=1.0

在上面的配置中,我们指定了应用程序的名称为my-app。我们还指定了采样率为100%。


启动Zipkin Server和应用程序


在完成上述配置之后,我们需要启动Zipkin Server和应用程序。Zipkin Server默认监听9411端口,我们可以使用以下命令来启动Zipkin Server:


$ java -jar zipkin-server-2.23.2-exec.jar

在启动应用程序之前,我们需要确保应用程序的所有依赖项都已经添加到pom.xml文件中。然后,我们可以使用以下命令来启动应用程序:


$ java -jar my-app.jar


验证Zipkin跟踪


在我们启动应用程序之后,我们可以访问Zipkin的Web界面,以查看应用程序的跟踪信息。我们可以使用以下URL来访问Zipkin的Web界面:

http://localhost:9411/zipkin/

在Web界面中,我们可以看到所有的跟踪信息,我们可以根据跟踪信息的ID来查看每个请求的详细信息和时间线。以下是一个示例跟踪信息:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koHKXsTk-1688528173543)(https://zipkin.io/pages/traces.png)]


在上图中,我们可以看到一个跨越两个服务的请求的时间线。我们可以看到每个请求的开始时间、结束时间、持续时间和调用的服务名称。我们还可以查看每个服务的详细信息,包括请求的URL、请求参数、响应时间和响应代码等。


示例代码


下面是一个简单的Spring Boot应用程序,它演示了如何使用Zipkin进行分布式跟踪。在这个应用程序中,我们有两个服务:hello-service和world-service。当我们向hello-service发送一个请求时,它会向world-service发送一个请求,并返回一个响应。


pom.xml


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>


application.properties


spring.application.name=hello-world-app
server.port=8080
spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.sampler.probability=1.0


HelloController.java


@RestController
public class HelloController {
    private final RestTemplate restTemplate;
    public HelloController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    @GetMapping("/hello")
    public String hello() {
        String response = restTemplate.getForObject("http://localhost:8081/world", String.class);
        return "Hello " + response;
    }
}


WorldController.java


@RestController
public class WorldController {
    @GetMapping("/world")
    public String world() {
        return "World";
    }
}

在上面的示例中,我们使用了Spring Boot的@RestController注解来定义HelloController和WorldController。我们使用了Spring Cloud Sleuth的RestTemplate来发送HTTP请求,并将跟踪信息添加到请求头中。


结论


在现代的分布式应用程序中,跟踪请求是非常重要的。Zipkin是一个开源的分布式跟踪系统,它可以帮助我们收集、存储和分析跨越多个服务的请求。在Spring Boot中,我们可以使用Spring Cloud Sleuth和Zipkin Client来集成Zipkin。通过使用Zipkin,我们可以发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


相关文章
|
4天前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
13 0
|
5天前
|
JavaScript Java 关系型数据库
基于springboot+vue+Mysql的交流互动系统
简化操作,便于维护和使用。
17 2
|
6天前
|
Java 关系型数据库 MySQL
【毕业设计】基于Springboot的B2B平台医疗病历交互系统
【毕业设计】基于Springboot的B2B平台医疗病历交互系统
18 0
|
6天前
|
传感器 存储 SQL
LabVIEW使用ModbusTCP协议构建分布式测量系统
LabVIEW使用ModbusTCP协议构建分布式测量系统
17 4
|
6天前
|
搜索推荐 Java 数据库
springboot集成ElasticSearch的具体操作(系统全文检索)
springboot集成ElasticSearch的具体操作(系统全文检索)
|
6天前
|
存储 安全 区块链
一文说清楚IPFS分布式存储系统
一文说清楚IPFS分布式存储系统
428 1
|
6天前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
32 2
|
6天前
|
运维 监控 Java
springboot基层区域HIS系统源码
医疗(医院)机构正式使用云HIS系统之前,要先进行院内基础数据的配置,主要在数据管理模块中进行,由系统管理员来操作。
16 0
|
6天前
Springboot-Jedis实现分布式锁
Springboot-Jedis实现分布式锁
15 0
|
6天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
108 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式