1.zipkinserver的搭建
注意:因為關於 Zipkin 的服務端,在Spring Boot 2.x 版本后,官方就不推薦自行定制編譯了(自行搭建方式在本文末補充),反而是直接提供了編譯好的 jar 包來給我們使用(下載zipkin-server-xxx.jar ,使用JAVA命令啟動該JAR,zipkin-server.jar是一個打包好的springBoot應用,springBoot自帶tomcat因此只要啟動JAR包就可以訪問了。 java -jar zipkin-server-xxx.jar 啟動完后訪問localhost:9411可以查看統計界面)。還有其他兩種方式搭建zipkinserver方式,詳細情況參看
2.構件網關工程以及服務提供工程,這兩個工程作為Zipkin 客戶端, 需要將鏈路數據上傳給Zipkin Server,同時它也作為 EurekaClient。
a.網關pom如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
b.網關的配置文件如下:
====================================
server.port=8768
spring.application.name=zipkinzuulclient
#指定 Zipkin Server 地址
spring.zipkin.base-url=http://localhost:9411
#通過配置這個參數來決定了日志記錄發送給采集器的概率,0-1交給使用者自己配置。開發階段和運行初期,
#一般配置成1全量收集日志,在默認情況下,該值為 0.1
spring.sleuth.sampler.percentage=1.0
#以下兩個配置就可以將以"/sayhi/**"開頭的 Url路由指定的url
zuul.routes.sayhi.path=/sayhi/**
zuul.routes.sayhi.url=http://localhost:1000
===================================
c.服務提供工程的pom如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
d.服務提供工程的配置
=====================================
spring.application.name=zipkinclient
server.port=1000
#設置服務注冊中心的URL,本服務要向該服務注冊中心注冊自己
eureka.client.serviceUrl.defaultZone=http://ipa:8761/eureka
#指定 Zipkin Server 地址
spring.zipkin.base-url=http://localhost:9411
#通過配置這個參數來決定了日志記錄發送給采集器的概率,0-1交給使用者自己配置。開發階段和運行初期,
#一般配置成1全量收集日志,在默認情況下,該值 為 0.1
spring.sleuth.sampler.percentage=1.0
============================================
3.完整的項目搭建完畢,依次啟動 eurekaserver、zipkinserver、zipkinzuulclient 和 zipkinclient。 在瀏覽器上訪問http://localhost:8768/sayhi/GetTest/getTest, 瀏覽器顯示:I am from :1000 再訪問 http://localhost:9411 ,即訪問 Zipkin 的展示界面,點擊find traces可以看到對應的鏈路數據,例如請求的調用時間、消耗時間,以及請求調用的鏈路情況。(注意:需要先訪問服務產生鏈路記錄,才能在zipkin界面查到相應的servicename和spanname)
4.可以在鏈路中添加自定義數據,本案例在 zipkinzuulclient服務中新建一個過濾器,它的類型為 post 類型, order為0,開啟攔截。在過濾器的攔截邏輯方法里, 通過 Tracer 的 addTag 方法在本案例中加上了鏈路的操作人,過濾器中部分代碼如下:
@Autowired Tracer tracer;//首先注入Tracer對象 @Override public Object run() { //在鏈路中添加鏈路操作人員記錄 tracer.addTag("user", "lucus"); return null; }
