1.簡介前端
(1)什麼是服務追蹤 Sleuthjava
在微服務架構中,要完成一個功能,經過Rest請求服務API調用服務來完成,整個調用過程可能會聚合多個後臺服務器協同完成。在整個鏈路上,任何一處調用超時web
或出錯都有可能形成前端請求失敗。這時跟蹤記錄這些請求的調用的狀況就要複雜的多,這就須要一個專門的工具來處理,spring cloud sleuth組件就是用於跟蹤記錄的工具spring
Sleuth就至關於爲微服務架構引入了一套記錄體系,包含兩部分,一個是 trace ID;另外一個是 span ID,隨時記錄一個請求的每一步操做。服務器
(2)什麼是日誌聚合 Zipkin架構
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:787707172,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。app
zipkin 是 Dpper的開源實現,支持多種語言。Sleuth已經將每一個請求從開始調用到完成的每一步都進行了記錄,可是這些log信息會很分散,使用起來不太方便,就分佈式
須要有一個工具能夠將這些信息進行收集和彙總,而且顯示可視化的結果,便於分析和定位。這就須要建立一個 Zipkin Server用於收集和展現這些調用鏈路的信息,他微服務
的使用也很方便。工具
2.如何使用
本例須要建立三個工程:
product-sevice 普通客戶端工程,提供一個rest接口(項目建立參考第三節)
order-service 普通客戶端工程,用於調用product-service服務(項目建立參考第三節)
zipkin-service 日誌服務工程,用於追蹤記錄請求鏈路。
第一步:建立 zipkin-service,做爲Zipkin Server。
工程目錄如圖:
(1)首先在 pom.xml中增長依賴
<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency>
(2)在啓動類增長@EnableZipkinServer註解,用來開啓Zipkin Server的功能。
package com.hole; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import zipkin.server.EnableZipkinServer; @EnableDiscoveryClient @EnableZipkinServer @SpringBootApplication public class ZipkinServiceApplication { private static Logger logger = LoggerFactory.getLogger(ZipkinServiceApplication.class); public static void main(String[] args) { SpringApplication.run(ZipkinServiceApplication.class, args); } }
(3)application.properties配置以下:
spring.application.name=zipkin-service server.port=9411 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
(4)啓動 Zipkin Server,訪問 http://localhost:9411/,此時由於尚未服務請求關聯的zipkin server,因此服務名裏列表裏是空的,如圖:
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:787707172,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。
第二步:建立日誌客戶端工程
想要在界面上能看到zipkin server蒐集的日誌信息及依賴關係,須要在每一個工程中增長sleuth與zipkin的依賴,而後增長註冊地址,指向到 zipkin server上就能夠了。
1.(1)建立product-service工程,並增長依賴。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
(2)application.properties配置增長配置,指向 zipkin server服務地址。
spring.zipkin.base-url=http://localhost:9411/
(3)啓動類代碼增長 /hello 接口,並在接口入口處作一個日誌打印,代碼以下
package com.hole; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @EnableDiscoveryClient @SpringBootApplication @RestController public class ProductServiceApplication { private static Logger logger = LoggerFactory.getLogger(ProductServiceApplication.class); public static void main(String[] args) { SpringApplication.run(ProductServiceApplication.class, args); } @RequestMapping(value = "/hello",method = RequestMethod.GET) public ResponseEntity<String> hello(){ logger.info("called by product-service"); return new ResponseEntity<String>("hello product service!", HttpStatus.OK); } }
2.(1)建立order-service工程。
依賴和配置同 product-sevice。
(2)啓動類增長 /product/hello接口,目的是調動 product-service接口。在接口入口位置作一個日誌打印。
package com.hole; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient @SpringBootApplication @RestController public class OrderServiceApplication { private static Logger logger = LoggerFactory.getLogger(OrderServiceApplication.class); @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } @Autowired RestTemplate restTemplate; public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); } @RequestMapping(value = "/hello",method = RequestMethod.GET) public ResponseEntity<String> hello(){ return new ResponseEntity<String>("hello order service!", HttpStatus.OK); } @RequestMapping(value = "/product/hello",method = RequestMethod.GET) public String productHello(){ logger.info("order-service calling product-service!"); return restTemplate.getForEntity("http://PRODUCT-SERVICE/hello",String.class).getBody(); } }
第三步:啓動項目並驗證。
(1)啓動所有項目,啓動成功後在監控頁面查看結果。
(2)訪問 order-service 服務的 /product/hello接口,結果訪問成功。能夠多刷新幾回
(3)訪問 zipkin server(9411端口),查看日誌服務列表,發現service name下拉框已有下拉選項,驗證成功。
點擊 Find Traces 查看結果能夠看到它的完整鏈路條,點擊鏈條能夠看到調用鏈條,點擊 Dependencies能夠查看依賴關係,等等,自行發覺吧,就不上圖了。
歡迎工做一到八年的Java工程師朋友們加入Java高級交流:787707172
本羣提供免費的學習指導 架構資料 以及免費的解答
不懂得問題均可以在本羣提出來 以後還會有直播平臺和講師直接交流噢