• [svc]zipkin链路追踪


    zipkin架构说明

    zipkin api

    我想自己搞一些满足zipkin格式的日志,入库es,然后让zipkin仅做展示
    1.需要了解zipkin组件
    2,学习zipkin设计原理,何时何地产生日志 日志如何聚合存储
    3.zipkin的自身api

    3个主要概念 各个字段的用途

    (1)Trace:它是由一组有相同Trace ID的Span串联形成一个树状结构。为了实现请求跟踪,当请求请求到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识(即前文提到的Trace ID),同时在分布式系统内部流转的时候,框架始终保持传递该唯一标识,直到返回请求为止,我们通过它将所有请求过程中的日志关联起来;
    (2)Span:它代表了一个基础的工作单元,例如服务调用。为了统计各处理单元的时间延迟,当前请求到达各个服务组件时,也通过一个唯一标识(即前文提到的Span ID)来标记它的开始、具体过程以及结束。通过span的开始和结束的时间戳,就能统计该span的时间延迟,除此之外,我们还可以获取如事件名称、请求信息等元数据。
    (3)Annotation:它用于记录一段时间内的事件。内部使用的最重要的注释是:

    cs - Client Sent - 客户端发送一个请求,这个注解描述了这个Span的开始。
    sr - Server Received - 服务端获得请求并准备开始处理它,其中(sr – cs) 时间戳便可得到网络传输的时间。
    ss - Server Sent (服务端发送响应)– 该注解表明请求处理的完成(当请求返回客户端), (ss – sr)时间戳就可以得到服务器请求的时间。
    cr - Client Received (客户端接收响应)- 表明此时Span的结束,(cr – cs)时间戳便可以得到整个请求所消耗的时间。
    

    通过http header方式传输traceid spanid等

    注意:时间点计算
        sr-cs:网络延迟
        ss-sr:逻辑处理时间
        cr-cs:整个流程时间
    

    一个例子

    上图表示一请求链路,一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来,如图

    整个链路的依赖关系如下:

    sr-cs 得到请求发出延迟
    ss-sr 得到服务端处理延迟
    cr-cs 得到真个链路完成延迟
    
    
    注意:时间点计算
        sr-cs:网络延迟
        ss-sr:逻辑处理时间
        cr-cs:整个流程时间
    

    日志格式

    zipkin官网的一个流程图

    官网翻译

    Instrumented client:被装配的客户端
    Non-Instrumented server:没被装配的服务端
    Instrumented server:被装配的服务端
    

    你所在平台是否已经有现成的装配库,可以查看:现有的装配库

    ┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
    │ 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--                        │
                                 └────────────────────────────────┘
    

    facebook已放弃的scribe日志采集器

  • 相关阅读:
    【目录】processing
    【目录】Qt
    【目录】python
    【目录】linux
    【目录】多线程
    【目录】Leetcode
    【leetcode】Restore IP Addresses (middle)
    linux c编程訪问数据库
    『Spring.NET+NHibernate+泛型』框架搭建之Model(二)
    hdu1316(大数的斐波那契数)
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/10256676.html
Copyright © 2020-2023  润新知