sleuth+zipkin+kafka+elasticsearch全链路跟踪集成(附github地址)

3,214 阅读3分钟

Zipkin的介绍以及整合实现

主要介绍如何在spring cloud项目中使用zipkin。以及将调用链路信息通过kafka存储到elasticsearch中,最终可以通过zipkin的ui查看调用链路信息。

核心概念以及原理介绍

traceId:

一次请求全局只有一个traceId。用来在海量的请求中找到同一链路的几次请求。比如servlet服务器接收到用户请求,调用dubbo服务,然后将结果返回给用户,整条链路只有一个traceId。开始于用户请求,结束于用户收到结果。

spanId:

一个链路中每次请求都会有一个spanId。例如一次rpc,一次sql都会有一个单独的spanId从属于traceId。

Zipkin的工作过程

当用户发起一次调用时,Zipkin 的客户端会在入口处为整条调用链路生成一个全局唯一的 trace id,并为这条链路中的每一次分布式调用生成一个 span id。span 与 span 之间可以有父子嵌套关系,代表分布式调用中的上下游关系。span 和 span 之间可以是兄弟关系,代表当前调用下的两次子调用。一个 trace 由一组 span 组成,可以看成是由 trace 为根节点,span 为若干个子节点的一棵树。

Zipkin 会将 trace 相关的信息在调用链路上传递,并在每个调用边界结束时异步的把当前调用的耗时信息上报给 Zipkin Server。Zipkin Server 在收到 trace 信息后,将其存储起来。随后 Zipkin 的 Web UI 会通过 API 访问的方式从存储中将 trace 信息提取出来分析并展示。

大致流程图

zipkin官方图片

屏幕快照 2019-09-05 下午2.19.10.png

实现步骤

一、本地安装启动依赖的中间件

  1. rabbitmq安装启动
  2. zookeeper安装启动
  3. kafka安装启动
  4. elasticsearch安装启动
  5. zipkin-server安装启动

二、demo项目集成和启动

项目中集成以下配置:

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-zipkin</artifactId>
	</dependency>

项目使用的版本:

SpringBoot: 2.1.4.RELEASE

SpringCloud: Greenwich.SR1

启动步骤:

  1. 启动eureka
  2. 启动waiter-service
  3. 启动barista-service
  4. 启动customer-service

三、调用zipkin UI界面

访问zipkin:http://localhost:9411/zipkin/

根据条件查询全部链路
依赖关系
单个链路分析
es里存储的信息

项目地址

github.com/yclxiao/sc-…

遇到的问题

主要是是用外部存储之后,zipkin的ui界面,无法显示调用依赖信息,解决方式:主要通过zipkin-dependencies.jar来解决

  1. 下载zipkin-dependencies.jar,地址:https://repo1.maven.org/maven2/io/zipkin/dependencies/zipkin-dependencies/2.3.2/
  2. zipkin-dependencies实则是个可执行的jar文件,有个main入口,执行时,相当于跑了一次任务,生成了对应的依赖关系,存储到了elasticsearch中,下次如果还需要重新生成,在执行此命令: STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200 java -jar zipkin-dependencies-2.3.2.jar
  3. 同时可以在elasticsearch中查看到新的依赖关系的索引

解决链接:

Zinkin进阶篇-Zipkin-dependencies的应用

zipkin-dependencies全局调用链生成(三)

参考链接

分布式-zipkin+springboot链路追踪

Spring Cloud实战系列(七) - 服务链路追踪Spring Cloud Sleuth

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch【Finchley 版】

Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】

Zipkin — 微服务链路跟踪.

使用Spring Cloud Sleuth、Zipkin、Kafka、Elasticsearch实现分布式追踪

分布式调用追踪系统Zipkin集成

SpringCloud(Finchley)整合sleuth、zipkin、kafka、es