1. 程式人生 > >(七)日誌採集工具sleuth--分散式鏈路跟蹤

(七)日誌採集工具sleuth--分散式鏈路跟蹤

 

微服務架構上通過業務來劃分服務的,通過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
來源:簡書