前沿
sleuth也不是一個新鮮的東西考传,說白了就是一個APM的一個濃縮版,spring Cloud Sleuth為 spring Cloud提供了分布式跟蹤的解決方案前联,它大量借用了Google Dapper功戚、 Twitter Zipkin和 Apache HTrace的設(shè)計
構(gòu)建了ELK的日志系統(tǒng)和監(jiān)控系統(tǒng)這兩個能夠快速的發(fā)現(xiàn)系統(tǒng)中的問題,但是由于微服務(wù)架構(gòu)中系統(tǒng)眾多似嗤,系統(tǒng)之間的交互還比較復(fù)雜啸臀,在產(chǎn)生了大量的日志之后,可以幫助我們定位問題烁落,但是在緊急情況下難以幫助我們快速乘粒,是快速的定位和解決問題席揽,這個就調(diào)用鏈的設(shè)計初衷,在微服務(wù)中谓厘,調(diào)用鏈比較長的時候,如果出現(xiàn)問題寸谜,很容易出現(xiàn)踢皮球的情況竟稳,這種情況下,打開調(diào)用鏈熊痴,一看他爸,誰的就是誰的不說不鬧,多好果善。
市面上比較常見的APM有:pinpoint,Twitter的zipkin,美團(tuán)的Cat诊笤,Google的Dapper,這里值得表揚(yáng)美團(tuán)巾陕,繼續(xù)和金服的pk吧讨跟,最牛的還是Google,他發(fā)表了一篇Dapper就有好多公司去研究鄙煤,最終形成自己的產(chǎn)品晾匠,不由的讓我想起他的GFS,bigTable在大數(shù)據(jù)前期google為大數(shù)據(jù)所做的貢獻(xiàn)梯刚,向慷慨的人致敬凉馆,懂得分享的人最可愛,嗯亡资,對···進(jìn)入正題
sleuth
簡單說一下調(diào)用鏈的東西TraceID 鏈路ID 在整個調(diào)用鏈中這個東西是不變的
SpanId 步驟ID 經(jīng)過一個node就會變
ParentSpanID 很同意理解澜共,這個spanId是從哪個span來的,這個設(shè)計很重要的
復(fù)雜的東西spring boot已經(jīng)給我們封裝好了
#######sleuth客戶端
在需要跟蹤的微服務(wù)中pom.xml加上
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
在application.yml中添加
spring:
zipkin:
base-url: http://sleuth server的ip:端口
sleuth:
sampler:
percentage: 1 ##這個是收集比例锥腻,1表示100%shouji ,全部收集
sleuth服務(wù)端
pom.xml添加
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
并且在啟動類上添加
@EnableZipkinServer
客戶端和服務(wù)端都啟動嗦董,進(jìn)入到zipkin服務(wù)端
可以根據(jù)時間,服務(wù)名稱去查詢旷太,點(diǎn)擊可查看調(diào)用鏈詳情
zipkin+kafka+ES
因?yàn)楝F(xiàn)在zipkin的調(diào)用數(shù)據(jù)都是存在內(nèi)存中的展懈,一旦zipkin server重啟,則意味著之前的都沒有了供璧,在這并發(fā)高的存崖,一會就把內(nèi)存擠爆了,所以最終zipkin的數(shù)據(jù)是要持久化的睡毒,要么mysql来惧,這里采用ES,畢竟在大數(shù)據(jù)檢索面前ES比mysql好很多很多
還有在頁面請求量大的時候zipkin和ES直接聯(lián)通存數(shù)據(jù),肯定會阻塞演顾,這里就用kafka來解決這個問題
pom.xml需要引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
application.yml添加
spring:
cloud:
stream:
kafka:
binder:
brokers: kafkaIP:9092
zkNodes: zkIP:2181
zipkin:
storage:
type: elasticsearch
elasticsearch:
cluster: elasticsearch
hosts: http://ESIP:9200
index: zipkin
index-shards: 5
index-replicas: 1
再次啟動供搀,加入數(shù)據(jù)隅居,觀察ES-head
已經(jīng)將調(diào)用鏈存進(jìn)去了,這里要感謝spring 將調(diào)用鏈集成葛虐,方便我們應(yīng)用
望指正胎源,不吝賜教