前言
之前章節中已經實現了zipkin數據持久化至elasticsearch,但其帶來了一個負面作用,無法正常顯示dependencies。通過閱讀zipkin在github說明,可以看到已經有了解決方案,本章將介紹如何實現並驗證。
本章概要
1、尋找解決方案;
2、方案驗證;
尋找解決方案
4、官方提供了兩種使用方式:
方案驗證
1、依次啓動consul、configserver、service1(4001)、consumer1(3331)、api-gatway(5001)五個服務;
2、確保rabbitMQ已經啓動;
3、確保elasticsearch服務已經啓動(啓動一個elasticsearch插件head,對應端口9100);
4、確保kibana(5601)服務已經啓動;
5、最後啓動zipkin-server(9411)服務;
7、可以看到如下三條請求的鏈路信息:
8、通過ES的head插件,可以看到相關的索引名稱:
Note:
- 特別關注紅色標記部分,也就是'今天'的索引;
- 1-19已經做過驗證,故已經生成了dependency相對應的索引,本次調試僅僅爲了整理記錄,故未刪除;
9、執行docker命令如下即可:
docker run --name zipkin-dependencies --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.16.98:9200
--env ES_INDEX=zipkin --rm=true -e JAVA_OPTS="-Xmx3550m -Xms3550m" openzipkin/zipkin-dependencies:1.9.2
Note:
- 啓動可能出現異常,提示內存不夠,故添加JAVA_OPTS,其對應於Dockerfile中的配置;
- 特別關注鏡像的版本,並非使用最新的版本能夠向下兼容所有,當前使用1.9.2版本;
- 紅色框部分可以看到其數據存儲至ES中,新建了一個zipkin:dependency-2018-01-30索引
10、可以看到新增瞭如下索引
11、此時我們再來看Dependencies,即可看下如下的服務依賴圖:
12、簡單的穿透查看api-gateway和consumer1之間的調用關係:
其對應的索引文檔如下:
原始文檔版本也更新了:
總結:
zipkin-dependencies可以理解爲一個插件工具,其提供了對當日索引文檔的分析處理,其不能作爲一個實時服務應用,在實際生產環境中,需要根據實際業務需要設定其處理模式,如通過腳本輪詢處理,達到僞實時,目前來看必要性不是很大。
擴展
結合之前1-19號生成的索引,做一個跨度查詢
可以看到數據已經被聚合,其中api-gateway請求consumer1次數大於consumer1請求service1次數此時,故可以看到兩條線有明顯的差異,具體請求次數如下:
簡單看下原始數據文檔,1-19索引:
1-30索引:
與上述最終顯示結果一致。