Elasticsearch 8.X 如何生成 TB 級的測試資料 ?
來源:銘毅天下Elasticsearch
1、實戰問題
我只想插入大量的測試資料,不是想測試效能,有沒有自動辦法生成TB級別的測試資料? 有工具?還是說有測試資料集之類的東西? ——問題來源於 Elasticsearch 中文社群
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 第一步:安裝工具集
pip install elasticsearch-faker
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
同時,編輯模版檔案 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
3.4 第4步:檢視匯入資料結果, kibana 檢視。
"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 外掛生成隨機樣例資料
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 => 10
codec => "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 => ["]
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
執行結果如下:
kibana 檢視資料結果如下:
藉助 Logstash,我們可以輕鬆生成大量的隨機樣例資料,用於 Elasticsearch 的測試和開發。這種方法不僅高效,而且可以靈活地根據需求生成各種格式的資料。
5、小結
上述的驗證都是使用 Elasticsearch 8.10.2 版本驗證透過的。
其實除了文章給出的兩種方案外,還有很多其他的方案,比如:esrally 生成測試資料、藉助 Python 的 Faker 實現樣例資料構造,Common Crawl、Kaggle 等網站提供大型的公共資料集,可以作為測試資料的來源。
大家有沒有遇到類似問題,是如何實現的?歡迎留言交流。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2993278/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何優雅地生成測試資料
- Sysbench測試神器:一條命令生成百萬級測試資料
- 介面測試的時候如何生成隨機資料進行測試隨機
- Mock生成測試資料Mock
- shell生成測試資料
- java快速的生成測試資料Java
- laravel seed生成測試資料Laravel
- Sql Server生成測試資料SQLServer
- 極速匯入elasticsearch測試資料Elasticsearch
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- mysql 動態生成測試資料MySql
- 測試資料之自動生成
- 使用 Laravel 資料填充功能生成中文測試資料Laravel
- 如何在Python中用scikit-learn生成測試資料集Python
- Elasticsearch如何做到億級資料查詢毫秒級返回?Elasticsearch
- 資料清洗如何測試?
- clickhouse 億級資料效能測試
- Elasticsearch 8.X:這個複雜的檢索需求如何實現?Elasticsearch
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- Python factory_boy 生成測試資料Python
- 自動化測試如何管理測試資料
- 如何清除 Elasticsearch 中的資料Elasticsearch
- Eolink Apikit 快速發起 API 測試,一鍵生成測試資料API
- 竟然拿ETL當測試資料生成工具使用
- Mysql生成100w條測試資料MySql
- mysql 如何毫秒級同步資料到 elasticsearchMySqlElasticsearch
- python 使用 random模組生成隨機測試資料Pythonrandom隨機
- 大資料學習初級入門教程(八) —— Elasticsearch 7.6.2 單節點的安裝、啟動和測試大資料Elasticsearch
- 如何對 ElasticSearch 叢集進行壓力測試Elasticsearch
- ElasticSearch在數十億級別資料下,如何提高查詢效率?Elasticsearch
- gpt生成測試GPT
- 測試資料
- 測試環境的遷移式升級和資料整合
- 【編測編學】如何做好大資料測試大資料
- 自動化測試資料生成:Asp.Net Core單元測試利器AutoFixture詳解ASP.NET
- 探索 Elasticsearch 8.X Terms Set 檢索的應用與原理Elasticsearch
- 大資料測試與 傳統資料庫測試大資料資料庫
- Elasticsearch 8.X Rollup 功能詳解及避坑指南Elasticsearch