Zipkin入门

一、介绍

Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。

二、架构

Zipkin分为两部分:

  • zipkin server
  • zipkin client
    在这里插入图片描述

zipkin server

用来作为数据的采集存储、数据分析与展示。

主要包括四个模块:Collector、Storage、API、UI

  • Collector: 收集器组件,主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储,分析,展示等功能
  • Storage:存储接收或收集过来的数据(支持Memory,MySQL,Cassandra,ElasticSearch…),默认存储在内存
  • API:提供对外的查询接口
  • UI:提供对外的Web界面,通过UI组件用户可以方便而有直观地查询和分析跟踪信息

zipkin client

完成了追踪数据的生成与上报功能

三、基本概念

Annotation

记录某个时间点发生的事件,事件类型有四种:

  • cs(Client Send):客户端发送请求
  • sr(Server Recevied):服务端接收请求开始进行处理
  • ss(Server Send):服务端处理完毕,发送至客户端
  • cr(Cilent Recevied):客户端接收到服务端的响应,请求结束

BinaryAnnotation

提供一些额外信息(比如:sessionID、userID、userIP、异常等),可以将需要的数据以键值对的形式放入到这个字段中

Span

追踪服务调用的基本结构,由一组AnnotationBinaryAnnotation组成,每个服务的处理跟踪是一个Span。
接收到请求后进行处理时,就生成一个Span,如果当前请求是由上游发送过来的请求,则将新建的Span的父节点设置成上一步请求的Span。

Trace

由一组traceId相同Span串联形成一个树状结构,表示一条调用链路。

请求到达分布式系统的入口端点时,生成唯一的标识traceId,在分布式系统内部流转的时候,框架始终保持传递该唯一值

四、服务之间传递的信息结构

Trace的基本信息需在上下游服务之间传递,如下信息是必须的:

  • Trace ID:起始(根)服务生成的TraceID
  • Span ID:调用下游服务时所生成的Span ID
  • Parent Span ID:父Span ID
  • Is Sampled:是否需要采样
  • Flags:告诉下游服务,是否是debug Reqeust

五、服务追踪流程

  1. 应用发起请求,经过Trace框架拦截
  2. 当前调用链的Trace信息添加到HTTP Header中
  3. 记录当前时间戳
  4. 将Trace相关的header信息携带上,发送请求
  5. 调用结束,记录当前花费时间
  6. 以上步骤产生的信息汇集成一个span,把span上传到zipkin的Collector模块
 
┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
│ User Code   │ │ Trace Instrumentation │  │ Http Client │  │ Zipkin Collector │
└─────────────┘ └───────────────────────┘  └─────────────┘  └──────────────────┘
       │                 │                         │                 │
           ┌─────────┐
       │ ──┤GET /foo ├─▶ │ ────┐                   │                 │
           └─────────┘         │ record tags
       │                 │ ◀───┘                   │                 │
                           ────┐
       │                 │     │ add trace headers │                 │
                           ◀───┘
       │                 │ ────┐                   │                 │
                               │ record timestamp
       │                 │ ◀───┘                   │                 │
                             ┌─────────────────┐
       │                 │ ──┤GET /foo         ├─▶ │                 │
                             │X-B3-TraceId: aa │     ────┐
       │                 │   │X-B3-SpanId: 6b  │   │     │           │
                             └─────────────────┘         │ invoke
       │                 │                         │     │ request   │
                                                         │
       │                 │                         │     │           │
                                 ┌────────┐          ◀───┘
       │                 │ ◀─────┤200 OK  ├─────── │                 │
                           ────┐ └────────┘
       │                 │     │ record duration   │                 │
            ┌────────┐     ◀───┘
       │ ◀──┤200 OK  ├── │                         │                 │
            └────────┘       ┌────────────────────────────────┐
       │                 │ ──┤ asynchronously report span     ├────▶ │
                             │                                │
                             │{                               │
                             │  "traceId": "aa",              │
                             │  "id": "6b",                   │
                             │  "name": "get",                │
                             │  "timestamp": 1483945573944000,│
                             │  "duration": 386000,           │
                             │  "annotations": [              │
                             │--snip--                        │
                             └────────────────────────────────┘

六、安装Zipkin服务端

两个方式:

  1. 自己搭建Zipkin服务端
  2. 使用官方编译好的jar包

第一种方法,在网上看了一堆文章,只写了Zipkin的依赖没有提供版本号,结果一直导致依赖失败;写了版本号又因为和SpringBoot版本不兼容导致启动不了服务;
在这里插入图片描述
最后才知道,在Springboot 2.0以后,官方不再推荐自已搭建Zipkin模块,而是推荐使用官方编译好的Jar包
在这里插入图片描述

2.1 下载jar包

zipkin-server-2.12.9-exec

2.2 启动服务

打开cmd,在对应jar存放的目录下输入命令:

java -jar 文件全称

在这里插入图片描述
访问端口9441,显示以下界面代表安装成功
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值