Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解

在现代软件开发中,性能测试是确保应用程序稳定性和响应速度的关键环节。

今天,我们就来深入了解一款国产化功能强大的 Elasticsearch 负载测试工具------INFINI Loadgen。

一、INFINI Loadgen 简介

Github地址:https://github.com/infinilabs/loadgen

Release 版本下载地址:https://release.infinilabs.com/loadgen/stable/

INFINI Loadgen 是一款专为 Elasticsearch 、EasySearch 设计的轻量级性能测试工具,旨在对 Easysearch 、Elasticsearch 进行压力测试。其主要功能包括支持多种请求类型、动态变量注册、以及对请求返回结果的断言等。------官方描述

二、安装 INFINI Loadgen

INFINI Loadgen的安装方式非常简单,为用户提供了多种选择,方便不同需求的用户进行安装。

2.1 通过脚本安装

使用以下命令,即可一键完成安装:

go 复制代码
curl -sSL http://get.infini.cloud | bash -s -- -p loadgen

这条命令的作用是,通过curl工具从指定的URL下载安装脚本,并使用bash执行该脚本,同时传递参数-p loadgen,指定安装的软件包为loadgen

2.2 手动下载安装

如果不想使用脚本安装,也可以从官方提供的下载地址获取安装包:http://release.infinilabs.com/loadgen/。下载完成后,通过以下命令进行安装:

go 复制代码
➜  /tmp mkdir loadgen
➜  /tmp curl -sSL http://get.infini.cloud | bash -s -- -p loadgen -d /tmp/loadgen

或者直接本地下载,拷贝到云服务器也可以。上述命令首先在/tmp目录下创建了一个名为loadgen的文件夹,然后通过curlbash命令,将安装包下载并解压到该文件夹中。在安装过程中,我们可以看到有趣的字符画和安装进度提示,最后会提示安装完成,表明loadgen已经准备就绪,可以使用了。

安装完成后,进入安装目录,执行可执行文件,即可启动INFINI Loadgen:

go 复制代码
cd /tmp/loadgen &&./loadgen-mac-arm64

这里的loadgen-mac-arm64是根据不同系统和架构生成的可执行文件名,在实际使用中,需要根据自己的环境进行调整。

温馨提示:下文中的 loadgen 本质上就是现在的 loadgen-mac-arm64 重命名后的结果。

三、Loadgen 核心配置参数解读

站在咱们开发者角度理解,如果对 Elasticsearch 或 EasySearch 做性能测试,必须先得配置上 ES 的地址、用户名和密码,否则一切无从谈起。因此,如下的配置 loadgen.yml 非常重要。

3.1 宏观看配置文件

我第一眼看有点懵逼,感觉配置都好复杂。实际拆分成树形结构"定睛一看",实际并不复杂。

loadgen.yml

go 复制代码
├── env
│   ├── ES_USERNAME
│   ├── ES_PASSWORD
│   └── ES_ENDPOINT
├── runner
│   ├── no_warm
│   ├── valid_status_codes_during_warmup
│   ├── log_requests
│   ├── log_status_codes
│   ├── assert_invalid
│   ├── assert_error
│   ├── reset_context
│   ├── default_endpoint
│   └── default_basic_auth
├── variables
│   ├── id
│   ├── id64
│   ├── uuid
│   ├── now_local
│   ├── now_utc
│   ├── now_utc_lite
│   ├── now_unix
│   ├── now_with_format
│   ├── suffix
│   ├── bool
│   ├── list
│   ├── id_list
│   └── str_list
└── requests
├── request 1 (POST /_bulk)
│   ├── method
│   ├── runtime_variables
│   ├── runtime_body_line_variables
│   ├── url
│   └── body
└── request 2 (POST /medcl/_search)
├── method
├── runtime_variables
├── runtime_body_line_variables
├── basic_auth
├── url
└── body

3.2 配置文件参数详解(微观看)

在使用Loadgen进行测试之前,我们需要了解其配置文件的结构和用法。Loadgen的配置文件主要由envrunnervariablesrequests等部分组成。

示例原因,没有涵盖全部变量。

  1. env:用于定义环境变量, 例如:
go 复制代码
env:
  ES_USERNAME: elastic
  ES_PASSWORD: elastic

这里定义了ES_USERNAMEES_PASSWORD两个环境变量,分别赋值为elastic。咱们在使用的时候要换成自己 Elasticsearch 集群的账号和密码。这些环境变量可以在后续的请求中通过$[[env.ENV_KEY]]的方式进行引用,例如在请求的认证信息中使用。

  1. runner:用于配置测试运行的相关参数,如:
go 复制代码
runner:
  # total_rounds: 1
  no_warm: false
  log_requests: false
  assert_invalid: false
  assert_error: false

其中,

  • total_rounds用于指定测试的总轮数,默认情况下注释掉,表示不使用该设置,Loadgen将在指定的持续时间内循环执行测试。

  • no_warm表示是否跳过预热阶段,默认为false,即不跳过。预热阶段可以让系统在正式测试前达到稳定状态,使测试结果更准确。

  • log_requests用于控制是否记录每个请求的详细信息。

  • assert_invalidassert_error分别用于设置当断言无效或请求出错时的处理方式。

  1. variables:用于定义各种类型的变量,这些变量可以在请求中使用,为请求提供动态参数。Loadgen支持多种变量类型,每种类型都有其特定的用途和配置方式。
  • file:从文件加载变量,例如:
go 复制代码
- name: ip
  type: file
  path: test/ip.txt

这个配置表示定义了一个名为ip的变量,类型为file,其值从test/ip.txt文件中读取。在测试过程中,每次使用该变量时,会随机从文件中读取一行作为变量值。- sequence:自动递增的数值变量,例如:

go 复制代码
- name: id
  type: sequence

定义了一个名为id的变量,类型为sequence,它会在测试过程中自动递增,从默认的最小值开始,每次增加1。- uuid:生成UUID类型的变量,例如:

go 复制代码
- name: uuid
  type: uuid

定义了一个名为uuid的变量,每次使用时会生成一个唯一的UUID值。- now_localnow_utcnow_unix:分别表示获取当前本地时间、UTC时间和Unix时间戳,例如:

go 复制代码
- name: now_local
  type: now_local
- name: now_utc
  type: now_utc
- name: now_unix
  type: now_unix

这些变量在需要记录时间信息的测试场景中非常有用。4. requests :用于定义要发送的请求,这是配置文件的核心部分。Loadgen支持固定参数请求和基于模板的变量参数请求。- 固定参数请求示例

go 复制代码
- request:
    method: GET
    basic_auth:
      username: elastic
      password: pass
    url: http://localhost:9200/medcl/_search

注意:medcl 是个索引名,实际使用环节,咱们需要自己创建一下。比如:put medcl 方式就可以创建。这个请求配置表示使用GET方法,通过基本认证(用户名elastic,密码pass),向http://localhost:9200/medcl/_search发送请求。- 基于变量参数的请求示例

go 复制代码
- request:
    method: GET
    basic_auth:
      username: $[[env.ES_USERNAME]]
      password: $[[env.ES_PASSWORD]]
    url: http://localhost:9200/medcl/_search?q=name:$[[user]]

在这个请求中,使用了之前定义的环境变量ES_USERNAMEES_PASSWORD进行认证,并且在请求URL中使用了变量user,使得每次请求的查询参数name的值都可以动态变化。最后,咱们通过截图说明一下,我改动的配置有哪些,以便大家进行参考:

除了上面标红之外,其他配置都没有动。这样我们可以达到 Loadgen 从0到1效果,先用起来再说。

四、Loadgen 基准测试,先用起来再说!

4.1 基准测试

基准测试:运行Loadgen进行基准测试非常简单,只需在命令行中执行以下命令:

go 复制代码
➜  loadgen git:(master) ✗./bin/loadgen -d 30 -c 100 -compress

这条命令中,-d 30表示测试持续时间为30秒,-c 100表示并发线程数为100,-compress表示对请求进行gzip压缩。测试过程中,Loadgen会先执行一次所有请求进行预热,预热结果会输出到终端。

预热完成后,开始正式的基准测试,测试结束后会输出详细的测试结果,包括请求的吞吐量、响应时间分布、流量统计等信息。

如下图所示,代表配置文件的写入 bulk 写入成功了。因为,最初,我们只是创建了索引名。

4.2 核心指标含义解读

最终指标是我们关注的重点,核心指标解读如下:

1.Requests/sec: 29.43:

  • 含义:表示服务器每秒处理的请求数量,即服务器在测试期间平均每秒能够成功接收并处理的请求数为 29.43 个 。
  • 作用:该指标反映了服务器的处理能力和吞吐量。数值越高,说明服务器在单位时间内能够处理更多的请求,在高并发场景下表现可能更好。

  • 实际业务场景类比举例:对于一个基于 Elasticsearch 的电商网站搜索服务,较高的请求处理速率意味着在促销活动等流量高峰时,能够更快地响应用户的商品搜索和查询请求,从而提升用户体验。

2.Avg Req Time: 339.804597 ms:

  • 含义:指平均每个请求的处理时间,即从服务器接收到请求到返回响应所花费的平均时间为 339.804597ms 毫秒 。

  • 作用:它体现了服务器处理单个请求的效率。这个时间越短,表明服务器处理请求的速度越快,用户等待响应的时间也就越短,体验更好。

  • 实际业务场景类比举例:在一个使用 Elasticsearch 的实时日志分析系统中,较短的平均请求处理时间意味着用户能够更快地获取日志查询结果,从而及时发现和解决问题,提升系统监控的有效性。

3.Transfer/sec: 12.81 KB:

  • 含义:代表服务器每秒的数据传输量,即在测试过程中,服务器每秒传输的数据量平均为 12.81KB 。

  • 作用:该指标反映了服务器与客户端之间的数据交互量,对于评估服务器的网络带宽使用情况和数据传输能力很重要。

  • 实际业务场景类比举例:对于一个基于 Elasticsearch 的数据可视化平台,高的数据传输速率是保证用户能够流畅加载和查看大数据集的关键。如果这个值过低,可能导致数据加载缓慢,从而影响用户体验。

五、小结

通过使用 INFINI Loadgen 进行性能测试,开发者可以有效地评估 Elasticsearch 和 EasySearch 的处理能力和稳定性。该工具不仅支持高并发的请求处理,还能通过灵活的配置选项满足不同的测试需求。安装过程简单,配置文件结构清晰,使得用户能够快速上手并进行基准测试。


【实践好文】提升 Elasticsearch 性能的关键优化技巧,50ms提升到1ms!!

提升 Elasticsearch 索引性能 TOP 10 小技巧,你用到几个?

esrally 如何进行简单的自定义性能测试?

JMeter 如何实现 Elasticsearch 8.X 性能测试?

探索 INFINI Console:提升 Elasticsearch 管理效率的新利器

读者留言:有 Elasticsearch 国产化替代品吗?现在国产化不让用 ES 了......

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

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

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn------ElasticStack进阶助手

抢先一步学习进阶干货!

相关推荐
幸好我会魔法2 小时前
人格分裂(交互问答)-小白想懂Elasticsearch
大数据·spring boot·后端·elasticsearch·搜索引擎·全文检索
顧棟3 小时前
【ES实战】治理项之索引模板相关治理
大数据·elasticsearch·yarn
karatttt4 小时前
MapReduce,Yarn,Spark理解与执行流程
大数据·spark·mapreduce
STONE_KKK5 小时前
半小时速通flume-flume概述
大数据·flume
Java潘老师5 小时前
分享一款WebSocket在线测试工具,使用简单方便
websocket·测试工具·在线工具
零度念者6 小时前
【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)
elasticsearch
shinelord明7 小时前
【大数据】数据治理浅析
大数据·人工智能·软件工程
说私域8 小时前
私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例
大数据·人工智能·小程序·开源
risc1234569 小时前
【Elasticsearch】index:false
elasticsearch
2025年一定要上岸9 小时前
2025/1/22 [抓包] Fiddler
测试工具