默认情况下,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 跟踪数据已经成功保存进来了。