Zipkin实现分布式跟踪

一、Zipkin简介

Zipkin是Sleuth服务跟踪工具的一个扩展。是基于Sleuth实现的可视化服务跟踪数据处理工具。
执行原理
Zipkin实现分布式跟踪_第1张图片
事件类型:
cs - client send 客户端发起请求
cr - client receive 客户端接收响应
ss - server send 服务端发送应答
sr - server receive 服务端接收请求

二、Zipkin实现过程

使用Zipkin来实现收集展示服务跟踪数据时,在默认情况下,Zipkin是使用内存作为跟踪数据存储的,而微服务应用系统中,跟踪数据是非常庞大的,使用内存存储明细不合适。Zipkin提供了若干种数据持久方式,在这里我们使用MySQL作为数据存储。
在整体微服务应用中,可以在微服务上使用Sleuth来收集跟踪数据,并直接发送给Zipkin,这种方式传输效率高,但是在Zipkin服务端宕机的情况下,有跟踪数据丢失的可能,那么使用RabbitMQ作为传输跟踪数据的中间容器就很有必要了。微服务上的Sleuth收集跟踪数据,并封装为消息发送到RabbitMQ,Zipkin服务端监听RabbitMQ并消费消息实现跟踪数据收集、存储、展示等功能,即使Zipkin服务端宕机,跟踪数据也会在RabbitMQ中存储,不会有数据丢失的可能,等Zipkin服务端重新恢复后,可以继续消费RabbitMQ中的跟踪数据消息,并提供后续处理。
结构图如下:

  1. 提供Zipkin的服务端应用

访问Zipkin提供的WEB UI时,推荐使用IP访问,不要使用localhost域名访问。因为Zipkin在使用localhost访问时,可以提供WEB UI,但是在查询服务跟踪数据的时候,可能会有查询不到的情况。
Zipkin技术在结合RabbitMQ和MySQL架构服务端时,需要的依赖如下:

		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			io.zipkin.java
			zipkin-autoconfigure-ui
		
		
		
			org.springframework.cloud
			spring-cloud-starter-sleuth
		
		
		
			org.springframework.cloud
			spring-cloud-stream-binder-rabbit
		
		
		
			org.springframework.cloud
			spring-cloud-sleuth-zipkin-stream
		
		
		
			mysql
			mysql-connector-java
		
		
			org.springframework.boot
			spring-boot-starter-jdbc
		
  1. 添加配置
spring.application.name=e-book-zipkin-server
# 端口,Zipkin推荐使用端口9411。不是必要的
server.port=9411

# RabbitMQ相关配置
spring.rabbitmq.host=192.168.1.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456

# 关闭Sleuth,这里是使用Zipkin实现服务端应用,不需要Sleuth介入
spring.sleuth.enabled=false
# 定义Zipkin的存储为MySQL,Zipkin也提供了其他的存储方式,如:ElasticSearch
zipkin.storage.type=mysql

# 提供Zipkin需要的数据库建表脚本,此脚本由Zipkin提供,具体jar包为:zipkin-storage-mysql-1.28.0.jar
spring.datasource.schema=classpath:/mysql.sql

# 配置数据库连接池,必须提供创建database。Zipkin可以自动建表,不能建库。
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialize=true
spring.datasrouce.continueOnError=true
  1. 添加启动类
/**
 * Zipkin服务端可以不在Eureka注册中心中注册服务,当然注册也没有问题。
 * @EnableZipkinStreamServer - 启动时初始化Zipkin服务端应用,并提供Stream相关支持。
 *  Stream相关支持包括:RabbitMQ访问和数据库访问。
 */
@EnableZipkinStreamServer
@SpringBootApplication
public class ZipkinApplication {
	public static void main(String[] args) {
		SpringApplication.run(ZipkinApplication.class, args);
	}
}
  1. 修改服务应用

使用Sleuth采集跟踪数据的服务应用不需要在代码层面做任何改动,Sleuth是一个高度封装的应用工具,提供依赖资源和配置信息即可。
在所有需要使用Sleuth采集跟踪数据的服务应用统一修改下述内容。
增加下述依赖:

	
			org.springframework.cloud
			spring-cloud-starter-sleuth
		
		
			org.springframework.cloud
			spring-cloud-sleuth-stream
		
		
			org.springframework.cloud
			spring-cloud-stream-binder-rabbit
		
  1. 添加配置文件
# 定义Sleuth采样比例,默认为0.1,即采样10%的跟踪数据,上线时可使用默认值,毕竟跟踪数据采样10%已经足够。
spring.sleuth.sampler.percentage=1
# RabbitMQ相关配置
spring.rabbitmq.host=192.168.1.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456

你可能感兴趣的:(SpringCloud,-,教学)