Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题

  • 我只想插入大量的测试数据,不是想测试性能,有没有自动办法生成TB级别的测试数据?

  • 有工具?还是说有测试数据集之类的东西?

    ——问题来源于 Elasticsearch 中文社区

    https://elasticsearch.cn/question/13129

2、问题解析

其实类似的问题之前在社群也经常被问到。实战业务场景中在没有大规模数据之前,可能会构造生成一些模拟数据,以实现性能测试等用途。

真实业务场景一般不愁数据的,包含但不限于:

  • 生成数据

  • 业务系统产生数据

  • 互联网、设备等采集生成的数据

  • 其他产生数据的场景.....

回归问题,Elasticsearch 8.X 如何构造呢?

社群达人死敌wen大佬给出的方案:两个 sample data的index来回reindex,一次操作数据量翻倍。

实际,死敌 wen 大佬指的是如下三部分的样例数据。

194ccd739df4590bedc8713d6756f206.png

那么有没有其他的解决方案呢?本文给出两种方案。

2ace2e08be0c6aef8322951045cc303a.jpeg

3、方案一、elasticsearch-faker 构造数据

3.0 elasticsearch-faker 工具介绍

elasticsearch-faker 是一个用于为 Elasticsearch 生成虚假数据的命令行工具。

它通过模板来定义将要生成的数据结构,并在模板中使用占位符来表示动态内容,比如随机用户名、数字、日期等。

这些占位符将由 Faker 库提供的随机生成数据填充。执行时,该工具会根据指定的模板生成文档,并将它们上传到 Elasticsearch 索引中,用于测试和开发,以检验 Elasticsearch 查询和聚合的功能。

3.1 第一步:安装工具集

https://github.com/thombashi/elasticsearch-faker#installation

pip install elasticsearch-faker
1f29a9ec519c3e67bd226c1b8d1744ea.png

3.2 第二步:制作启动脚本 es_gen.sh

#!/bin/bash# 设置环境变量
export ES_BASIC_AUTH_USER='elastic'
export ES_BASIC_AUTH_PASSWORD='psdXXXXX'
export ES_SSL_ASSERT_FINGERPRINT='XXddb83f3bc4f9bb763583d2b3XXX0401507fdfb2103e1d5d490b9e31a7f03XX'# 调用 elasticsearch-faker 命令生成数据
elasticsearch-faker --verify-certs generate --doc-template doc_template.jinja2 https://172.121.10.114:9200 -n 1000

同时,编辑模版文件 doc_template.jinja2。

模版如下所示:

{"name": "{{ user_name }}","userId": {{ random_number }},"createdAt": "{{ date_time }}","body": "{{ text }}","ext": "{{ word }}","blobId": "{{ uuid4 }}"
}

3.3 第三步:执行脚本 es_gen.sh

[root@VM-0-14-centos elasticsearch-faker]# ./es_gen.sh 
document generator #0: 100%|███████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [00:00<00:00, 1194.47docs/s]
[INFO] generate 1000 docs to test_index[Results]
target index: test_index
completed in 10.6 secs
current store.size: 0.8 MB
current docs.count: 1,000
generated store.size: 0.8 MB
average size[byte]/doc: 831
generated docs.count: 1,000
generated docs/secs: 94.5
bulk size: 200
509ede23d559017faa642e944b77af43.png

3.4 第4步:查看导入数据结果, kibana 查看。

2894ff76870b7bd74cd482eea0e4fd01.png 32ef4be38c8cd59af689f36e6d4affd5.png
"hits": [{"_index": "test_index","_id": "2ff2971b-bc51-44e6-bbf7-9881050d5b78-0","_score": 1,"_source": {"name": "smithlauren","userId": 207,"createdAt": "1982-06-14T03:47:00.000+0000","body": "Risk cup tax. Against growth possible something international our themselves. Pm owner card sell responsibility oil.","ext": "mean","blobId": "c4f5c8dc-3d97-44ee-93da-2d93be676b8b"}},{

4、使用 Logstash  generator 插件生成随机样例数据

3851c240cb054d812f7bb145daac3d38.jpeg

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 的配置文件,并填入以下内容:

input {generator {lines => ['{"regist_id": "UUID", "company_name": "RANDOM_COMPANY", "regist_id_new": "RANDOM_NEW"}']count => 10codec => "json"}
}filter {ruby {code => 'require "securerandom"event.set("regist_id", SecureRandom.uuid)event.set("company_name", "COMPANY_" + SecureRandom.hex(10))event.set("regist_id_new", SecureRandom.hex(10))'}
}output {elasticsearch {hosts => ["https://172.121.110.114:9200"]index => "my_log_index"user => "elastic"password => "XXXX"ccacert => "/www/elasticsearch_0810/elasticsearch-8.10.2/config/certs/http_ca.crt"}stdout { codec => rubydebug }
}

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 并生成数据:

$ bin/logstash -f logstash-random-data.conf

执行结果如下:

6b7d69be54f3c856fdff004a80701e3d.png

kibana 查看数据结果如下:

993b15bcf0791fe7193f1f368f96e060.png

借助 Logstash,我们可以轻松生成大量的随机样例数据,用于 Elasticsearch 的测试和开发。这种方法不仅高效,而且可以灵活地根据需求生成各种格式的数据。

5、小结

上述的验证都是使用 Elasticsearch 8.10.2 版本验证通过的。

其实除了文章给出的两种方案外,还有很多其他的方案,比如:esrally 生成测试数据、借助 Python 的 Faker 实现样例数据构造,Common Crawl、Kaggle 等网站提供大型的公共数据集,可以作为测试数据的来源。

大家有没有遇到类似问题,是如何实现的?欢迎留言交流。

推荐阅读

  • 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  • 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  • 如何系统的学习 Elasticsearch ?

  • 那些 ChatGPT4 也搞不定的 Elasticsearch 问题,请抛给我们!

52a06f61bfa09d240fb4197389a6c574.jpeg

更短时间更快习得更多干货!

中国50%+Elastic认证专家出自于此!

2f88090bcba38805e2cfda15528af5da.gif

比同事抢先一步学习进阶干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/158484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 设置平滑光标

1.点击左下角的设置按钮&#xff0c;再点击设置 2.点击文本编辑器&#xff0c;点击光标&#xff0c;勾选控制是否启用平滑插入动画。 3.随便打开一个文件&#xff0c;上下左右移动光标时&#xff0c;会发现非常的流畅。 原创作者&#xff1a;吴小糖 创作时间&#xff1a;2023…

STM32:AHT20温湿度传感器驱动程序开发

注&#xff1a;温湿度传感器AHT20数据手册.pdf http://www.aosong.com/userfiles/files/AHT20%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6(%E4%B8%AD%E6%96%87%E7%89%88)%20B1.pdf 一、分析AHT数据手册文档 (1).准备工作 1.新建工程。配置UART2 2.配置I2C1为I2C标准模式&…

Docker dnmp 多版本php安装 php8.2

Laravel9 开发需要用到php8.1以上的版本&#xff0c;而dnmp只支持到php8.0。安装php8.2的步骤如下&#xff1a; 1. 从/services/php80目录复制一份出来&#xff0c;重命名为php82&#xff0c;extensions目录只保留 install.sh 和 install-php-extensions 这两个文件 2. 修改.en…

234. 回文链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天分享一些包括但不限于计算机基础、算法等相关的知识点&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&#x1f4d6;是你想要的&#x1f497; ⛽️今…

接口测试 —— Jmeter读取数据库数据作测试参数

1、添加Jdbc Request 2、添加ForEach控制器(右键线程组->逻辑控制器->ForEach控制器) ①输入变量的前缀&#xff1a;mobilephone&#xff1b; 从jdbc request设置的变量得知&#xff0c;我们要取的值为mobilephone_1、mobilephone_2、mobilephone_3......所以这里输入m…

CSS3中的字体和文本样式

CSS3优化了CSS 2.1的字体和文本属性&#xff0c;同时新增了各种文字特效&#xff0c;使网页文字更具表现力和感染力&#xff0c;丰富了网页设计效果&#xff0c;如自定义字体类型、更多的色彩模式、文本阴影、生态生成内容、各种特殊值、函数等。 1、字体样式 字体样式包括类…

在前端实现小铃铛上展示消息

点击铃铛显示如下消息框&#xff1a; 如果点击消息&#xff0c;可以实现消息从列表中移除,并从铃铛总数上进行扣减对应的已读消息数。 关于以上功能的实现方式&#xff1a; <!-- 铃铛位置 --><i class"el-icon-bell" click"showPopover true"&…

Jenkins中解决下载maven包巨慢的问题

背景介绍 我们在使用jenkins构建maven项目时由于依赖很多第三方jar包&#xff0c;默认会从maven中央仓库下载&#xff0c;由于maven中央仓库服务器是国外的&#xff0c;所以下载很慢&#xff0c;甚至会超时 解决办法 增加jenkins maven 源配置 如下图所示&#xff0c;增加m…

Nacos本地修改编译源码2.2.3

下载Nacos源码 由于github访问速度慢&#xff0c;所以在gitee上下载 git clone https://gitee.com/mirrors/Nacos.git切换2.2.3版本 git checkout 2.2.3或者直接下载2.2.3的源码 本地编译 源码导入idea&#xff0c;然后编译 mvn -Dmaven.test.skiptrue -Drat.skiptrue c…

开关电源综合测试 | 开关循环的测试方法和规范科普

开关电源在设计、生产、出厂时会经过一系列反复试验&#xff0c;保证其稳定性和可靠性&#xff0c;确保开关电源可以稳定正常运行&#xff0c;保护设备不受损坏。开关循坏测试是开关电源综合测试项目之一&#xff0c;目的是为了检测开关电源是否能承受连续开关操作下的冲击。开…

Element UI的table不同应用

目录 一、自定义表头 二、纵向表头(动态表头) 2.1、分别拿到表头和表头中日期对应的行数据 2.2、拿到每个日期对应的列数据 一、自定义表头 <el-table-column prop"chu" align"center"><!-- 自定义表头 --><template slot"header…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路&#xff0c;还是从比较好的图片或者是civitai上找一些热门的prompt&#xff0c;从小红书上也找到了不少的prompt&#xff0c;lexica.art上也有不少&#xff0c;主要是为了电商场景的一些测评&#xff1a; 小红书、civitai、Lexica、Liblib.ai、 depth o…