zipkin鏈路追蹤

zipkin架構說明

zipkin api

我想本身搞一些知足zipkin格式的日誌,入庫es,而後讓zipkin僅作展現
1.須要瞭解zipkin組件
2,學習zipkin設計原理,什麼時候何地產生日誌 日誌如何聚合存儲
3.zipkin的自身apihtml

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

(1)Trace:它是由一組有相同Trace ID的Span串聯造成一個樹狀結構。爲了實現請求跟蹤,當請求請求到分佈式系統的入口端點時,只須要服務跟蹤框架爲該請求建立一個惟一的跟蹤標識(即前文提到的Trace ID),同時在分佈式系統內部流轉的時候,框架始終保持傳遞該惟一標識,直到返回請求爲止,咱們經過它將全部請求過程當中的日誌關聯起來;
(2)Span:它表明了一個基礎的工做單元,例如服務調用。爲了統計各處理單元的時間延遲,當前請求到達各個服務組件時,也經過一個惟一標識(即前文提到的Span ID)來標記它的開始、具體過程以及結束。經過span的開始和結束的時間戳,就能統計該span的時間延遲,除此以外,咱們還能夠獲取如事件名稱、請求信息等元數據。
(3)Annotation:它用於記錄一段時間內的事件。內部使用的最重要的註釋是:java

cs - Client Sent - 客戶端發送一個請求,這個註解描述了這個Span的開始。
sr - Server Received - 服務端得到請求並準備開始處理它,其中(sr – cs) 時間戳即可獲得網絡傳輸的時間。
ss - Server Sent (服務端發送響應)– 該註解代表請求處理的完成(當請求返回客戶端), (ss – sr)時間戳就能夠獲得服務器請求的時間。
cr - Client Received (客戶端接收響應)- 代表此時Span的結束,(cr – cs)時間戳即可以獲得整個請求所消耗的時間。

經過http header方式傳輸traceid spanid等segmentfault

注意:時間點計算
    sr-cs:網絡延遲
    ss-sr:邏輯處理時間
    cr-cs:整個流程時間

一個例子

上圖表示一請求鏈路,一條鏈路經過Trace Id惟一標識,Span標識發起的請求信息,各span經過parent id 關聯起來,如圖

整個鏈路的依賴關係以下:
api

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日誌採集器

相關文章
相關標籤/搜索