1. 程式人生 > >使用zipkin做分布式鏈路監控

使用zipkin做分布式鏈路監控

java

介紹

Zipkin 為一個分布式的調用鏈跟蹤系統( distributed tracing system ) ,設計來源於 google dapper paper
官方網站 http://zipkin.io/
快速入門

安裝方式一:使用zipkin官方提供的jar啟動服務
zipkin官方提供了一個現成的使用springboot寫的zipkin服務端,客戶端的鏈路監控報告可以通過多種方式(下文會講解具體的方式)向服務端發送報告。
系統需要安裝java8
下載地址 https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

配置詳解

查看源碼可知其有4種持久化方式,本文選擇使用最熟悉的mysql持久化鏈路調用信息。

首先建立數據庫:
默認情況下 zipkin 運行時數據保存在內存中,重啟數據會丟失
數據庫腳本下載 (https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql/src/main/resources/mysql.sql)

查看與mysql storage相關的配置

@ConfigurationProperties("zipkin.storage.mysql")
public class ZipkinMySQLStorageProperties implements Serializable { // for Spark jobs

private static final long serialVersionUID = 0L;

private String host = "localhost";
private int port = 3306;
private String username;
private String password;
private String db = "zipkin";
private int maxActive = 10;
private boolean useSsl;
...
}
所以,我們使用mysql作為持久化策略,啟動服務端的腳本也就有了

java -server -jar zipkin-server-1.26.0-exec.jar --zipkin.storage.type=mysql --zipkin.storage.mysql.host=localhost --zipkin.storage.mysql.port=3306 --zipkin.storage.mysql.username=root --zipkin.storage.mysql.password=root --zipkin.storage.mysql.db=zipkin

安裝方式二
springcloud官方按照傳輸方式分成了三種啟動服務端的方式:Sleuth with Zipkin via HTTP,Sleuth with Zipkin via Spring Cloud Stream,Spring Cloud Sleuth Stream Zipkin Collector。只需要添加相應的依賴,之後配置相應的註解,如@EnableZipkinStreamServer即可。具體配置參考官方文檔:
(http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/1.2.1.RELEASE/#_adding_to_the_project)
項目中,我們使用第一種作為服務端的啟動方式,使用mysql作為持久化方案

被監控項目配置

application.properties

spring:
zipkin:
#服務端地址
base-url: http://10.19.52.11:9411
#本項目服務名
service:
name: ${spring.application.name}
sleuth:
#監控開關
enabled: true
#采樣率
sampler:
percentage: 1
springboot對zipkin的自動配置可以使得所有RequestMapping匹配到的endpoints得到監控,以及強化了restTemplate,對其加了一層攔截器,使得由他發起的http請求也同樣被監控。

motan rpc調用監控

Motan通過filter的SPI擴展機制支持OpenTracing,可以支持任何實現了OpenTracing標準的trace實現。使用OpenTracing需要以下步驟。

1.引入filter-opentracing擴展

<dependency>
<groupId>com.weibo</groupId>
<artifactId>filter-opentracing</artifactId>
<version>release</version>
</dependency>
2.如果第三方trace工具聲明了io.opentracing.Tracer的SPI擴展,直接引入第三方trace的jar包即可。如果第三方沒有聲明,則轉第三步。

3.自定義一個TracerFactory實現TracerFactory接口,通過getTracer()來獲取不同tracer實現。設置OpenTracingContext的tracerFactory為自定義的TracerFactory即可。

項目中的具體配置:

MotanConfig.java

@Bean(name = "motanServerBasicConfig")
public BasicServiceConfigBean baseServiceConfig(@Value("${spring.sleuth.enabled:false}") Boolean tracing
) {
BasicServiceConfigBean config = new BasicServiceConfigBean();
...
if(tracing){
config.setFilter("sleuth-tracing");
}
...
return config;
}

@Bean
SleuthTracingContext sleuthTracingContext(@Autowired(required = false) org.springframework.cloud.sleuth.Tracer tracer){
SleuthTracingContext context = new SleuthTracingContext();
context.setTracerFactory(new SleuthTracerFactory() {@Override
br/>@Override
return tracer;
}
});

    return context;
}

數據查詢

具體的服務就不列出來了,為了演示依賴關系,service1使用restTemplate調用了service2,service2調用了service3,service4。
還有一些現成的motan調用

find a trace
當應用正常啟動後,可以通過 http://10.19.52.11:9411 查看管理端

項目已經成功被監控

Dependencies
motan依賴樹:

http依賴樹:

java架構、java高級開發、nginx、dubbo、java分布式架構、redis、jvm、多線程、java網絡編程、netty、kafka、spring,Mybatis,高可用,高性能

需要學習資料和路線可以加Java高級交流群:( 725633148 ) 每晚8點高清在線直播與你分享java企業當下招聘人才需求,怎麽學Java,和學習什麽內容,相信你了解之後對你今後學習Java會有非常大的幫助

使用zipkin做分布式鏈路監控