默認情況下,Zipkin Server 都會將跟蹤信息存儲在內存中,每次重啟 Zipkin Server 都會使之前收集的跟蹤信息丟失,並且當有大量跟蹤信息時我們的內存存儲也會成為瓶頸。
在前文中我演示了如何將跟蹤信息對接到 MySQL 中去(
點擊查看)。本文接着演示如何使用 Elasticsearch 實現 Zipkin 的數據持久化。
三、使用 Elasticsearch 存儲數據
1,准備 Elasticsearch 環境
首先我們需要啟動一個 Elasticsearch 服務,具體步驟可以參考我之前寫的文章:
2,啟動 Zipkin 服務
(1)Zipkin 啟動時只需要指定好 Elasticsearch 連接信息即可。如果是通過 jar 包運行,則執行如下命令:
1
|
java -jar zipkin-server-2.19.3-
exec
.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=192.168.60.133:9200
|
(2)如果通過 Docker 鏡像運行,則執行如下命令:
1
|
docker run --name zipkin -d -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.60.133:9200 openzipkin/zipkin
|
(3)如果每次都要使用 docker 命令來分別啟動 zipkin 容器還是略顯繁瑣,我們也可以通過 Docker Compose 進行啟動,docker-compose.yml 文件內容如下:
version: '2'
services:
zipkin:
image: openzipkin/zipkin
container_name: zipkin
environment:
- STORAGE_TYPE=elasticsearch
- ES_HOSTS=192.168.60.133:9200
#- RABBIT_ADDRESSES=192.168.60.133:5672
#- RABBIT_USER=hangge
#- RABBIT_PASSWORD=123
ports:
- 9411:9411
3,運行測試
(1)通過上面的設置之后,我們完成了將 Zipkin Server 從內存存儲跟蹤信息切換為 Elasticsearch 存儲信息的改造。后續所有的跟蹤信息都會存放到 Elasticsearch 中。
(2)我們使用谷歌瀏覽器插件 ElasticSearch Head 查看當前 Elasticsearch 集群的信息。可以發現 Zipkin 跟蹤數據已經成功保存進來了。