SpringCloud学习笔记(十、SpringCloud Sleuth)

目录:

  • 什么是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
原文地址:https://www.cnblogs.com/bzfsdr/p/11743830.html