天天看點

Springboot 整合 SpringCloud元件-ZipKin &Sleuth 服務鍊路追蹤 (五)

來到這一篇, 我們已經完成了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:

Springboot 整合 SpringCloud元件-ZipKin &Sleuth 服務鍊路追蹤 (五)

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.cloud</groupId>
  <artifactId>zipkin-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>zipkin-server</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>io.zipkin.java</groupId>
      <artifactId>zipkin-server</artifactId>
      <version>2.11.8</version>
    </dependency>
    <dependency>
      <groupId>io.zipkin.java</groupId>
      <artifactId>zipkin-autoconfigure-ui</artifactId>
      <version>2.11.8</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      <version>2.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>      

然後是application.yml:

server:
  port: 9411
spring:
  application:
    name: zipkin-server
management:
  metrics:
    web:
      server:
        auto-time-requests: false
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
      preferIpAddress: true
      instance-id: ${spring.cloud.client.ip-address}:${server.port}      

到這裡,其實ZipKin Server這一段我們已經完成了。

我們可以将項目跑起來(記得前提eureka注冊中心是正常運作的,我們有做注冊),通路 ​​http://localhost:9411/​​  :

Springboot 整合 SpringCloud元件-ZipKin &amp;Sleuth 服務鍊路追蹤 (五)

ZipKin服務端是正常部署運作了,那麼我們需要在各個微服務上也整合這個元件,這樣才能将微服務與ZipKin Server互通。

我們在網關服務,gateway的pom.xml導入依賴:

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
      <version>2.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zipkin</artifactId>
      <version>2.0.0.RELEASE</version>
    </dependency>      

 在application.yml上添加相關的配置項後:

server:
  port: 8081

spring:
  application:
    name: gateway-service
  zipkin:
    base-url: http://localhost:9411
    sender:
      type: web
  sleuth:
    sampler:
#采樣100%
      probability: 1.0
  cloud:
      gateway:
        discovery:
          locator:
            enabled: false
#開啟小寫驗證,預設feign根據服務名查找都是用的全大寫
            lowerCaseServiceId: true
        routes:
        - id: client-test
          uri: lb://CLIENT-TEST
          predicates:
            - Path=/testclient/**
          filters:
            - StripPrefix=1
        - id: service-feign
          uri: lb://FEIGN
          predicates:
            - Path=/service-feign/**
          filters:
            - StripPrefix=1
eureka:
  instance:
    preferIpAddress: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    service-url:
      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:

Springboot 整合 SpringCloud元件-ZipKin &amp;Sleuth 服務鍊路追蹤 (五)

可以看到有相關接口調用資訊,不過這是通過網關通路的client-test服務,我們再來個涉及多一點服務的,

我們通過 網關 調用 Feign服務 然後Feign服務 調用 CLIENT-TEST 服務,我們再來看看相關的跟蹤資訊:

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

Springboot 整合 SpringCloud元件-ZipKin &amp;Sleuth 服務鍊路追蹤 (五)

可以點進去檢視更加具體的詳情:

Springboot 整合 SpringCloud元件-ZipKin &amp;Sleuth 服務鍊路追蹤 (五)

繼續閱讀