在项目中使用Zipkin--链路追踪

在项目中使用Zipkin--链路追踪

zipkin简介

zipkin基本概念

运行关系图

左边部分代表了客户端分别为:

右边线框内代表了Zipkin的服务端,其中各组件的功能如下:

在项目中使用Zipkin

zipkin-server端

1.导入依赖

2. 编写配置文件

3.创建引导类

zipkin-client端    client需要有多个,本篇只拿一个进行举例。

1.引入依赖

2.编写配置文件

3.创建引导类

4.写一个服务之间相互调用的接口

启动工程查看效果

启动工程打开浏览器访问:http://localhost:9412/

当有服务之间的调用时可以看到详情


zipkin简介

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin分布式跟踪系统就能很好的解决这样的问题。

zipkin基本概念

1.Span:每个服务的处理跟踪是一个Span,可以理解为一个基本的工作单元。

2.Trace:一组Span的集合,表示一条调用链路。举个例子:当前存在服务A调用服务B然后调用服务C,这个A->B->C的链路就是一条Trace,而每个服务例如B就是一个Span,如果在服务B中另起2个线程分别调用了D、E,那么D、E就是B的子Span。Trace结构表示对一次请求的跟踪,一次请求可能由后台的若干服务负责处理,每个服务的处理是一个Span,Span之间有依赖关系,Trace就是树结构的Span集合;

3.Transport:收集的Spans必须从被追踪的服务运输到Zipkin collector,有三个主要的传输方式:HTTP, Kafka和Scribe;

4.Components:有4个组件组成Zipkin:collector,storage,search,web UI

运行关系图

在项目中使用Zipkin--链路追踪

左边部分代表了客户端分别为:

1.InstrumentedClient:使用了Zipkin客户端工具的服务调用方

2.InstrumentedServer:使用了Zipkin客户端工具的服务提供方

3.Non-InstrumentedServer:未使用Trace工具的服务提供方,当然还可能存在未使用工具的调用方

总结:一个调用链路是贯穿InstrumentedClient->InstrumentedServer的,每经过一个服务都会以Span的形式通过Transport把经过自身的请求上报的Zipkin服务端中

右边线框内代表了Zipkin的服务端,其中各组件的功能如下:

1.UI:提供web页面,用来展示Zipkin中的调用链和系统依赖关系等

2.Collector:对各个客户端暴露,负责接受调用数据,支持HTTP、MQ等

3.Storage:负责与各个存储适配后存储数据,支持内存,MySQL,ES等

4.API:为web界面提供查询存储中的数据的接口

在项目中使用Zipkin

zipkin-server端

1.导入依赖

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

        <!--zipkin服务端所需的依赖-->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
            <version>2.12.3</version>
        </dependency>
    </dependencies>

2. 编写配置文件

server:
  port: 9412


#zipkin启动报错无法访问的解决方法
management:
  metrics:
    web:
      server:
        auto-time-requests: false

3.创建引导类

/**
 * @Author: Promsing(张有博)
 * @Date: 2021/7/23 - 10:33
 * @Description: Zipkin的服务端
 * @version: 1.0
 */
@SpringBootApplication
@EnableZipkinServer //zipkin的注解
public class ZipkinApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinApplication.class,args);
    }
}

zipkin-client端 -- client需要有多个,本篇只拿一个进行举例。

1.引入依赖

 <!--Zipkin的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

2.编写配置文件

spring:
  cloud:
  application:
    name: video
  zipkin:
    base-url: http://localhost:9412

3.创建引导类

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

4.写一个服务之间相互调用的接口

使用到openFeign--只是示例,没有业务代码

@ApiOperation(value = "feign测试")
@GetMapping("/queryFeign")
public Result queryFeign(){
     System.out.println("screen通过Feign调取project成功");
     return  Result.build(Result.SUCCESS,"查询成功");
}

其他的zipkin-client端 ,可按照以上四步去做

启动工程查看效果

启动工程打开浏览器访问:http://localhost:9412/

在项目中使用Zipkin--链路追踪

当有服务之间的调用时可以看到详情

在项目中使用Zipkin--链路追踪

 如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。

上一篇:Spring Cloud Sleuth 整合ZipKin 实现分布式链路追踪


下一篇:android 获取手机号