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.rhkb.cn/news/183659.html

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

相关文章

修改docker 版本的mysql 8.0 本机Navicat 连不上的问题

1.进入容器 docker exec -it xxxx bash 2.使用root账号登录mysql mysql -u root -p 3.查看当前加密方式 use mysql; SELECT Host, User, plugin from user; 我这是改过了&#xff0c;应该都是caching_sha2_password 4. 修改加密方式 ALTER USER root% IDENTIFIED WITH m…

solidworks安装时,出现这个错误:无法获得下列许可SOLIDWORKS Standard.无效的(不一致的)使用许可号码。(-8,544,0)

问题描述&#xff1a;在安装SolidWorks2023时&#xff0c;按照软件管家中的步骤&#xff0c;但是在打开SolidWorks2023桌面上的快捷键时&#xff0c;出现了这个错误&#xff1a; 无法获得下列许可SOLIDWORKS Standard.无效的&#xff08;不一致的&#xff09;使用许可号码。(-…

C语言——从键盘任意输人一个三位数的自然数,求该数个位、十位、百位上的数字之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,ge,shi,bai;printf("输入一个三位数整数&#xff1a;\n");scanf("%d",&i);gei%10; //个位shii%100/10; //十位baii/100; //百位printf("个位:%d,十位:%d,百位:…

Hadoop学习总结(Shell操作)

HDFS Shell 参数 命令参数功能描述-ls查看指定路径的目录结构-du统计目录下所有文件大小-mv移动文件-cp复制文件-rm删除文件 / 空白文件夹-put上传文件-cat查看内容文件-text将源文件输出文本格式-mkdir创建空白文件夹-help帮助 一、ls 命令 ls 命令用于查看指定路径的当前目录…

电脑发热发烫,具体硬件温度达到多少度才算异常?

环境&#xff1a; 联想E14 问题描述&#xff1a; 电脑发热发烫,具体硬件温度达到多少度才算异常? 解决方案&#xff1a; 电脑硬件的温度正常范围会因设备类型和使用的具体硬件而有所不同。一般来说&#xff0c;以下是各种硬件的正常温度范围&#xff1a; CPU&#xff1a;正…

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器&#xff0c;允许我们链接和编排不同的模块。可以常…

[正式学习java②]——数组的基本使用,java内存图与内存分配

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、数组的两种初始化方式 1.完整格式(静态初始化) 2.动态初始化 二、数组的遍历方式 三、数组的开辟与访问 四、数组的注意事项 1.数组直接打印打印的是地址值 2.数组在内存图中的位置 3.数组一旦开辟了…

【C语言】二分查找(含图解)

文章目录 1. 二分查找思想2. 代码实现2.1 未封装函数2.2 封装函数&#xff08;使用while循环&#xff09;2.3 封装函数&#xff08;使用递归&#xff09; 1. 二分查找思想 二分法&#xff1a;二分查找算法是一种在有序数组中查找某一特定元素的搜索算法&#xff0c;其思想就是…

预处理、编译、汇编、链接

或者一步条指令 gcc helloworld.c -o helloworld 1.预处理 宏替换去注释引入头文件 #之后的语句都是预处理语句&#xff0c; #include<iostream> 将该文件的内容拷贝到现有文件中&#xff0c;结果得到一个C程序&#xff0c;通常是以.i作为文件扩展名的。 2.编译 词…

【JAVA】我们该如何规避代码中可能出现的错误?(二)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言异常方法&#xff08;Throwable类&#xff09;Throwable类的方法 捕获异常多重捕获块 前言 异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并…

Pygame游戏实战四:打砖块

介绍模块 本游戏使用的是由Pycharm中的pygame模块来实现的&#xff0c;也可以在python中运行。通过Pygame制作一个打砖块&#xff0c;通过击打砖块来得到更多的分数&#xff0c;看看这个是你小时候玩的游戏吗&#xff1f; 最小开发框架 详情请看此文章&#xff1a;Pygame游戏…

Java 性能优化之直接使用成员变量 VS 拷贝副本

背景 刷到一个大佬的 CSDN 博客&#xff0c;仔细看了一下性能优化专栏。联想到我们的日常开发工作&#xff0c;由于业务比较简单&#xff0c;很容就忽略性能问题。但是&#xff0c;性能优化的一下常见思路&#xff0c;也早有耳闻。看了一个 Java 性能优化的方法 「减少操作指令…

APISpace 手机号码归属地API接口案例代码

1.手机号码归属地API产品介绍 APISpace 的 手机号码归属地API&#xff0c;提供全国移动、联通、电信等手机号码归属地查询&#xff0c;上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。 2.手机号码归属地API详解 2.1 接口请求 请求方式&#xff1a…

Nodejs的安装以及配置(node-v12.16.1-x64.msi)

Nodejs的安装以及配置 1、安装 node-v12.16.1-x64.msi点击安装&#xff0c;注意以下步骤 本文设置nodejs的安装的路径&#xff1a;D:\soft\nodejs 继续点击next&#xff0c;选中Add to PATH &#xff0c;旁边的英文告诉我们会把 环境变量 给我们配置好 当然也可以只选择 Nod…

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…

七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…

【C++干货铺】内存管理new和delete

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 C语言中动态内存管理方式 malloc/calloc/realloc的区别&#xff1f; C内存管理的方式 内置类型 自定义类型 operator new 和 operator delete 函数 operato…

MCU测试科普|如何进行MCU芯片测试,具体流程是什么?

MCU芯片测试系统是一种专门用于检测MCU芯片性能和质量的综合性设备。它通常由硬件和软件两部分组成&#xff0c;硬件包括测试仪器、适配器、测试夹具等&#xff0c;用于连接被测MCU芯片和测试机&#xff0c;实现高效高精度的测试。软件部分通常包括测试程序、测试管理软件等&am…

maven 上传本地jar包到nexus

maven上传命令 mvn deploy:deploy-file -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4 -Dversion4.0 -Dpackagingjar -DfileC:\java\top-sdk-java-1.0.1-lib\lib\bcprov-jdk16-1.46.jar -Durlhttp://ip:port/repository/maven-releases/ -DrepositoryIdsnapshot…

【文生图】Stable Diffusion XL 1.0模型Full Fine-tuning指南(U-Net全参微调)

文章目录 前言重要教程链接以海报生成微调为例总体流程数据获取POSTER-TEXTAutoPosterCGL-DatasetPKU PosterLayoutPosterT80KMovie & TV Series & Anime Posters 数据清洗与标注模型训练模型评估生成图片样例宠物包商品海报护肤精华商品海报 一些TipsMata&#xff1a;…