SpringCloud 基礎教程(十一)- Sleuth 調用鏈追蹤簡介

?我的博客:程序員笑笑生,歡迎瀏覽博客术荤!

?上一章 SpringCloud 基礎教程(十)-Zuul 服務網關當中,我們了解了Zuul在微服架構中擔任著重要的網關角色,并實現了一個簡單的Token過濾涯保。本章我們將介紹另一個服務組件Spring Cloud Sleuth。

前言

?在微服務系統中勇劣,業(yè)務的調用多數不是在一個進程中實現的靖避,可以知道,隨著服務的拆分比默,微服務組件是越來越多幻捏,每個模塊都是不同的人維護,一個請求會涉及多個服務協調的處理命咐,那么當出現故障時篡九,如何快速的定位線上的故障呢?

?比較成熟的方案是通過調用鏈的方式醋奠,把一個用戶的請求串聯起來榛臼。Sping Cloud Sleuth是一個分布式的調用鏈跟蹤工具:

一、快速開始

1.1 準備工作

在我們之前的章節(jié)中窜司,我們有了以下的服務組件:

  • Eureka注冊中心:eureka-server
  • 服務消費者1個server-consumer
  • 服務提供者2個server-provider

1.2 如何開始

?我們在服務消費者server-consumer沛善、服務提供者server-provider和eureka-server引入sleuth依賴,并啟動注冊中心塞祈、服務提供者和服務消費者:

<dependency>
  <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

?服務消費者server-consumer控制器金刁,helloApi是Feign編寫的接口,注入調用:

@RestController
@RequestMapping("/hystrix")
public class HystrixController {
   private final Logger logger = LoggerFactory.getLogger(HystrixController.class);

    @Autowired
    HelloApi helloApi;

    @RequestMapping("/sayHello")
    @HystrixCommand(fallbackMethod = "sayError")
    public String sayHello(String name) {
        return helloApi.sayHello(name);
    }
    @RequestMapping("/sayHello")
    @HystrixCommand(fallbackMethod = "sayError")
    public String sayHello(String name) {     
        logger.info("server-consumer :{}"+name);
        return helloApi.sayHello(name);
    }

?服務提供者server-provider控制器:

@RestController
public class RibbonController {
    
    private final Logger logger = LoggerFactory.getLogger(RibbonController.class);

    @Value("${server.port}")
    private String port;

    @RequestMapping("/sayHello")
    public String sayHello(String name) {
        logger.info("server-provider :{}"+name);
        return "from:" + port + ",hello!," + name;
    }

?啟動程序后议薪,然后通過HTTP方式調用接口 http://localhost:5168/hystrix/sayHello?name=name尤蛮,接口正確返回結果,同時我們可以看到后臺日志:

?服務消費者日志:

file
2020-01-30 22:34:30.118  INFO [server-consumer,ef944d0faefb97cd,c72e13f0bd0a4398,false] 10904 --- [rixController-1] c.m.consumer.test.HystrixController      : server-consumer :{}name

?服務提供者日志:

file
2020-01-30 22:34:30.366  INFO [server-provider,ef944d0faefb97cd,aef54537badf8ea0,false] 22664 --- [nio-9001-exec-1] c.m.provider.RibbonController            : server-provider :{}name

?可以看到日志信息多出了很多信息如: [server-consumer,ef944d0faefb97cd,c72e13f0bd0a4398,false]斯议,

  • server-consumer:應用名稱
  • ef944d0faefb97cd:一個TraceId产捞,這里的服務提供者和服務調用者的TraceID是一樣的
  • c72e13f0bd0a4398:一個SpanId

二、Spring Cloud Sleuth 介紹

?在引入spring-cloud-starter-sleuth依賴后哼御,客戶端的每一次請求坯临,都會生成這樣的日志,Spring Cloud Sleuth借用了Dapper的術語:

  • Span:最小的工作單元恋昼,發(fā)送一個RPC請求或者響應一個RPC請求也是一個新的Span尿扯,SpringCloud Sleuth會為其生成一個64位的全局唯一的ID,包括了時間焰雕、標簽衷笋、SpanID,進程ID(IP)。

  • Trace:理解為一個完整的調用鏈請求

  • Annotation :用來及時記錄時間的存在辟宗,用一些重要的注解定義請求的開始和結束

    ? 1 爵赵、cs Client-Request 客戶端發(fā)送請求,描述一個Span的開始

    ? 2 泊脐、sr Server Recoived 服務端接受請求空幻,并開始處理

    ? 3 、ss Server Sent 表示請完成

    ? 4 容客、cr Client- Received 表示Span的結束

?可以用圖的形式表示一次調用鏈的實例:

file

從圖中我們可以看到秕铛,一次完整的用戶請求,TraceID是不變的缩挑,不管中間經過了多少的服務但两,TraceID是唯一確定的。而SpanId的變化是發(fā)生了RPC請求供置。這樣我們就可以更具這些信息谨湘,如果讓生為了故障,我們就可以追蹤具體的服務組件了芥丧。

三紧阔、總結

?本章我們簡單介紹了在分布式環(huán)境下,我們該用什么樣的方法快速的定位服務的故障续担,了解了Spring Cloud Sleuth的簡單概念擅耽,以及如何在項目中應用,當然僅僅收集這些日志信息是不夠的物遇,我們需要的把它給收集起來秫筏,通常Spring Cloud Sleuth會打印日志聚集值Zipkin中,有Zipkin收集挎挖、存儲、提供查詢等航夺。接下來我們會介紹如何在Spring Cloud生態(tài)下集成Zipkin蕉朵。

----END----
以就是本期的分享,你還可以關注公眾號: 程序員笑笑生阳掐,關注更多精彩內容始衅!

file
file

SpringCloud基礎教程(一)-微服務與SpringCloud

SpringCloud基礎教程(二)-服務發(fā)現 Eureka

SpringCloud基礎教程(三)-Eureka進階

SpringCloud 基礎教程(四)-配置中心入門

SpringCloud基礎教程(五)-配置中心熱生效和高可用

SpringCloud 基礎教程(六)-負載均衡Ribbon

SpringCloud 基礎教程(七)-Feign聲明式服務調用

SpringCloud 基礎教程(八)-Hystrix熔斷器(上)

SpringCloud 基礎教程(九)-Hystrix服務監(jiān)控(下)

SpringCloud 基礎教程(十)-Zull服務網關

SpringCloud 基礎教程(十一)- Sleuth 調用鏈追蹤簡介

更多精彩內容,請期待...

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布缭保!

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末汛闸,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子艺骂,更是在濱河造成了極大的恐慌诸老,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钳恕,死亡現場離奇詭異别伏,居然都是意外死亡蹄衷,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門厘肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愧口,“玉大人,你說我怎么就攤上這事类茂∷J簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵巩检,是天一觀的道長厚骗。 經常有香客問我,道長碴巾,這世上最難降的妖魔是什么溯捆? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮厦瓢,結果婚禮上提揍,老公的妹妹穿的比我還像新娘。我一直安慰自己煮仇,他們只是感情好劳跃,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浙垫,像睡著了一般刨仑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夹姥,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天杉武,我揣著相機與錄音,去河邊找鬼辙售。 笑死轻抱,一個胖子當著我的面吹牛,可吹牛的內容都是我干的旦部。 我是一名探鬼主播祈搜,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼士八!你這毒婦竟也來了容燕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤婚度,失蹤者是張志新(化名)和其女友劉穎蘸秘,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡秘血,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年味抖,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灰粮。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔涩,死狀恐怖,靈堂內的尸體忽然破棺而出粘舟,到底是詐尸還是另有隱情熔脂,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布柑肴,位于F島的核電站霞揉,受9級特大地震影響,放射性物質發(fā)生泄漏晰骑。R本人自食惡果不足惜适秩,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硕舆。 院中可真熱鬧秽荞,春花似錦、人聲如沸抚官。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凌节。三九已至钦听,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倍奢,已是汗流浹背朴上。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卒煞,地道東北人痪宰。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像跷坝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碉碉,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容