个人博客:程序员笑笑生,欢迎浏览博客!java
上一章 SpringCloud 基础教程(十一)-Sleuth 调用链追踪简介当中,咱们将介绍了Spring Cloud Sleuth在分布式环境中实现了调用链路信息的打印,本章将在此基础之上结合Zikpin搭建完整的实时数据追踪系统。mysql
Zipkin是一款分布式追踪系统,是用来收集并诊断微服务体系中系统延时问题,主要功能就是收集和查找这些问题,Spring Cloud Sleuth实现了Dapper(Google 分布式跟踪系统的论文),生成了一系列的追踪数据,固然也能集成Zipkin,汇集日志到Zipkin中,由Zipkin收集并存储,以及提供查询等功能程序员
Zipkin主要由4个部分组成,以下图:web
Zipkin分为服务端和客户端,服务端就是单独的一个Zipkin服务,用来收集、展现信息用的,而客户端在微服务架构中就是每一个微服务的组件,咱们在每一个组件中配置Zipkin服务端的链接地址URL,就能够将追踪信息传输给Zipkin。传输采用的事HTTP请求,固然也能够改为消息总线的方式.spring
新建Maven项目,在pom中引入zipkin的依赖,zipkin-server为服务端依赖,zipkin-autoconfigure-ui为web依赖:sql
<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> <version>2.11.9</version> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <version>2.11.9</version> </dependency>
建立启动类:SleuthServeApplication,添加@EnableZipkinServer注解,表示容许启动Zipkin服务:数据库
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import zipkin2.server.internal.EnableZipkinServer; @SpringBootApplication @EnableZipkinServer public class SleuthServeApplication { public static void main(String[] args) { SpringApplication.run(SleuthServeApplication.class, args); } }
配置applicaiton.yml,注意若是没有添加 management.metrics.web.server.auto-time-requests=false ,则请求web UI时出现错误,这个是表示关闭自动监测;api
server: port: 8242 management: metrics: web: server: auto-time-requests: false
启动项目后,请求http://localhost:8242/,出现如下的页面:架构
能够根据服务名称,Span等其余条件查询链路追踪的状况.app
搭建好了Zipkin服务端后,咱们须要在客户端(开发微服务组件)中配置相关的信息,咱们回顾一下咱们的服务组件:
咱们在上一章中为每一个组件都引入了sleuth依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
如今一样为每个服务添加spring Cloud sleuth对Zipkin支持的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
接着在服务提供者:server-provider和服务消费者:server-consumer的application.yml中配置:
spring: zipkin: base-url: http://localhost:8242/ enabled: true sleuth: sampler: probability: 1.0
接下来,咱们启动全部的服务以及Zipkin的服务端,并经过服务消费者接口调用服务消费者接口:
http://localhost:5168/hystrix/sayHello?name=test,接口成功的返回了信息,日志一样打出了调用链的信息:
咱们经过zipkin服务端的web UI查看到了一条请求:
注意:当前采用的是HTTP方式传输数据
双击以后显示调用链的具体信息,这是一个完整的Trace在Web页面的显示,这条调用链通过了服务消费者,
Hystrix,为何通过Hyxtrix呢,咱们知道Hystrix为每个资源维护了一个线程池,因此有一个单独的Span
,同时通过了服务提供者,这样咱们能够查看到服务调用的关系依赖了:
点击应用名称,咱们还能够看到更多的信息,请求耗时等信息:
Zipkin对数据的存储默认是在内存中的,在企业生产环境中,咱们须要持久化这些数据,一样咱们能够将其与Mysql进行整合:
在Zipkin服务端的pom文件中,咱们再添加如下依赖:
<!--自动注入配置--> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-storage-mysql</artifactId> <version>2.11.9</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--spring boot 数据源--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
application.yml配置中:
server: port: 8242 management: metrics: web: server: auto-time-requests: false spring: datasource: username: root url: jdbc:mysql://localhost:3306/zipkin password: 123456 driver-class-name: com.mysql.jdbc.Driver schema: classpath:/mysql.sql //项目启动时候 初始化数据库 initialization-mode: always zipkin: storage: type : mysql mysql: host : localhost port : 3306 username : root password : 123456 //数据库名称 db : zipkin
注意:
启动项目后,会在mysql数据库中建立三张表:zipkin_annotations、zipkin_spans、zipkin_dependencies保存相关的信息,当咱们发起一次请求后,全部的信息都会记录在数据库中:
经过以上的过程就能够持久化追踪信息到数据库了。
本章在上一章的基础之上,结合了Spring Cloud Sleuth和Zipkin,实现了分布式链路追踪解决方案,同时能够根据需求将信息保存在Mysql中,固然咱们还能够保存在其余的存储系统中,如elasticsearch等,须要咱们本身去定义。
----END----
以就是本期的分享,你还能够关注公众号: 程序员笑笑生,关注更多精彩内容!
SpringCloud基础教程(一)-微服务与SpringCloud
SpringCloud基础教程(二)-服务发现 Eureka
SpringCloud基础教程(五)-配置中心热生效和高可用
SpringCloud 基础教程(六)-负载均衡Ribbon
SpringCloud 基础教程(七)-Feign声明式服务调用
SpringCloud 基础教程(八)-Hystrix熔断器(上)
SpringCloud 基础教程(九)-Hystrix服务监控(下)
SpringCloud 基础教程(十一)- Sleuth 调用链追踪简介
SpringCloud 基础教程(十二)-Zipkin 分布式链路追踪系统搭建
更多精彩内容,请期待...
本文由博客一文多发平台 OpenWrite 发布!
个人博客地址兰陵笑笑生,欢迎浏览!