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