(七)日誌採集工具sleuth--分散式鏈路跟蹤
阿新 • • 發佈:2018-12-29
微服務架構上通過業務來劃分服務的,通過REST呼叫,對外暴露的一個介面,可能需要很多個服務協同才能完成這個介面功能,如果鏈路上任何一個服務出現問題或者網路超時,都會形成導致介面呼叫失敗。隨著業務的不斷擴張,服務之間互相呼叫會越來越複雜,在專案中引入sleuth可以方便程式進行除錯。
Spring Cloud Sleuth為服務之間呼叫提供鏈路追蹤。通過Sleuth可以很清楚的瞭解到一個服務請求經過了哪些服務,每個服務處理花費了多長。從而讓我們可以很方便的理清各微服務間的呼叫關係。此外Sleuth可以幫助我們:
- 耗時分析: 通過Sleuth可以很方便的瞭解到每個取樣請求的耗時,從而分析出哪些服務呼叫比較耗時;
- 視覺化錯誤: 對於程式未捕捉的異常,可以通過整合Zipkin服務介面上看到;
- 鏈路優化: 對於呼叫比較頻繁的服務,可以針對這些服務實施一些優化措施。
改造前面的feign、service(服務)
pom增加:
<!--sleuth跟蹤--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
feign增加日誌:
@Autowired
private IFeignService feignService;
private static Logger log = LoggerFactory.getLogger(FeignController.class);
@RequestMapping("/index")
public String index(){
log.info("feign info"); return feignService.index(); // @FeignClient(value = "service-hello")
}
service增加日誌:
private static Logger log = LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/index")
public String index() {
log.info("service info");
System.err.println("服務提供者client:" + name + "服務埠:" + port);
return "服務提供者client:" + name + "服務埠:" + port;
}
啟動測試
2018-12-29 16:24:26.048 INFO [service-feign,1d270312e94cab85,1d270312e94cab85,false] 10692 --- [nio-8886-exec-8] c.e.fegin.controller.FeignController : feign info 2018-12-29 16:24:26.056 INFO [service-hello,1d270312e94cab85,5e23c30b75ee6755,false] 6560 --- [nio-8883-exec-5] c.e.e.controller.HelloController : service info日誌中類似
[appname,traceId,spanId,exportable]
,也就是Sleuth的跟蹤資料。其中:
- appname: 為微服務的服務名稱;
- traceId\spanId: 為Sleuth鏈路追蹤的兩個術語,後面我們再仔細介紹;
- exportable 是否是傳送給Zipkin
連結:https://www.jianshu.com/p/c3d191663279
來源:簡書