目录:
- 什么是SpringCloud Sleuth
- 为什么使用SpringCloud Sleuth
- 如何使用SpringCloud Sleuth
什么是SpringCloud Sleuth:
SpringCloud sleuth是一款分布式跟踪框架,它为SpringCloud提供了很好的跟踪解决方案。
为什么使用SpringCloud Sleuth:
在分布式系统中,用户的一次请求可能不仅仅是一个简单的http调用了,可能会涉及到很多不同的服务,而当系统越来越复杂的时候那一次调用可能涉及到十几个,甚至更多个服务。
而当一次请求出现问题的时候,如果没有工具帮助的情况下查起问题来时会非常麻烦。
那在庞杂的系统中,如何快速发现问题,如何判断服务影响范围,如何梳理服务依赖及依赖的合理性,如何分析链路性能问题及实时容量规划?这些问题sleuth都提供了解决方案。
使用目的:耗时分析、可视化错误、链路优化
如何使用SpringCloud Sleuth:
http拦截方式:
1、服务端(启动后可访问http://localhost:7070查看zipkin ui)
)增加maven依赖
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-sleuth</artifactId> 4 </dependency> 5 <dependency> 6 <groupId>io.zipkin.java</groupId> 7 <artifactId>zipkin-server</artifactId> 8 </dependency> 9 <dependency> 10 <groupId>io.zipkin.java</groupId> 11 <artifactId>zipkin-autoconfigure-ui</artifactId> 12 </dependency>
)增加properties
1 spring.application.name=sleuth-server 2 server.port=7070 3 4 # sleuth不上报数据 5 spring.sleuth.enabled=false
)启动类增加@EnableZipkinServer
2、客户端
)增加maven依赖
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-zipkin</artifactId> 4 </dependency>
)增加properties配置
1 # zipkin 2 spring.sleuth.sampler.percentage=1 3 spring.zipkin.base-url=http://localhost:7070/
因为zipkin是基于内存存储的数据,所以当zipkin重启后链路数据会丢失,所以我们需要将调用链的数据持久化(mysql+mq、elasticsearch+mq等等)。
mysql + mq:
1、服务端
)增加maven依赖
1 <!-- rabbitmq 数据采集 --> 2 <dependency> 3 <groupId>io.zipkin.java</groupId> 4 <artifactId>zipkin-autoconfigure-collector-rabbitmq</artifactId> 5 <version>2.3.1</version> 6 </dependency> 7 <!-- mysql 数据分析 --> 8 <dependency> 9 <groupId>io.zipkin.java</groupId> 10 <artifactId>zipkin-storage-mysql</artifactId> 11 <version>1.28.0</version> 12 </dependency> 13 <dependency> 14 <groupId>org.springframework.boot</groupId> 15 <artifactId>spring-boot-starter-jdbc</artifactId> 16 </dependency> 17 <dependency> 18 <groupId>mysql</groupId> 19 <artifactId>mysql-connector-java</artifactId> 20 <version>5.1.47</version> 21 </dependency>
)注入MySQLStorage
1 @Bean 2 public MySQLStorage initMySQLStorage(DataSource datasource) { 3 return MySQLStorage.builder().datasource(datasource).executor(Runnable::run).build(); 4 }
)配置mysql与rabbitmq(properties)
1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 2 spring.datasource.name=zipkin 3 spring.datasource.url=jdbc:mysql://localhost:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false 4 spring.datasource.username=root 5 spring.datasource.password=1234 6 7 zipkin.storage.type=mysql 8 zipkin.collector.rabbitmq.addresses=localhost:5672 9 zipkin.collector.rabbitmq.username=guest 10 zipkin.collector.rabbitmq.password=guest 11 zipkin.collector.rabbitmq.queue=zipkin
2、客户端
)增加rabbitmq依赖
1 <dependency> 2 <groupId>org.springframework.amqp</groupId> 3 <artifactId>spring-rabbit</artifactId> 4 </dependency>
)配置rabbit与zipkin sender type
1 spring.rabbitmq.host=localhost 2 spring.rabbitmq.port=5672 3 spring.rabbitmq.username=guest 4 spring.rabbitmq.password=guest 5 6 # zipkin 7 spring.sleuth.sampler.percentage=1 8 spring.zipkin.base-url=http://localhost:7070/ 9 spring.zipkin.sender.type=rabbit 10 zipkin.rabbitmq.queue=zipkin