SpringCloud學(xué)習(xí)(六)之Sleuth

Spring Cloud Sleuth

一般的,一個(gè)分布式服務(wù)跟蹤系統(tǒng)占业,主要有三部分:數(shù)據(jù)收集、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)展示纯赎。根據(jù)系統(tǒng)大小不同谦疾,每一部分的結(jié)構(gòu)又有一定變化。譬如犬金,對(duì)于大規(guī)模分布式系統(tǒng)念恍,數(shù)據(jù)存儲(chǔ)可分為實(shí)時(shí)數(shù)據(jù)和全量數(shù)據(jù)兩部分,實(shí)時(shí)數(shù)據(jù)用于故障排查(troubleshooting)晚顷,全量數(shù)據(jù)用于系統(tǒng)優(yōu)化峰伙;數(shù)據(jù)收集除了支持平臺(tái)無(wú)關(guān)和開發(fā)語(yǔ)言無(wú)關(guān)系統(tǒng)的數(shù)據(jù)收集,還包括異步數(shù)據(jù)收集(需要跟蹤隊(duì)列中的消息该默,保證調(diào)用的連貫性)瞳氓,以及確保更小的侵入性;數(shù)據(jù)展示又涉及到數(shù)據(jù)挖掘和分析栓袖。雖然每一部分都可能變得很復(fù)雜匣摘,但基本原理都類似。



服務(wù)追蹤的追蹤單元是從客戶發(fā)起請(qǐng)求(request)抵達(dá)被追蹤系統(tǒng)的邊界開始裹刮,到被追蹤系統(tǒng)向客戶返回響應(yīng)(response)為止的過程音榜,稱為一個(gè)“trace”。每個(gè) trace 中會(huì)調(diào)用若干個(gè)服務(wù)捧弃,為了記錄調(diào)用了哪些服務(wù)赠叼,以及每次調(diào)用的消耗時(shí)間等信息,在每次調(diào)用服務(wù)時(shí)违霞,埋入一個(gè)調(diào)用記錄嘴办,稱為一個(gè)“span”。這樣葛家,若干個(gè)有序的 span 就組成了一個(gè) trace户辞。在系統(tǒng)向外界提供服務(wù)的過程中,會(huì)不斷地有請(qǐng)求和響應(yīng)發(fā)生癞谒,也就會(huì)不斷生成 trace,把這些帶有span 的 trace 記錄下來刃榨,就可以描繪出一幅系統(tǒng)的服務(wù)拓?fù)鋱D弹砚。附帶上 span 中的響應(yīng)時(shí)間,以及請(qǐng)求成功與否等信息枢希,就可以在發(fā)生問題的時(shí)候桌吃,找到異常的服務(wù);根據(jù)歷史數(shù)據(jù)苞轿,還可以從系統(tǒng)整體層面分析出哪里性能差茅诱,定位性能優(yōu)化的目標(biāo)逗物。

  • Span:基本工作單元,例如瑟俭,在一個(gè)新建的span中發(fā)送一個(gè)RPC等同于發(fā)送一個(gè)回應(yīng)請(qǐng)求給RPC翎卓,span通過一個(gè)64位ID唯一標(biāo)識(shí),trace以另一個(gè)64位ID表示摆寄,span還有其他數(shù)據(jù)信息失暴,比如摘要、時(shí)間戳事件微饥、關(guān)鍵值注釋(tags)逗扒、span的ID、以及進(jìn)度ID(通常是IP地址) span在不斷的啟動(dòng)和停止欠橘,同時(shí)記錄了時(shí)間信息矩肩,當(dāng)你創(chuàng)建了一個(gè)span,你必須在未來的某個(gè)時(shí)刻停止它肃续。
  • Trace:一系列spans組成的一個(gè)樹狀結(jié)構(gòu)黍檩,例如,如果你正在跑一個(gè)分布式大數(shù)據(jù)工程痹升,你可能需要?jiǎng)?chuàng)建一個(gè)trace建炫。
  • Annotation:用來及時(shí)記錄一個(gè)事件的存在,一些核心annotations用來定義一個(gè)請(qǐng)求的開始和結(jié)束
    • CS - Client Sent -客戶端發(fā)起一個(gè)請(qǐng)求疼蛾,這個(gè)annotion描述了這個(gè)span的開始
    • SR - Server Received -服務(wù)端獲得請(qǐng)求并準(zhǔn)備開始處理它肛跌,如果將其sr減去cs時(shí)間戳便可得到網(wǎng)絡(luò)延遲
    • SS - Server Sent -注解表明請(qǐng)求處理的完成(當(dāng)請(qǐng)求返回客戶端),如果ss減去sr時(shí)間戳便可得到服務(wù)端需要的處理請(qǐng)求時(shí)間
    • CR - Client Received -表明span的結(jié)束察郁,客戶端成功接收到服務(wù)端的回復(fù)衍慎,如果cr減去cs時(shí)間戳便可得到客戶端從服務(wù)端獲取回復(fù)的所有所需時(shí)間

Spring Cloud Sleuth的概念圖::


Sleuth作用:

  • 耗時(shí)分析: 通過Sleuth可以很方便的了解到每個(gè)采樣請(qǐng)求的耗時(shí),從而分析出哪些服務(wù)調(diào)用比較耗時(shí);
  • 可視化錯(cuò)誤: 對(duì)于程序未捕捉的異常皮钠,可以通過集成Zipkin服務(wù)界面上看到;
  • 鏈路優(yōu)化: 對(duì)于調(diào)用比較頻繁的服務(wù)稳捆,可以針對(duì)這些服務(wù)實(shí)施一些優(yōu)化措施。

spring cloud sleuth可以結(jié)合zipkin麦轰,將信息發(fā)送到zipkin乔夯,利用zipkin的存儲(chǔ)來存儲(chǔ)信息,利用zipkin ui來展示數(shù)據(jù)款侵。接下來簡(jiǎn)單介紹一下zipkin:

ZipKin

Zipkin 是一個(gè)開放源代碼分布式的跟蹤系統(tǒng)末荐,由Twitter公司開源,它致力于收集服務(wù)的定時(shí)數(shù)據(jù)新锈,以解決微服務(wù)架構(gòu)中的延遲問題甲脏,包括數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn)块请。

每個(gè)服務(wù)向zipkin報(bào)告計(jì)時(shí)數(shù)據(jù)娜氏,zipkin會(huì)根據(jù)調(diào)用關(guān)系通過Zipkin UI生成依賴關(guān)系圖,顯示了多少跟蹤請(qǐng)求通過每個(gè)服務(wù)墩新,該系統(tǒng)讓開發(fā)者可通過一個(gè) Web 前端輕松的收集和分析數(shù)據(jù)贸弥,例如用戶每次請(qǐng)求服務(wù)的處理時(shí)間等,可方便的監(jiān)測(cè)系統(tǒng)中存在的瓶頸抖棘。

Zipkin提供了可插拔數(shù)據(jù)存儲(chǔ)方式:In-Memory茂腥、MySql、Cassandra以及Elasticsearch切省。接下來的測(cè)試為方便直接采用In-Memory方式進(jìn)行存儲(chǔ)最岗,生產(chǎn)推薦Elasticsearch。

  1. 引入依賴:
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-server</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>
</dependencies>
  1. 啟動(dòng)類:
    使用@EnableZipkinServer注解朝捆,啟用Zipkin服務(wù)般渡。
@SpringBootApplication
@EnableEurekaClient
@EnableZipkinServer
public class ZipkinApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinApplication.class, args);
    }
}
  1. 配置文件:
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 9000
spring:
  application:
    name: zipkin-server

配置完成后依次啟動(dòng)eureka、zipkin-server項(xiàng)目芙盘。訪問地址http://localhost:9000/zipkin/即可看到Zipkin后臺(tái)頁(yè)面驯用。

  1. 在項(xiàng)目中添加zipkin支持:
    先引入依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

Spring應(yīng)用在監(jiān)測(cè)到Java依賴包中有sleuth和zipkin后,會(huì)自動(dòng)在RestTemplate的調(diào)用過程中向HTTP請(qǐng)求注入追蹤信息儒老,并向Zipkin Server發(fā)送這些信息蝴乔。

同時(shí)修改配置文件:

spring:
  zipkin:
    base-url: http://localhost:9000
  sleuth:
    sampler:
      percentage: 1.0
  • spring.zipkin.base-url指定了Zipkin服務(wù)器的地址
  • spring.sleuth.sampler.percentage將采樣比例設(shè)置為1.0,說明全部都需要驮樊。

Spring Cloud Sleuth有一個(gè)Sampler策略薇正,可以通過這個(gè)實(shí)現(xiàn)類來控制采樣算法。采樣器不會(huì)阻礙span相關(guān)id的產(chǎn)生囚衔,但是會(huì)對(duì)導(dǎo)出以及附加事件標(biāo)簽的相關(guān)操作造成影響挖腰。 Sleuth默認(rèn)采樣算法的實(shí)現(xiàn)是Reservoir sampling,具體的實(shí)現(xiàn)類是PercentageBasedSampler练湿,默認(rèn)的采樣比例為: 0.1(即10%)猴仑。不過我們可以通過spring.sleuth.sampler.percentage來設(shè)置,所設(shè)置的值介于0.0到1.0之間肥哎,1.0則表示全部采集辽俗。

配置完成后啟動(dòng)項(xiàng)目,嘗試訪問服務(wù)篡诽,再進(jìn)入http://localhost:9000/zipkin/查看追蹤記錄即可榆苞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市霞捡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薄疚,老刑警劉巖碧信,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赊琳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砰碴,警方通過查閱死者的電腦和手機(jī)躏筏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呈枉,“玉大人趁尼,你說我怎么就攤上這事〔瑁” “怎么了酥泞?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啃憎。 經(jīng)常有香客問我芝囤,道長(zhǎng),這世上最難降的妖魔是什么辛萍? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任悯姊,我火速辦了婚禮,結(jié)果婚禮上贩毕,老公的妹妹穿的比我還像新娘悯许。我一直安慰自己,他們只是感情好辉阶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布先壕。 她就那樣靜靜地躺著,像睡著了一般睛藻。 火紅的嫁衣襯著肌膚如雪启上。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天店印,我揣著相機(jī)與錄音冈在,去河邊找鬼。 笑死按摘,一個(gè)胖子當(dāng)著我的面吹牛包券,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炫贤,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼溅固,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了兰珍?” 一聲冷哼從身側(cè)響起侍郭,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亮元,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猛计,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年爆捞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奉瘤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煮甥,死狀恐怖盗温,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情成肘,我是刑警寧澤卖局,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站艇劫,受9級(jí)特大地震影響吼驶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜店煞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一蟹演、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顷蟀,春花似錦酒请、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至囤萤,卻和暖如春昼窗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涛舍。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工澄惊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人富雅。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓掸驱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親没佑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毕贼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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