在微服務框架中,一個由客戶端發起的請求在後端系統中會經過多個不同的的服務節點調用來協同產生最後的請求結果,每一個前段請求都會形成一條複雜的分佈式服務調用鏈路,鏈路中的任何一環出現高延時或錯誤都會引起整個請求最後的失敗。當鏈路多的時候,分析定位問題就會很災難~
Spring Cloud Sleuth提供了一套完整的服務跟蹤的解決方案,在分佈式系統中提供追蹤解決方案並且兼容支持了zipkin
一條鏈路通過Trace ld唯-標識, Span標識發起的請求信息,各span通過parent id關聯起來
整個鏈路的依賴關係如下:
下面進行搭建鏈路監控~:需要eureka7001、porvider8001、consumer80來提供測試
1、首先需要構建zipkin-server。SpringCloud從F版起已不需要自己構建Zipkin server了,只需要調用jar包即可
jar包的下載地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
下載下來後,啓動jar包,出現下面的頁面表示啓動成功
通過請求http://localhost:9411,來打開zipkin dashboard 儀表盤監控頁面
2、對provider8001、consumer80添加pom依賴
<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
3、對provider8001、consumer80添加yml配置,此時注意base_url的對齊方式,要不啓動會報錯,都是添加相同的配置
spring:
application:
name: cloud-order-service
zipkin:
base-url: http://localhost:9411 #此時注意base_url的對齊方式,要不啓動會報錯
sleuth:
sampler:
#採樣率值介於0~1之間,1表示全部採集,一般設置爲0,在併發量高的情況下,一般不會設置爲1
probability: 1
4、對provider8001添加一個測試zipkin的服務接口
@GetMapping(value = "/payment/zipkin")
public Object zipkin() {
return "zipkin 測試鏈路請求返回值加端口號:"+serverPort;
}
5、對consumer80添加一個請求測試接口來訪問8001
@GetMapping(value = "/consumer/payment/zipkin")
public Object getPaymentZipkin() {
String forObject = restTemplate.getForObject(PAYMENT_URL_PRE + "/payment/zipkin/", String.class);
log.info("forObject內容:" + forObject.toString());
return forObject;
}
6、請求80新添加的接口,來訪問8001的zipkin接口服務,多請求幾次,然後查看zipkin dashboard的監控頁面變化
① 多了兩個微服務的名稱
② 選擇某個微服務,進行條件查找,比如說有時間過濾等條件篩選
③ 點擊進某個鏈路,能清楚看到鏈路的調用情況
到此,表示SpringCloud Sleuth分佈式請求鏈路追蹤兼容zipkin 搭建實現完畢~~~