1 引言

在整个微服务架构中,微服务很多,一个请求可能需要调用很多很多的服务,最终才能完成一个功能,如果说,整个功能出现了问题,在这么多的服务中,如何去定位到问题的所在点,出现问题的原因是什么。

  • Sleuth可以获得到整个服务链路的信息。
  • Zipkin通过图形化界面去看到信息。
  • Sleuth将日志信息存储到数据库中。

image.png

2 Sleuth的使用

导入依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-sleuth</artifactId>
  4. </dependency>

编写配置文件

  1. logging:
  2. level:
  3. org.springframework.web.servlet.DispatcherServlet: DEBUG

[OPEN-USER-v1,ebb3cc2e66f86a7a,bd37765364975051,true]

  1. SEARCH:服务名称
  2. ebb:总链路id
  3. bd3:当前服务的链路id
  4. false:不会将当前的日志信息,输出其他系统中

3 Zipkin的使用

搭建Zipkin的web工程 https://zipkin.io/

  1. version: "3.1"
  2. services:
  3. zipkin:
  4. image: daocloud.io/daocloud/zipkin:latest
  5. restart: always
  6. container_name: zipkin
  7. ports:
  8. - 9411:9411
  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-zipkin</artifactId>
  4. </dependency>

编写配置文件

  1. #指定服务的名称
  2. spring:
  3. sleuth:
  4. sampler:
  5. probability: 1 # 百分之多少的sleuth信息需要输出到zipkin中(0.5 0.01)
  6. zipkin:
  7. base-url: http://192.168.199.109:9411/ # 指定zipkin的地址

测试

4 整合RabbitMQ

导入RabbitMQ依赖
修改配置文件

  1. spring:
  2. zipkin:
  3. sender:
  4. type: rabbit

修改Zipkin的信息

  1. version: "3.1"
  2. services:
  3. zipkin:
  4. image: daocloud.io/daocloud/zipkin:latest
  5. restart: always
  6. container_name: zipkin
  7. ports:
  8. - 9411:9411
  9. environment:
  10. - RABBIT_ADDRESSES=192.168.199.109:5672
  11. - RABBIT_USER=test
  12. - RABBIT_PASSWORD=test
  13. - RABBIT_VIRTUAL_HOST=/test

5 Zipkin存储数据到ES

重新修改zipkin的yml文件

  1. version: "3.1"
  2. services:
  3. zipkin:
  4. image: daocloud.io/daocloud/zipkin:latest
  5. restart: always
  6. container_name: zipkin
  7. ports:
  8. - 9411:9411
  9. environment:
  10. - RABBIT_ADDRESSES=192.168.199.109:5672
  11. - RABBIT_USER=test
  12. - RABBIT_PASSWORD=test
  13. - RABBIT_VIRTUAL_HOST=/test
  14. - STORAGE_TYPE=elasticsearch
  15. - ES_HOSTS=http://192.168.199.109:9200