Springboot 整合 SpringCloud组件-ZipKin &Sleuth 服务链路追踪 (五)

喜欢ヅ旅行 2021-12-15 00:27 395阅读 0赞

来到这一篇, 我们已经完成了SpringCloud大部分核心组件的整合,那么我们接下来就整合ZipKin组件,

什么是服务链路追踪,作用是什么?

我简单表述下,就是我们可以通过整合这个组件,能看到所有微服务直接的调用关系,所有接口的访问详情,包括节点、耗时等等信息,就是一种对整个分布式微服务架构提供监控分析的功能。

PS:

在整合zipkin的前提,我必须先告诉大家,自从springboot 2.0后,其实官方提供了在ZipKin Server服务的jar,直接下载运行即可:

地址:https://zipkin.io/pages/quickstart , 找到latest release 进行下载。

Windows 环境,打开cmd java -jar zipkin-server-xxx.jar 启动, 访问 http://localhost:9411/ ,能出现网页证明已经成功部署运行。

但是在这篇文章了,是从零整合,也就是我们将会自己创建一个Springboot项目,完成整合ZipKin &Sleuth 组件 。

接下来开始:

我们创建一个springboot项目,起名zipkin-server:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70

pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.cloud</groupId>
  12. <artifactId>zipkin-server</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>zipkin-server</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>io.zipkin.java</groupId>
  26. <artifactId>zipkin-server</artifactId>
  27. <version>2.11.8</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>io.zipkin.java</groupId>
  31. <artifactId>zipkin-autoconfigure-ui</artifactId>
  32. <version>2.11.8</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.cloud</groupId>
  36. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  37. <version>2.0.0.RELEASE</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-starter-test</artifactId>
  42. <scope>test</scope>
  43. </dependency>
  44. </dependencies>
  45. <build>
  46. <plugins>
  47. <plugin>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-maven-plugin</artifactId>
  50. </plugin>
  51. </plugins>
  52. </build>
  53. </project>

然后是application.yml:

  1. server:
  2. port: 9411
  3. spring:
  4. application:
  5. name: zipkin-server
  6. management:
  7. metrics:
  8. web:
  9. server:
  10. auto-time-requests: false
  11. eureka:
  12. client:
  13. serviceUrl:
  14. defaultZone: http://localhost:8761/eureka/
  15. instance:
  16. preferIpAddress: true
  17. instance-id: ${spring.cloud.client.ip-address}:${server.port}

到这里,其实ZipKin Server这一段我们已经完成了。

我们可以将项目跑起来(记得前提eureka注册中心是正常运行的,我们有做注册),访问 http://localhost:9411/ :

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70 1

ZipKin服务端是正常部署运行了,那么我们需要在各个微服务上也整合这个组件,这样才能将微服务与ZipKin Server互通。

我们在网关服务,gateway的pom.xml导入依赖:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-sleuth</artifactId>
  4. <version>2.0.0.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-zipkin</artifactId>
  9. <version>2.0.0.RELEASE</version>
  10. </dependency>

在application.yml上添加相关的配置项后:

  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: gateway-service
  6. zipkin:
  7. base-url: http://localhost:9411
  8. sender:
  9. type: web
  10. sleuth:
  11. sampler:
  12. #采样100%
  13. probability: 1.0
  14. cloud:
  15. gateway:
  16. discovery:
  17. locator:
  18. enabled: false
  19. #开启小写验证,默认feign根据服务名查找都是用的全大写
  20. lowerCaseServiceId: true
  21. routes:
  22. - id: client-test
  23. uri: lb://CLIENT-TEST
  24. predicates:
  25. - Path=/testclient/**
  26. filters:
  27. - StripPrefix=1
  28. - id: service-feign
  29. uri: lb://FEIGN
  30. predicates:
  31. - Path=/service-feign/**
  32. filters:
  33. - StripPrefix=1
  34. eureka:
  35. instance:
  36. preferIpAddress: true
  37. instance-id: ${spring.cloud.client.ip-address}:${server.port}
  38. client:
  39. service-url:
  40. defaultZone: http://localhost:8761/eureka/

这样网关服务已经整合Zipkin&Sleuth 完成;

同样,我们在client-test服务实例和feign服务实例都做一样的操作,导入相关依赖&yml配置文件添加对应的配置项;

我们来通过网关访问下client-test服务的接口,http://localhost:8081/testclient/haveatry?name=1323 ;

然后看看http://localhost:9411/ ,点击Find Traces:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70 2

可以看到有相关接口调用信息,不过这是通过网关访问的client-test服务,我们再来个涉及多一点服务的,

我们通过 网关 调用 Feign服务 然后Feign服务 调用 CLIENT-TEST 服务,我们再来看看相关的跟踪信息:

http://localhost:8081/service-feign/feignTest?name=JCccc

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70 3

可以点进去查看更加具体的详情:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70 4

我们开可以点击Dependencies,可以看到接口调用整个过程涉及到的微服务关系:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw_size_16_color_FFFFFF_t_70 5

OK,整合ZipKin &Sleuth 服务链路追踪就到此完毕。

发表评论

表情:
评论列表 (有 0 条评论,395人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringCloud 服务追踪Sleuth

    微服务架构是通过业务来划分服务的,对外暴露的接口,可能需要很多个服务协同才能完成一个接口功能,如果链路上任何一个服务出现问题,都会形成导致接口调用失败。此时查找出现问题的微服务