Spring Cloud Sleuth为Spring Cloud提供了分布式跟踪的解决方案
Zipkin是分布式跟踪系统,主要功能是收集系统的时序数据,从而追踪微服务框架的系统延时等问题。
## 跟踪方式
一种采用原生的sleuth,是http方式。zipkin是其中一种实现方式
一种采用异步的方式,结合kafaka/rabbitmq等第三方中间件实现,提高效率
## 数据存储方式
mysql
Elasticsearch
cassandra
in-momery
(每种方式依赖的jar不同)
==》使用http的方式接受消息(zipkin)---Sleuth-server
1、添加依赖
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
</dependency>
2、启动类添加注解 @EnableZipkinServer
3、配置文件.yml 添加 server.port=9411
-------------------------------------------------------------------------------
微服务整合Zipkin
1、添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
2、配置文件
==》使用中间件接受消息(rabbitMQ)------Sleuth-server
1、添加依赖
<!-- 采用中间件的形式跟踪消息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
</dependency>
2、启动类中添加注解 @EnableZipkinStreamServer
3、修改配置文件
server.port=9411
#rabbit config
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
-------------------------------------------------------------------------------
微服务整合中间件(XXXX-service)
1、添加依赖
<!-- 采用中间件来接受收集跟踪消息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
2、配置文件
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
=======================================================================
==》存储跟踪数据(mysql、Elasticsearch、cassandra、in-momery等)---Sleuth-server
1、添加依赖
<!--保存到数据库需要如下依赖 不同的后端存储对应相应的依赖 -->
<!-- MySql -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-mysql</artifactId>
</dependency>
<!-- Elasticsearch -->
<dependency>
<groupId>io.zipkin.java</groupId> -
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>1.24.0</version>
<optional>true</optional>
</dependency>
<!-- cassandra-->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-storage-cassandra</artifactId>
<version>${zipkin.version}</version>
<scope>test</scope>
</dependency>
2、配置文件中添加:
#elasticsearch config
#将跟踪数据存储到Elasticsearch中
zipkin.storage.type=elasticsearch
zipkin.storage.elasticsearch.hosts=127.0.0.1:9200
zipkin.storage.elasticsearch.cluster=elasticsearch
zipkin.storage.elasticsearch.index=zipkin
zipkin.storage.elasticsearch.index-shards=5
zipkin.storage.elasticsearch.index-replicas=1
#mysql config
#将跟踪数据存储到Mysql中
zipkin.storage.type=mysql
spring.datasource.schema=classpath:/mysql.sql
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.initialize=true
spring.datasource.continueOnError=true
spring.sleuth.enabled=false