Zipkin原理及实践

目录

概况

整体架构

组件说明

Spring Cloud Sleuth

Sleuth 术语

spring-cloud-sleuth-zipkin

核心源码解析

结合rabbitmq

zipkin服务端

结合日志TraceID实现链路追踪实现


概况

Zipkin是Twitter开源而来。

Zipkin官网:https://zipkin.io/pages/architecture.html

基本思想:在服务调用的请求和响应中加入trace ID,标明上下游请求的关系。利用这些信息,可视化地分析服务调用链路和服务间的依赖关系,保存下来进行展示。

整体架构

image

组件说明

•  Instrumented client和Instrumented server需要集成在分布式系统的具体服务中,采集跟踪信息,调用Transport,把跟踪信息发送给Zipkin的Server。

• Transport是Zipkin对外提供的接口,支持HTTP、Kafka、Scribe等通信方式。

•  Zipkin即Zipkin server,主要包括四个模块:

Collector: 用于接收各个应用服务传输的追踪信息;

Storage:Zipkin的后端存储,支持In-Memory、MySql、Elasticsearch和Cassandra;

API:提供对外的查询接口;

UI:提供对外的Web界面。

支持多种语言集成:java、js、go、Python等

Http Tracing的时序图

image

Spring Cloud Sleuth

Sleuth 术语

  • span(跨度):基本工作单元。例如,在一个新建的 span 中发送一个 RPC 等同于发送一个回应请求给 RPC,span 通过一个 64 位 ID 唯一标识,trace 以另一个 64 位 ID 表示,span 还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span 的 ID,以及进度 ID(通常是 IP 地址)。span 在不断的启动和停止,同时记录了时间信息,当你创建了一个 span,你必须在未来的某个时刻停止它。
  • trace(追踪):一组共享“root span”的 span 组成的树状结构成为 trace。trace 也用一个 64 位的 ID 唯一标识,trace 中的所有 span 都共享该 trace 的 ID。
  • annotation(标注):用来及时记录一个事件的存在,一些核心 annotations 用来定义一个请求的开始和结束。
    1)、CS,即 Client Sent,客户端发起一个请求,这个 annotion 描述了这个 span 的开始。
    2)、SR,即 Server Received,服务端获得请求并准备开始处理它,如果将其 SR 减去 CS 时间戳便可得到网络延迟。
    3)、SS,即 Server Sent,注解表明请求处理的完成(当请求返回客户端),如果 SS 减去 SR 时间戳便可得到服务端需要的处理请求时间。
    4)、CR,即 Client Received,表明 span 的结束,客户端成功接收到服务端的回复,如果 CR 减去 CS 时间戳便可得到客户端从服务端获取回复的所有所需时间。

下图演示了请求依次经过 SERVICE1 -> SERVICE2 -> SERVICE3 & SERVICE4 时,span、trace、annotation 的变化:

image.png

spring-cloud-sleuth-zipkin

spring-cloud-sleuth-zipkin来方便集成zipkin实现(指的是Zipkin Client,而不是Zipkin服务器)。可以通过spring-cloud-starter-zipkin依赖来引入,再通过spring配置sleuth及zipkin。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
spring:
    zipkin:
        base-url: http://localhost:9411
        sender:
            type: web
    sleuth:
        sampler:
          probability : 1     # 1表示百分百进行采样

核心源码解析

https://www.shared-code.com/article/107

结合rabbitmq

在默认情况下,Zipkin客户端和Server之间是使用HTTP请求的方式进行通信(即同步的请求方式),在

网络波动,Server端异常等情况下可能存在信息收集不及时的问题。Zipkin支持与rabbitMQ整合完成异

步消息传输。

zipkin:
    sender:
      type: RABBIT   #WEB方法为http, RABBIT为rabbit
    enabled: true
    discovery-client-enabled: false #为解析baseurl方式,true为lb:xxx-server
    baseUrl: http://localhost:9411/  
    compression: # 压缩
      enabled: true
    locator:    # 通过nacos动态获取地址
      discovery:
        enabled: true
    rabbitmq: # 使用指定的队列
      queue: xxx_zipkin

image.png

zipkin服务端

单独部署,启动后直接访问:http://localhost:9411 

image.png

存储追踪数据

mysql、es、kafka等,生成上建议es或kafka。

可用mysql,根据Zipkin服务端提供脚本,直接初始化再启动。

结合日志TraceID实现链路追踪实现

在logback.xml中springProperty配置 [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]输出。

image.png

在网关中通过Interceptor将Zipkin接口中TraceId加入header中,可通过页面查看生成的traceid。

image.png

可以在zipkin中直接通过traceId查找

image.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值