spring cloud(七、鏈路追蹤)
阿新 • • 發佈:2018-11-21
Spring Cloud Sleuth 主要功能就是在分散式系統中提供追蹤解決方案,並且相容支援了 zipkin,zipkin為分散式鏈路呼叫監控系統,聚合各業務系統呼叫延遲資料,達到鏈路呼叫監控跟蹤。
隨著微服務數量不斷增長,它們之間的關係會越來越複雜,如果鏈路上任何一個服務出現問題或者網路超時,都會形成導致介面呼叫失敗,需要跟蹤一個請求從一個微服務到下一個微服務的傳播過程
分散式服務跟蹤可以:
- 提供鏈路追蹤,故障快速定位:可以通過呼叫鏈結合業務日誌快速定位錯誤資訊
- 視覺化各個階段耗時,進行效能分析
- 各個呼叫環節的可用性、梳理服務依賴關係以及優化
- 資料分析,優化鏈路:可以得到使用者的行為路徑,彙總分析應用在很多業務場景
案例主要有三個工程組成:
一個server-zipkin,它的主要作用使用ZipkinServer 的功能,收集呼叫資料,並展示;
一個service-hi,對外暴露hi介面;
一個service-miya,對外暴露miya介面;
這兩個service可以相互呼叫;並且只有呼叫了,server-zipkin才會收集資料的
一、server-zipkin
在spring Cloud為F版本的時候,已經不支援自己構建Zipkin Server了,下載jar啟動即可,下載地址:
https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
或https://pan.baidu.com/s/1w614Z8gJXHtqLUB6dKWOpQ 密碼:26pf
下載完成jar 包之後,需要執行jar,如
java -jar zipkin-server-2.10.1-exec.jar
二、service-hi
引入依賴spring-cloud-starter-zipkin
配置檔案:
server: port: 8988 spring: zipkin: base-url: http://localhost:9411 application: name: service-hi
啟動類:
@SpringBootApplication
@RestController
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
private static final Logger LOG = Logger.getLogger(ServiceHiApplication.class.getName());
@Autowired
private RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping("/hi")
public String callHome(){
LOG.log(Level.INFO, "calling trace service-hi ");
return restTemplate.getForObject("http://localhost:8989/miya", String.class);
}
@RequestMapping("/info")
public String info(){
LOG.log(Level.INFO, "calling trace service-hi ");
return "i'm service-hi";
}
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
三、service-miya
引入依賴spring-cloud-starter-zipkin
配置檔案:
server:
port: 8989
spring:
zipkin:
base-url: http://localhost:9411
application:
name: service-miya
啟動類:
@SpringBootApplication
@RestController
public class ServiceMiyaApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceMiyaApplication.class, args);
}
private static final Logger LOG = Logger.getLogger(ServiceMiyaApplication.class.getName());
@RequestMapping("/hi")
public String home(){
LOG.log(Level.INFO, "hi is being called");
return "hi i'm miya!";
}
@RequestMapping("/miya")
public String info(){
LOG.log(Level.INFO, "info is being called");
return restTemplate.getForObject("http://localhost:8988/info",String.class);
}
@Autowired
private RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
四、演示
再開啟http://localhost:9411,選擇“依賴分析”
點選其他按鈕會出現呼叫情況的相關資料