一、概述
为什么要有服务跟踪,分布式系统中有很多个服务在相互调用,调用关系是错综复杂的,如果这时出现了问题,我们在进行问题排查的时候,或者在优化架构的时候,工作量就比较大,这时候就需要我们能够准确的跟踪到每个网络请求,了解整个运行流程,如网络请求经过了哪些微服务,在每个微服务里是否有延迟等信息,这样就方便我们排查问题,这时我们就可以使用 Spring Cloud Zipkin 来实现。
Spring Cloud Zipkin 是一个可以采集并且跟踪分布式系统中请求数据的组件,让开发者可以更加直观的监控到请求在各个微服务所耗费的时间等,Zipkin 包括 Zipkin Server 服务端和 Zipkin Client 客户端。Zipkin Server 服务端是用来采集微服务之间的追踪数据的,通过 Zipkin Client 客户端完成数据的生成和展示。接下来就让我们进入实战演练!
二、实战!快速搭建 Zipkin Server 和 Zipkin client
- 创建子工程 zipkinServer,pom.xml 配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.9.4</version>
</dependency>
- 创建配置文件,代码如下:
server:
port: 9090
- 创建启动类,代码如下:
package com.zing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.internal.EnableZipkinServer;
@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(ZipkinApplication.class, args);
}
}
注解说明
- @EnableZipkinServer:声明启动 Zipkin Server
- 创建 zipkin Client。创建一个子工程,pom.xml 文件配置如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
- 创建配置文件 application.yml,配置如下:
server:
port: 8090
spring:
application:
name: zipkinclient
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0
zipkin:
base-url: http://localhost:9090/
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
属性说明
-
spring.sleuth.web.client.enabled:设置开启请求跟踪
-
spring.sleuth.sampler.probability:设置采样比例,默认是 1.0
-
spring.zipkin.base-url:Zipkin Server 的地址
- 创建启动类,代码如下:
package com.zing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ZipKinClientApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(ZipKinClientApplication.class, args);
}
}
- 创建 controller 进行测试,代码如下:
package com.zing.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/zipkin")
public class ZipkinHandler {
@Value("${server.port}")
private String port;
@GetMapping("/index")
public String index() {
return this.port;
}
}
- 依次启动注册中心,zipkinserver,zipkinclient 三个服务,访问 http://localhost:9090/zipkin/ 可出现以下可视化界面:
- 我们访问一下要跟踪的接口 http://localhost:8090/zipkin/index 显示如下界面:
- 再次访问 zipkin 服务跟踪可视化界面地址 http://localhost:9090/zipkin/ ,点击 Find Traces 按钮进入到如下页面
- 点击上图列表中数据,可进入具体展示列表,如下图:
- 点击列表中的数据,即可查看跟踪的服务的详细信息,如下图:
三、总结
本篇文章我们通过 zipkin 来对我们微服务之间的请求进行了监控,可以看到一些详细信息,如耗费的时间,具体请求的路径方法都可以看到,以上就是 Zipkin 的使用。
开发工程师一只,也在不断的学习阶段,平时的小经验不定期分享。 希望看我写的文字的人,可以少走弯路 祝工作学习顺利。
博主经验有限,若有不足,欢迎交流,共同改进~ 愿与同在CSDN的你共同进步。作者 | 甜蜜的小红薯
出品 | 小红薯