一、前言
在上一篇文章中Spring Cloud系列教程(十四):服务追踪SpringCloud Sleuth集成Zipkin持久化数据存储Mysql(Finchley版本),实现了将服务追踪采集的数据持久化到MySQL
数据库中,而且大家都知道zipkin
默认是存内存的,这样到了生产环境不可行,这节将实现zipkin
将数据持久化到Elasticsearch
,项目工程例子依然使用Spring Cloud系列教程(十四),请自己下载相应的代码即可。
Zipkin支持多种存储
- 内存(默认)
- MySQL(数据量大时,查询较为缓慢,不建议使用)
- Elasticsearch
- Cassandra(Twitter官方使用Cassandra作为Zipkin Server的存储,但国内大规模用Cassandra的公司较少,Cassandra相关文档也不多)
二、Elasticsearch介绍
Elasticsearch
是一个基于Lucene
构建的开源、分布式、RESTful 接口全文搜索引擎,同时Elasticsearch
还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES
能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。总之它具有以下功能:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
1. Elasticsearch应用场景
- 大型分布式日志分析系统
ELK
elasticsearch(存储日志)
+logstash(收集日志)
+kibana(展示数据)
- 大型电商商品搜索系统
- 网盘搜索引擎
2. Elasticsearch存储结构
Elasticsearch
是文件存储,Elasticsearch
是面向文档型数据库,一条数据在这里就是一个文档,用JSON
作为文档序列化的格式,比如下面这条用户数据:
{
“name” : “Thinkingcao”,
“sex” : 0,
“age” : 25
}
其中关系型数据库与Elasticsearch
对应关系:
数据库类型 | 名词1 | 名词2 | 名词3 | 名词4 |
---|---|---|---|---|
关系数据库 | 数据库 | 表 | 行 | 列(Columns) |
Elasticsearch | 索引(Index) | 类型(type) | 文档(Docments) | 字段(Fields) |
三、下载Elasticsearch
1. 环境
- SpringBoot 2.0.3.RELEASE
- SpringCloud Finchley.RELEASE
- ElasticSearch 6.5.4
- zipkin-server-2.12.9-exec.jar
注: 这只是我使用的环境,很稳定,ElasticSearch
和zipkin-server
版本可不必用此版本。
2. 下载
为了简单起见,在Windows
平台搭建Elasticsearch
的安装环境,Elasticsearch
版本我们选择 ElasticSearch6.5.4
,直接下载zip的安装包,解压开了之后直接双击.bat
批处理文件即可,下载地址如下:
-
windows:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.zip(我使用的)
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.msi
-
Linux:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
3. 启动Elasticsearch
双击elasticsearch-6.5.4\bin\elasticsearch.bat
文件即可),启动成功后输入地址: http://localhost:9200/?pretty 测试是否成功,出现下图结果说明OK。
四、启动zipkin-server
启动命令如下:
java -jar \zipkin-server-2.12.9-exec.jar
--STORAGE_TYPE=elasticsearch --ES_HOSTS=http://127.0.0.1:9200
- STORAGE_TYPE: 表明存储类型(elasticsearch )
- ES_HOSTS: 表明存储地址(http://127.0.0.1:9200)
五、测试
方案: 按照顺序依次启动以下服务,然后调用接口请求一次服务,查看zipkin-server的UI界面,发现有一条追踪的数据后,我们停掉zipkin-server,然后再以上面的方式启动(命令行设置Mysql),如果启动后能查询到我们刚才请求的哪一条服务追踪数据,说明OK了同时也可以查看数据表,会发现多了几条数据。
①. eureka-server: 服务注册中心,端口8000;
②. app-pay: 支付服务工程,端口8763;
③. app-member: 会员服务工程,端口8765;
④. app-order: 订单服务工程,端口8761;
步骤1. 访问注册中心:http://127.0.0.1:8000/
步骤2. 访问订单服务: http://127.0.0.1:8761/getOrderToMemberToMsg
步骤3. 查看zipkin-server的UI界面
步骤4. 重启zipkin-server,然后再次查看UI界面,发现依然能够查询到上一次请求的服务链路追踪数据
至此,SpringCloud Sleuth
集成Zipkin
持久化数据存储Elasticsearch
已经实战完成了,这里还看不到Elasticsearch
中的数据,可借助kibana
可视化界面查看。
六、源码
源码: https://github.com/Thinkingcao/SpringCloudLearning/tree/master/springcloud-sleuth-zipkin
七、SpringCloud系列教程
下一篇: Spring Cloud系列教程(十六):下一代网关服务Gateway(Finchley版本)
SpringCloud教程汇总: Spring Cloud系列教程(汇总篇):专栏汇总篇(持续更新中)