Zipkin

Dapper,大规模分布式系统的跟踪系统

動機
解決方式
Dapper 2010

Quickstart

1
2
3
git clone https://github.com/openzipkin/docker-zipkin
cd docker-zipkin
docker-compose up

zipkin web: host:8080
zipkin collector: host:8086

詳細請看docker compose

架構


術語

Annotation: 關於 時間(timestamp) 服務(service) host 的字串資料

  • Annotation
    • cs - Client Start.
    • sr - Server Receive.
    • ss - Server Send.
    • cr - Client Recieve.
  • BinaryAnnotation : 沒有時間元素,他們代表額外的 RPC 資訊

Annotation

Span: 代表一個特定的方法呼叫,由一組(set) annotation 組成,並且有 名稱 及 ID

Span

Trace: 紀錄同一個 Request 的一組 span

Trace


DEMO

示意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rootSpan := zipkin.NewSpan("192.168.99.100:9410", "AService", "Endpoint a1", newID(), newID(), newID())
rootCallerSpan := zipkin.NewSpan("192.168.99.100:9410", "AService", "Endpoint a1", rootSpan.TraceID(), newID(), rootSpan.SpanID())
calleeSpan := zipkin.NewSpan("192.168.99.100:9411", "BService", "Endpoint b2", rootCallerSpan.TraceID(), rootCallerSpan.SpanID(), rootCallerSpan.ParentSpanID())

rootSpan.Annotate("sr")
time.Sleep(1 * time.Second)
rootCallerSpan.Annotate("cs")
calleeSpan.Annotate("sr")
time.Sleep(2 * time.Second)
calleeSpan.Annotate("ss")
rootCallerSpan.Annotate("cr")
time.Sleep(1 * time.Second)
rootSpan.Annotate("ss")

collector.Collect(rootSpan)
collector.Collect(rootCallerSpan)
collector.Collect(calleeSpan)

查詢頁

Root Span
Sub Span


官方 DEMO


相關

Dapper,大规模分布式系统的跟踪系统
Video
slide