Spring Cloud 分布式鏈路跟蹤 Sleuth + Zipkin + Elasticsearch

隨著業(yè)務越來越復雜萧诫,系統(tǒng)也隨之進行各種拆分斥难,特別是隨著微服務架構的興起,看似一個簡單的應用财搁,后臺可能很多服務在支撐蘸炸;一個請求可能需要多個服務的調用;當請求遲緩或不可用時尖奔,無法得知是哪個微服務引起的搭儒,這時就需要解決如何快速定位服務故障點,Zipkin 分布式跟蹤系統(tǒng)就能很好的解決這樣的問題提茁。

如果想學習Java工程化淹禾、高性能及分布式、深入淺出茴扁。微服務铃岔、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135毁习,群里有阿里大牛直播講解技術智嚷,以及Java大型互聯(lián)網(wǎng)技術的視頻免費分享給大家

那么到底怎么使用呢纺且?接下來完成一個具體的實例來體會一把微服務鏈路追蹤:

本文使用的 Spring Cloud Finchley 版本盏道,和其他版本會有不同

我們使用user-service,order-service 作為兩個微服務,zuul-gateway 作為服務網(wǎng)關

zuul-gateway -> order-service -> user-service载碌, 形成服務調用鏈路猜嘱,完成一次請求。

注意:Zipkin 不再推薦我們來自定義 Server 端嫁艇,在最新版本的 Spring Cloud 依賴管理里已經(jīng)找不到 Zipkin-server 了 朗伶,根本就不需要自己新建一個 Zipkin-server 服務,網(wǎng)上的各種教程都數(shù)互相抄的步咪,請無視

一论皆,環(huán)境安裝

本人使用 centos 7 ,java-10

安裝 Zipkin:聚合各個業(yè)務系統(tǒng)之間的調用延遲數(shù)據(jù)

安裝 RabbitMQ:系統(tǒng)調用數(shù)據(jù)傳輸

安裝 Elasticsearch:系統(tǒng)調用數(shù)據(jù)持久化

安裝Elasticsearch-head:Elasticsearch 可視化

二歧斟,創(chuàng)建微服務

user-service

以下是pom依賴文件

org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.bootspring-boot-starter-actuatororg.springframework.cloudspring-cloud-starter-openfeign<!--服務鏈路追蹤-->org.springframework.cloudspring-cloud-starter-sleuthorg.springframework.cloudspring-cloud-starter-zipkin<!--數(shù)據(jù)傳輸-->org.springframework.cloudspring-cloud-stream-binder-rabbit

新建@RestController 接口 UserOrderController纯丸,代碼如下:

@RestControllerpublicclassUserOrderController{@AutowiredprivateUserOrderService orderService;@RequestMapping(value ="/getUserOrder", method = RequestMethod.GET)publicString getUserOrder() {returnorderService.getOrder(); } } 說明:在 user-service 使用 FeignClient 調用 order-service 的 getOrder 服務

application.yml 配置文件如下:

spring: application: name:user-service sleuth: web: client: enabled:true sampler: probability:1.0 zipkin: base-url:http://192.168.10.100:9411/ enabled:true sender: type:RABBIT rabbitmq: addresses:192.168.10.100 port:15672 username:admin password:12345 virtual-host:sleuth server: port:9100zipkin參數(shù)說明: probability:1.0#將采樣比例設置為 1.0,也就是全部都需要静袖。默認是 0.1 base-url:http://192.168.10.100:9411/#Zipkin 服務器的地址

order-service

pom依賴文件和user-service相同

新建@RestController 接口 OrderController觉鼻,代碼如下:

@RestController public class OrderController {? @Value("${server.port}") private String port;@RequestMapping(value ="/getOrder", method = RequestMethod.GET) public String getOrder() { return"Success, Order-Service, Port :"+ port;} } 說明:getOrder接口就是給 user-service 調用的

application.yml 配置文件和user-service相同

zuul-gateway網(wǎng)關

以下是pom依賴文件

org.springframework.cloudspring-cloud-starter-netflix-zuulorg.springframework.cloudspring-cloud-starter-netflix-eureka-client<!--服務鏈路追蹤-->org.springframework.cloudspring-cloud-starter-sleuthorg.springframework.cloudspring-cloud-starter-zipkin<!--數(shù)據(jù)傳輸-->org.springframework.cloudspring-cloud-stream-binder-rabbit

application.yml 配置文件如下:

spring: application: name:zuul-gateway sleuth: web: client: enabled:true sampler: probability:1.0 zipkin: base-url:http://192.168.10.100:9411/ enabled:true sender: type:RABBIT rabbitmq: addresses:192.168.10.100 port:15672 username:admin password:12345 virtual-host:sleuth server: port:9310 eureka: client: service-url: defaultZone:http://localhost:8080/eureka/ zuul: prefix:/v1 routes:# http://localhost:9310/v1/user/# user Api user-api: path:/user/** serviceId:user-service# order Api order-api: path:/order/** serviceId:order-service

zipkin配置和user-service相同

zuul 路由配置自己找資料參考啊,這里不做說明

以上我們微服務全部完成队橙,然后全部啟動

三坠陈,啟動各系統(tǒng)和組件

前面說不推薦用戶自己創(chuàng)建 Zipkin服務,那怎么把數(shù)據(jù)傳輸?shù)?Zipkin服務器呢捐康?就是利用Zipkin的環(huán)境變量仇矾,通過環(huán)境變量讓 Zipkin 從 RabbitMQ 中讀取信息

1,啟動Zipkin服務解总,并指定 RabbitMQ做數(shù)據(jù)傳輸贮匕,Elasticsearch持久化數(shù)據(jù),啟動命令如下:

java -jar zipkin.jar--RABBIT_URI=amqp://admin:12345@localhost:5672/sleuth--STORAGE_TYPE=elasticsearch--ES_HOSTS=http//:localhost:9200--ES_HTTP_LOGGING=BASIC

說明:

--RABBIT_URI=amqp://admin:12345@localhost:5672/sleuth 指定用 RabbitMQ 做數(shù)據(jù)傳輸

--STORAGE_TYPE=elasticsearch --ES_HOSTS=http//:localhost:9200 --ES_HTTP_LOGGING=BASIC 指定用 Eelasticsearch 做數(shù)據(jù)傳輸

可配置的環(huán)境變量花枫,請參考:https://www.rabbitmq.com/uri-spec.html

當然你覺得 搭建Elasticsearch太麻煩了刻盐,也可以用MYSQL 生成環(huán)境推薦使用 Elasticsearch,或者你只想自己試一下劳翰,那你可以不用存儲敦锌,數(shù)據(jù)就在內(nèi)存中。

2佳簸,啟動RabbitMQ服務 http://192.168.10.100:15672/ 查看啟動生個乙墙,推薦自己新建個用戶,然后登錄 查看。

3听想,啟動Elasticsearch服務,http://192.168.10.100:9200/ 查看ES啟動腥刹,注意Elasticsearch 不能用root用戶啟動,具體怎么操作請百度教程哗魂。

4肛走,啟動Elasticsearch-head,http://192.168.10.100:9100/ 可以看到界面录别,注意 集群健康值,要是未連接就是有問題邻吞,自己解決组题。

5,啟動user-service抱冷,order-service,zuul-gateway 網(wǎng)關崔列,請求你自己定義的接口,這個有錯自己解決

查看RabbitMQ可視化界面旺遮,就能看到 數(shù)據(jù)傳輸信息赵讯。如下圖:

查看Zipkin可視化界面,就能看到服務調用鏈路信息耿眉。如下圖:

查看Elasticsearch-head可視化界面边翼,就能看到 Elasticsearch 存儲的數(shù)據(jù)信息。如下圖:

以上一個完成的分布式服務鏈路追蹤系統(tǒng)完成鸣剪。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末组底,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筐骇,更是在濱河造成了極大的恐慌债鸡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铛纬,死亡現(xiàn)場離奇詭異厌均,居然都是意外死亡,警方通過查閱死者的電腦和手機告唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門棺弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悔详,你說我怎么就攤上這事镊屎。” “怎么了茄螃?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵缝驳,是天一觀的道長。 經(jīng)常有香客問我,道長用狱,這世上最難降的妖魔是什么运怖? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮夏伊,結果婚禮上摇展,老公的妹妹穿的比我還像新娘。我一直安慰自己溺忧,他們只是感情好咏连,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲁森,像睡著了一般祟滴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歌溉,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天垄懂,我揣著相機與錄音,去河邊找鬼痛垛。 笑死草慧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匙头。 我是一名探鬼主播漫谷,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乾胶!你這毒婦竟也來了抖剿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤识窿,失蹤者是張志新(化名)和其女友劉穎斩郎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喻频,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡缩宜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了甥温。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻煌。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姻蚓,靈堂內(nèi)的尸體忽然破棺而出宋梧,到底是詐尸還是另有隱情,我是刑警寧澤狰挡,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布捂龄,位于F島的核電站释涛,受9級特大地震影響,放射性物質發(fā)生泄漏倦沧。R本人自食惡果不足惜唇撬,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望展融。 院中可真熱鬧窖认,春花似錦、人聲如沸告希。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暂雹。三九已至首装,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杭跪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工驰吓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涧尿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓檬贰,卻偏偏與公主長得像姑廉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翁涤,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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