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,我们可以发现应用程序中的慢请求,并帮助我们调试和优化性能问题。


相关文章
|
12月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
12月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。
|
12月前
|
JavaScript Java 关系型数据库
基于springboot的高校运动会系统
本系统基于Spring Boot、Vue与MySQL,实现高校运动会报名、赛程安排及成绩管理的全流程信息化,提升组织效率,杜绝信息错漏与冒名顶替,推动体育赛事智能化发展。
|
12月前
|
JavaScript 安全 Java
基于springboot的大学生兼职系统
本课题针对大学生兼职信息不对称、权益难保障等问题,研究基于Spring Boot、Vue、MySQL等技术的兼职系统,旨在构建安全、高效、功能完善的平台,提升大学生就业竞争力与兼职质量。
|
12月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
12月前
|
Java 关系型数据库 MySQL
基于springboot的网咖网吧管理系统
本文探讨了基于Java、MySQL和SpringBoot的网吧管理系统的设计与实现。随着信息化发展,传统管理方式难以满足需求,而该系统通过先进技术提升管理效率、保障数据安全、降低运营成本,具有重要意义。
|
12月前
|
JavaScript Java 关系型数据库
基于springboot的摄影师分享交流社区系统
本系统基于Spring Boot与Vue构建摄影师分享交流平台,旨在打造专业社区,支持作品展示、技术交流与合作互动。采用Java、MySQL等成熟技术,提升摄影爱好者创作水平,推动行业发展。
|
12月前
|
JavaScript 搜索推荐 Java
基于SpringBoot的社区老年食堂系统
针对老龄化社会饮食难题,智慧社区老年食堂系统应运而生。融合Spring Boot、Vue、Java与MySQL技术,实现餐饮服务智能化、个性化,提升老年人生活质量与幸福感,推动社区养老服务升级。
|
12月前
|
JavaScript 搜索推荐 Java
基于springboot的民宿预定管理系统
本研究针对民宿市场管理效率低、信息化程度不足等问题,设计并实现基于Spring Boot、Vue和MySQL的民宿预订管理系统。系统提升预订效率与用户体验,助力行业数字化转型。

热门文章

最新文章