Zipkin分布式任務(wù)追蹤

zipkin簡介
Zipkin 是一款開源的分布式實時數(shù)據(jù)追蹤系統(tǒng)详幽,由基于 Google Dapper 的論文設(shè)計而來厌小,由 Twitter 公司提供開源實現(xiàn)恢共,主要功能是聚集來自各個異構(gòu)系統(tǒng)的實時監(jiān)控數(shù)據(jù),和微服務(wù)架構(gòu)下的接口直接的調(diào)用鏈路和系統(tǒng)延時問題璧亚。


Zipkin 提供了自己的UI讨韭,應(yīng)用將自己的監(jiān)控數(shù)據(jù)報告給zipkin脂信,由Zipkin 匯集并提供關(guān)聯(lián)圖展示,Zipkin可以追蹤請求調(diào)用鏈路透硝。Zipkin 以 Trace 的結(jié)構(gòu)表示一次請求的追蹤狰闪,又把每個Trace拆分為若干個有依賴關(guān)系的 Span,在微服務(wù)架構(gòu)中濒生,一次用戶的請求可能會被后臺的若干個服務(wù)處理埋泵,這完整的一次用戶請求可以一條調(diào)用鏈路Trace,每個調(diào)用處理請求的服務(wù)可以理解為一個Span(如API服務(wù))罪治,這個服務(wù)也可能繼續(xù)調(diào)用其他的服務(wù)丽声,因此形成一個Span的樹形結(jié)構(gòu),以體現(xiàn)服務(wù)間的調(diào)用關(guān)系觉义。

Zipkin 的用戶界面除了可以查看 Span 的依賴關(guān)系之外雁社,還以瀑布圖的形式顯示了每個 Span 的耗時情況,可以一目了然的看到各個服務(wù)的性能狀況晒骇。打開每個 Span霉撵,還有更詳細的數(shù)據(jù)以鍵值對的形式呈現(xiàn),而且這些數(shù)據(jù)可以在裝備應(yīng)用的時候自行添加洪囤。
spring Cloud Sleuth是對Zipkin的一個封裝徒坡,對于Span、Trace等信息的生成瘤缩、接入HTTP Request喇完,以及向Zipkin Server發(fā)送采集信息等全部自動完成。
Spring Cloud Sleuth的簡介
以下是Spring Cloud Sleuth的概念圖

在Spring Cloud Sleuth的封裝中款咖,Zipkin分為兩端何暮,一個是Zipkin服務(wù)端奄喂,一個是Zipkin客戶端铐殃,客戶端也就是微服務(wù)的應(yīng)用, 客戶端會配置服務(wù)端的url地址跨新,一旦發(fā)生服務(wù)間的調(diào)用的時候富腊,會被配置在微服務(wù)里面的Sleuth的監(jiān)聽器監(jiān)聽,并生成相應(yīng)的 Trace 和 Span 信息寫進http報文頭里面域帐,并同時向Zipkin服務(wù)端上傳這些信息赘被,如圖所示。

主要方式有兩種肖揣,一種是消息總線的方式如RabbitMq發(fā)送民假,還有一種是http報文的方式發(fā)送,向 Zipkin 服務(wù)端發(fā)送gzip的數(shù)據(jù)包龙优,服務(wù)端接收到gzip的數(shù)據(jù)包進行解析羊异,根據(jù)每個調(diào)用鏈路匯總成調(diào)用鏈路的信息,這里注意,每個 Zipkin Client 里面如果設(shè)置了登錄驗證野舶,并不會影響Zipkin Server的信息收集易迹,因為 Client 端會自動上傳gzip的數(shù)據(jù)包給 Server 端,而無需 Server 端去調(diào)用 Client 端的接口去統(tǒng)計信息平道,Client 端在生成 Trace 統(tǒng)計信息的同時睹欲,如果配置了 MDC 或者在 logback 日志中集成了日志收集工具 logstash,則可以在 Client 端的控制臺讀到這些 Trace 和 Span 的信息一屋,對每個 Span 的信息都會有對應(yīng)的 Annotation 進行聲明窘疮。
Span 的 Annotation 信息
這些 Annotation 分為四種類型:
cs : Client Sent,這個標識著 Span的開始冀墨。
sr : Server Received考余,這個標識著服務(wù)端接收到客戶端發(fā)送請求的信息。Sleuth還可以根據(jù) cs 和 sr 的時間戳來計算服務(wù)調(diào)用的延時轧苫。
ss : Server Sent楚堤,這個標識表示服務(wù)端接收到客戶端后要返回 response 信息。
cr : Client Received含懊,這個標識表示客戶端收到服務(wù)端返回的 response 信息身冬。


這幾個注解反應(yīng)了一次完整的服務(wù)間調(diào)用的信息,這些注解結(jié)合 Span id 信息可以從不同的應(yīng)用匯總成調(diào)用鏈路的 Trace 信息岔乔,也就是說一次 Trace 的信息如果經(jīng)過了 A 應(yīng)用酥筝、B 應(yīng)用,那么 Sleuth 會從 A 應(yīng)用匯總對B應(yīng)用調(diào)用產(chǎn)生的注解信息 Client Sent 和 Client Received雏门,再從 B 應(yīng)用匯總對 A 應(yīng)用調(diào)用產(chǎn)生的 Server Received 和 Server Sent嘿歌,A 應(yīng)用根據(jù)自己調(diào)用信息組裝成 Span 和攜帶相應(yīng)的 Annotation 以gzip包的方式通過http發(fā)送給 Zipkin Server,B 應(yīng)用像 A 應(yīng)用一樣也會組裝這些信息給 Zipkin Server茁影,Zipkin Server會根據(jù) A 應(yīng)用和 B 應(yīng)用的信息匯總成統(tǒng)計信息展示在 Zipkin UI上宙帝。
Span的生命周期
start:開始對Span命名和記錄開始時間戳
close:結(jié)束時記錄結(jié)束時間戳并檢查屬性 exportable 然后匯總給 Zipkin,然后移除出當(dāng)前的線程募闲。
continue:為 Span 新建實例并拷貝繼續(xù)進行的 Span
detach:Span 沒有 stop 或者 close步脓,僅僅是移出當(dāng)前的線程。
create with explicit parent:在另外的一個線程重新創(chuàng)建一個 Span 并且明確它的 parent浩螺。

Span 的存儲方式
在 Zipkin Server里面有很多種存儲方式靴患,但是比較主流的有這兩種:
放在內(nèi)存中存儲。
放在mysql中存儲要出。 放在內(nèi)存中的隨著服務(wù)端的啟動會出清空歷史數(shù)據(jù)鸳君,如果想持久化保留這些數(shù)據(jù),可以選擇 mysql 的方式存儲患蹂。 mysql配置方式參考:Stack Overflow 網(wǎng)友提供的參考方案 mysql 配置后有兩個表或颊,如圖


更多 zipkin 學(xué)習(xí)資料:
Spring Cloud Sleuth 官方文檔
Github 上的 Zipkin 參考樣例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腿时,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饭宾,更是在濱河造成了極大的恐慌批糟,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看铆,死亡現(xiàn)場離奇詭異徽鼎,居然都是意外死亡,警方通過查閱死者的電腦和手機弹惦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門否淤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棠隐,你說我怎么就攤上這事石抡。” “怎么了助泽?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵啰扛,是天一觀的道長。 經(jīng)常有香客問我嗡贺,道長隐解,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任诫睬,我火速辦了婚禮煞茫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摄凡。我一直安慰自己续徽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布亲澡。 她就那樣靜靜地躺著钦扭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谷扣。 梳的紋絲不亂的頭發(fā)上土全,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天捎琐,我揣著相機與錄音会涎,去河邊找鬼。 笑死瑞凑,一個胖子當(dāng)著我的面吹牛末秃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籽御,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼练慕,長吁一口氣:“原來是場噩夢啊……” “哼惰匙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铃将,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤项鬼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劲阎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绘盟,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年悯仙,在試婚紗的時候發(fā)現(xiàn)自己被綠了龄毡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡锡垄,死狀恐怖沦零,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情货岭,我是刑警寧澤路操,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站千贯,受9級特大地震影響寻拂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丈牢,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一祭钉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧己沛,春花似錦慌核、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至师幕,卻和暖如春粟按,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霹粥。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工灭将, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人后控。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓庙曙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浩淘。 傳聞我的和親對象是個殘疾皇子捌朴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理吴攒,服務(wù)發(fā)現(xiàn),斷路器砂蔽,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • 概述 當(dāng)代的互聯(lián)網(wǎng)的服務(wù)洼怔,通常都是用復(fù)雜的、大規(guī)模分布式集群來實現(xiàn)的左驾≤罾鳎互聯(lián)網(wǎng)應(yīng)用構(gòu)建在不同的軟件模塊集上,這些軟件...
    咖灰閱讀 5,900評論 0 16
  • 普元推出DevOps系列課程什荣,5分鐘秒懂一個知識點矾缓,戳“閱讀原文”充電5分鐘,掌握黑科技稻爬。 轉(zhuǎn)載本文需注明出處:微...
    72a1f772fe47閱讀 4,525評論 0 0
  • 文章主要翻譯自Spring Cloud Sleuth官方文檔 Spring-Cloud Spring Cloud為...
    莫莫小熊閱讀 652,045評論 7 32
  • 上午嗜闻,偶然看了上周六湖南衛(wèi)視《歌手》節(jié)目,李健翻唱了一首許飛的《父親的散文詩》桅锄。他用最簡單的彈唱琉雳,讓人熱淚...
    深水之下閱讀 1,143評論 19 6