天天看点

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进行分布式链路跟踪

继续阅读