Spring Cloud Sleuth

2/22/2021 SpringCloud

Spring Cloud Sleuth 分布式请求链路跟踪,随着系统越来越庞大,微服务模块越来越多,各服务之间的调用变得复杂,一个请求的得到的最终结果中间可能调用了很多的服务,任何一个服务请求都有可能发生延迟或错误,从而导致失败,这个时候就需要请求链路跟踪工具来帮我们,理清这次请求调用的完整链路,以及各服务之间所消耗的时间,从而定位问题。

# 给服务添加请求链路跟踪 (opens new window)

  • user-serviceribbon-service添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
1
2
3
4
  • 修改application-yml配置文件
spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 0.1 #设置Sleuth的抽样收集概率
1
2
3
4
5
6

# 整合Zipkin获取及分析日志 (opens new window)

Zipkin是Twitter的一个开源项目,可以用来获取和分析Spring Cloud Sleuth 中产生的请求链路跟踪日志,它提供了Web界面来帮助我们直观地查看请求链路跟踪信息。

SpringBoot 2.0以上版本已经不需要自行搭建zipkin-server,我们可以从该地址下载zipkin-server (opens new window)

  • 启动
java -jar zipkin-server-2.12.9-exec.jar
1
  • 启动eureka-severribbon-serviceuser-service

多次通过ribbon-serivce调用user-service接口,可以在Zipkin界面筛选服务,查看每一次请求,然后进去可以看到这次请求调用的完整链路,以及调用每个服务所耗时间

注意Sleuth为抽样搜集,也就是说不是每次请求都会记录

# 使用Elasticsearch存储跟踪信息 (opens new window)

前面是Zipkin重启后,发现跟踪信息就会丢失了,信息存储与内存中,现需要将信息存储下来,方便日后查看

# STORAGE_TYPE:表示存储类型 ES_HOSTS:表示ES的访问地址
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=localhost:9200 
1
2
  • 结合kibana可视化界面查看每次请求的信息

  • Zipkin 并不能完整的每个请求都记录下来,是抽样收集
  • 重启后,重新调用多次,它一次也搜不到,个人感觉不是很好用
  • 另外elasticsearchkibana只是再docker中启动起来了,但是不知道怎么设置索引,我直接都选择的默认的,查不到任何数据插入进来
  • 多次重新启动报错ERROR: cannot load service names: server error (Internal Server Error),好像是elasticsearch存储数据格式乱了,暂未解决