天天看點

Spring Cloud(八)使用Zipkin進行分布式鍊路跟蹤

前文回顧:

Spring Cloud(一)Eureka Server-單體及叢集搭建

Spring Cloud(二) 配置Eureka Client

Spring Cloud(三) 熔斷器Hystrix

Spring Cloud(四) API網關Zuul

Spring Cloud(五) Zuul Filter

Spring Cloud(六) 服務網關GateWay 入門

Spring Cloud(七) GateWay 服務化和過濾器

一.簡介

Zipkin 是一個開放源代碼分布式的跟蹤系統,由Twitter公司開源,它緻力于收集服務的定時資料,以解決微服務架構中的延遲問題,包括資料的收集、存儲、查找和展現。

每個服務向zipkin報告計時資料,zipkin會根據調用關系通過Zipkin UI生成依賴關系圖,顯示了多少跟蹤請求通過每個服務,該系統讓開發者可通過一個 Web 前端輕松的收集和分析資料,例如使用者每次請求服務的處理時間等,可友善的監測系統中存在的瓶頸。

Zipkin提供了可插拔資料存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。

二.代碼示例

該項目基于之前部落格中的Spring Cloud 1-4的項目開發

1.pom中添加依賴

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.yfy</groupId>
    <artifactId>study07_zkipin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>study07_zkipin</name>
    <description>Demo project for Spring Boot</description>
​
    <properties>
        <zipkin-version>2.11.8</zipkin-version>
    </properties>
​
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
                <version>2.0.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
                <version>${zipkin-version}</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
                <version>${zipkin-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>
    </dependencies>
           

2.Application啟動類中添加注解

@SpringBootApplication
@EnableZipkinServer
public class Study07ZkipinApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(Study07ZkipinApplication.class, args);
    }
​
}
           

3.配置檔案

server:
  port: 9411
spring:
  application:
    name: zipkin
management:
  metrics:
    web:
      server:
        #避免通路zipkin頁面報java.lang.IllegalArgumentException
        auto-time-requests: false
           

4.微服務配置

在spring-cloud-eureka

spring-cloud-producer

spring-cloud-consumer

gateway-cloud-zuul中配置以下資訊:

spring.sleuth.sampler.probability=1.0
           
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
           

5.測試

  • 啟動spring-cloud-zipkin

通路:http://localhost:9411/zipkin

Spring Cloud(八)使用Zipkin進行分布式鍊路跟蹤
  • 依次啟動

    spring-cloud-eureka

    spring-cloud-producer

    spring-cloud-consumer

    gateway-cloud-zuul

通路對應的接口

http://localhost:9002/hello?name=yfy

http://localhost:9002/world

http://localhost:8888/spring-cloud-consumer/hello/231213?token=12321

http://localhost:8888/spring-cloud-producer/hello?name=yfy&token=11

注:若不調用相應接口對應的服務名不會顯示到選擇框

可以看到依賴關系如下:

Spring Cloud(八)使用Zipkin進行分布式鍊路跟蹤

繼續閱讀