1. 程式人生 > >spring cloud(七、鏈路追蹤)

spring cloud(七、鏈路追蹤)

Spring Cloud Sleuth 主要功能就是在分散式系統中提供追蹤解決方案,並且相容支援了 zipkin,zipkin為分散式鏈路呼叫監控系統,聚合各業務系統呼叫延遲資料,達到鏈路呼叫監控跟蹤。

隨著微服務數量不斷增長,它們之間的關係會越來越複雜,如果鏈路上任何一個服務出現問題或者網路超時,都會形成導致介面呼叫失敗,需要跟蹤一個請求從一個微服務到下一個微服務的傳播過程

分散式服務跟蹤可以:

  1. 提供鏈路追蹤,故障快速定位:可以通過呼叫鏈結合業務日誌快速定位錯誤資訊
  2. 視覺化各個階段耗時,進行效能分析
  3. 各個呼叫環節的可用性、梳理服務依賴關係以及優化
  4. 資料分析,優化鏈路:可以得到使用者的行為路徑,彙總分析應用在很多業務場景

案例主要有三個工程組成: 
一個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

 訪問http://localhost:9411

二、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/

 訪問http://localhost:8989/miya

再開啟http://localhost:9411,選擇“依賴分析”

 點選其他按鈕會出現呼叫情況的相關資料

原始碼:https://github.com/lrn-white/springcloud