基于sleuth和zipkin的Spring-Cloud链路跟踪

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CL_YD/article/details/86580982

基于sleuth和zipkin的Spring-Cloud链路跟踪

Sleuth

Zipkin

  • zipkin同样是基于google dapper paper实现的,也是一个分布式链路跟踪系统。

  • zipkin可以分析Sleuth收集的Span信息,做一个链路、错误和依赖关系的可视化。

  • 除了zipkin以外,还可以自己通过其他日志采集和分析系统自定义处理方式,比如logback+Logstash+Kibana

slueth默认通过HTTPSpan信息发送到zipkin,可以依赖KafkarabbitMQ等消息中间件自动化配置,达到通过消息中间件发送到zipkin的目的,以减少链路跟踪系统对业务服务的压力。

  • sleuth默认配置中,一个Span被发送到Zipkin的几率只有10%(0.1),这个配置可以修改。

Zipkin-Server

eureka-server类似,每个客户端服务必须把自己的Span信息主动发送到Zipkin,因此第一步先搭建一个zipkin-server提供给希望被采集Span的服务使用。

  • 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>
     
        <groupId>com.enmo.dbaas</groupId>
        <artifactId>dbaas-zipkin-server</artifactId>
        <version>1.0-SNAPSHOT</version>
     
        <name>dbaas-zipkin-server</name>
        <url>http://www.example.com</url>
     
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.10.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
     
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <spring-cloud.version>Dalston.SR1</spring-cloud.version>
        </properties>
     
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
     
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
            </dependency>
     
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
            </dependency>
        </dependencies>
     
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
     
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    
  • application.properties:

    server.port=9411
     
    spring.application.name=dbaas-zipkin-server
    eureka.client.service-url.defaultZone=http://192.168.20.61:8761/eureka/
    eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}
    eureka.instance.prefer-ip-address=true
     
    # zipkin 本身并不发送span
    spring.zipkin.enabled=false
    
  • ZipkinServerApplication.java

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

配置完毕后即可启动zipkin-server。

Zipkin-Client

eureka-client类似,希望发送spanzipkin的各个业务服务需要引用sleuth收集span信息,引用zipkin自动配置默认通过HTTP方式,才可以将span信息发送到zipkin-server

  • pom.xml
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
     
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    
  • application.properties:
    # zipkin
    # 打开zipkin discovery
    spring.zipkin.locator.discovery.enabled=true
    # 指定zipkin-server 地址
    spring.zipkin.baseUrl=http://192.168.20.62:9411/
    # 指定span采集概率
    spring.sleuth.sampler.percentage=1.0
    # 指定不采集的路径正则
    #spring.sleuth.web.skipPattern=(^cleanup.*)
    

所有服务配置完毕并成功启动就会自动加入zipkin链路跟踪。

Zipkin-Ui

打开zipkin-server的web页面(192.168.20.62:9411):
在这里插入图片描述
页面上的筛选和排序点点就会了,哪个Annotation Query可以点击某一个trace后再点击一个span查看有哪些元数据,然后根据这些元数据查询:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
依赖关系非常清楚:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/CL_YD/article/details/86580982