1.概述
在微服务框架中,一个客户端请求,从发起到后端系统中,会经历多个不同的微服务结点的调用,每一个请求都会形成一条复杂的分布式调用链路,链路中任何一个服务出现故障或延时都会导致整个请求最终的失败。
Spring Cloud Sleuth提供了一套完整的服务跟踪解决方案,兼容支持Zipkin。
2.搭建链路监控步骤
1.Zipkin
点击这里,下载zipkin-server-2.12.9-exec.jar,使用java -jar zipkin-server-2.12.9-exec.jar命令启动Zipkin。访问http://localhost:9411/zipkin/查看管理后台。
上图可以看到一个请求链路中,通过Trace Id作为唯一标识,通过Span Id作为请求信息,各个Span通过Parent Id关联起来。
2.服务提供者
这里使用cloud-provider-payment8001模块,修改pom.xml,加入spring-cloud-starter-zipkin坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
修改application.yml,是spring下加入zipkin和sleuth。
spring:
application:
name: cloud-payment-service # 应用名称
zipkin:
base-url: http://localhost:9411 # zipkin监控后台地址
sleuth:
sampler:
probability: 1 # 采样率介于0,1之间,1表示全部采集
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 数据源类型
driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动
url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&charcaterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai # 数据库连接
username: root # 数据库用户名
password: root # 数据库密码
在PaymentController中,加入一个映射用于测试。
@GetMapping("/payment/zipkin")
public String paymentZipkin() {
return "this is zipkin feedback";
}
3.服务消费者
这里使用cloud-consumer-order80模块,修改pom.xml,同上加入spring-cloud-starter-zipkin坐标,application.yml和cloud-provider-payment8001修改方法一样。在OrderController中添加一个映射用于测试。
@GetMapping(value = "/consumer/payment/zipkin")
public String paymentZipkin() {
return restTemplate.getForObject(PAYMENT_URL + "/payment/zipkin/", String.class);
}
4.启动服务,进行测试
依次启动Eureka7001,Payment8001,Order80模块,浏览器请求http://localhost//consumer/payment/zipkin,之后返回Zipkin的管理后台,点击“查找”按钮,就可以看到刚刚请求,点进去请求,可以看到调用链路,依赖关系,调用耗时等等信息。