
Elasticsearch 8.X 如何生成 TB 级的测试数据 ?
1、实战问题
- 我只想插入大量的测试数据,不是想测试性能,有没有自动办法生成TB级别的测试数据?
- 有工具?还是说有测试数据集之类的东西?
2、问题解析
其实类似的问题之前在社群也经常被问到。实战业务场景中在没有大规模数据之前,可能会构造生成一些模拟数据,以实现性能测试等用途。
真实业务场景一般不愁数据的,包含但不限于:
- 生成数据
- 业务系统产生数据
- 互联网、设备等采集生成的数据
- 其他产生数据的场景.....
回归问题,Elasticsearch 8.X 如何构造呢?
社群达人死敌wen大佬给出的方案:两个 sample data的index来回reindex,一次操作数据量翻倍。
实际,死敌 wen 大佬指的是如下三部分的样例数据。
那么有没有其他的解决方案呢?本文给出两种方案。
3、方案一、elasticsearch-faker 构造数据
3.0 elasticsearch-faker 工具介绍
elasticsearch-faker 是一个用于为 Elasticsearch 生成虚假数据的命令行工具。
它通过模板来定义将要生成的数据结构,并在模板中使用占位符来表示动态内容,比如随机用户名、数字、日期等。
这些占位符将由 Faker 库提供的随机生成数据填充。执行时,该工具会根据指定的模板生成文档,并将它们上传到 Elasticsearch 索引中,用于测试和开发,以检验 Elasticsearch 查询和聚合的功能。
3.1 第一步:安装工具集
https://github.com/thombashi/elasticsearch-faker#installation
3.2 第二步:制作启动脚本 es_gen.sh
同时,编辑模版文件 doc_template.jinja2。
模版如下所示:
3.3 第三步:执行脚本 es_gen.sh
3.4 第4步:查看导入数据结果, kibana 查看。
4、使用 Logstash generator 插件生成随机样例数据
4.1 准备环境
确保你的环境中已经安装了 Elasticsearch 8.X 和 Logstash 8.X。Elasticsearch 应该配置正确,并且运行在 HTTPS 上。
另外,确保 Elasticsearch 的相关证书已经正确配置在 Logstash 中。
4.2 生成样例数据
我们将使用 Logstash 的 generator 输入插件来创建数据,并使用 ruby 过滤器插件来生成 UUID 和随机字符串。
4.3 Logstash 配置
创建一个名为 logstash-random-data.conf 的配置文件,并填入以下内容:
4.4 分析配置文件
- 1.Input
- a.generator 插件用于生成事件流。
- b.lines 包含一个 JSON 字符串模板,它定义了每个事件的结构。
- c.count 指定了要生成的文档数量。
- d.codec 设置为 json 以告诉 Logstash 期望的输入格式。
- 2.Filter
- a.ruby 过滤器用于执行 Ruby 代码。
- b.代码片段内生成了一个 UUID 作为 regist_id。
- c.company_name 和 regist_id_new 使用随机十六进制字符串填充。
- 3.Output
- a.指定 Elasticsearch 的主机、索引、用户认证信息及证书。
- b.stdout 输出用于调试,它会输出 Logstash 处理后的事件。
4.5 运行 Logstash
将配置文件保存后,在终端运行以下命令以启动 Logstash 并生成数据:
执行结果如下:
kibana 查看数据结果如下:
借助 Logstash,我们可以轻松生成大量的随机样例数据,用于 Elasticsearch 的测试和开发。这种方法不仅高效,而且可以灵活地根据需求生成各种格式的数据。
5、小结
上述的验证都是使用 Elasticsearch 8.10.2 版本验证通过的。
其实除了文章给出的两种方案外,还有很多其他的方案,比如:esrally 生成测试数据、借助 Python 的 Faker 实现样例数据构造,Common Crawl、Kaggle 等网站提供大型的公共数据集,可以作为测试数据的来源。
大家有没有遇到类似问题,是如何实现的?欢迎留言交流。
文章转载自公众号:铭毅天下Elasticsearch
