網(wǎng)站建設主要產(chǎn)品網(wǎng)盤資源
前言
微服務鏈路追蹤系列博客,后續(xù)可能會涉及到Brave、Zipkin、Sleuth內(nèi)容的梳理。
Brave
何為Brave?
github地址:https://github.com/openzipkin/brave
Brave是一個分布式追蹤埋點庫。
主要功能:
攔截請求,收集時序數(shù)據(jù),關聯(lián)、傳播追蹤上下文。最后,追蹤數(shù)據(jù)會上報到Zipkin等服務器。
下面介紹Brave的幾個核心功能:
1、Propagation
B3Propagation
Brave使用B3傳播協(xié)議,即在http請求頭中存儲固定字段,來傳遞鏈路信息。如:x-b3-traceId、x-b3-spanId、x-b3-sampled等
舉例:
在整合spring cloud sleuth項目中,針對任一請求,可在請求頭中查看到相應的鏈路追蹤字段信息。
x-b3-traceid:3bc54fac863bedb4
x-b3-spanid:e9d611683cf3613c
x-b3-parentspanid:3bc54fac863bedb4
x-b3-sampled:0
注意:
若B3已有固定字段滿足不了您的需求,還可以通過BaggageField添加自定義業(yè)務字段。
步驟
主要包括兩個重要環(huán)境:Inject(注入)和Extract(提取)。
其中,Inject即將b3字段信息添加到http header中,而Extract正好相反,及從http header中提取相應b3信息。
2、Span
Span,實際記錄每個功能塊執(zhí)行信息的類。
(1)數(shù)據(jù)內(nèi)容
主要包括以下三部分內(nèi)容:
基礎數(shù)據(jù):用于跟蹤樹中節(jié)點的關聯(lián)和界面展示,包括traceId、spanId、parentId、name、timestamp和duration。
name:用于在跟蹤樹節(jié)點的時間條上展示。
timestamp用于記錄調(diào)用的起始時間
duration表示此次調(diào)用的總耗時,在跟蹤樹中將表示成該Span的時間條的長度。
Annotation數(shù)據(jù):用來記錄關鍵事件,只有四種,cs(Client Send)、sr(Server Receive)、ss(Server Send)、cr(Client Receive),所以在Span模型中,Annotation是一個列表,長度最多為4。
每種關鍵事件包含value、timestamp和endpoint,value就是cs、sr、ss和cr中的一種,timestamp表示發(fā)生的時間,endpoint用于記錄發(fā)生的機器(ip)和服務名稱(serviceName)。
BinaryAnnotation數(shù)據(jù):如果需要綁定一些業(yè)務數(shù)據(jù)(日志)的話,可以將數(shù)據(jù)寫入BinaryAnnotation中,它的結(jié)構(gòu)和Annotation數(shù)據(jù)一模一樣,在Span中也是一個列表,這里就不再闡述,但BinaryAnnotation中不宜放太多數(shù)據(jù),不然將導致性能和體驗的下降。
(2)分類
NoopSpan:從不上報Zipkin
RealSpan:可能上報,在finish()后上報
LazySpan:延遲創(chuàng)建Span(當?shù)谝粋€公共方法調(diào)用時)
3、Sample
采樣器,并非所有的請求數(shù)據(jù)都會記錄并上報Zipkin。