一 背景:

 之前折腾2天想用es 官网推荐的es压测工具,各种坑,参见我之前的安装过程centos7 安装esrally 踩坑过程_bohu83的博客-CSDN博客_esrally安装

这里面很多参数,主要是读写的速度。

有一点,这是基准的压测,不能很好的模拟线上的同事读写某个比例的情况。

二 loadgen

相对于esrally 只看es的整体指标。loadgen就简单好用多了。

下载,解压,修改loadgen.yml 即可。

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

选择自己合适的版本。解压后

 如何修改参数,参见官网:就是设置es的账户,ip, 写body,读的url

读写根据业务实际需要就行。

性能测试 | INFINI Gateway

变量的使用:

面的配置中,variables 用来定义变量参数,根据 name 来设置变量标识,在构造请求的使用 $[[变量名]] 即可访问该变量的值,变量目前支持的类型有:

类型说明
file文件型外部变量参数
sequence自增数字类型的变量
range数字范围类型的变量,支持参数 from 和 to 来限制范围
uuidUUID 字符类型的变量
now_local当前时间、本地时区
now_utc当前时间、UTC 时区
now_unix当前时间、Unix 时间戳
now_with_format当前时间,支持自定义 format 参数来格式化时间字符串,如:2006-01-02T15:04:05-0700

查询的例子:

配置节点 requests 用来设置 Loadgen 将依次执行的请求,支持固定参数的请求,也可支持模板变量参数化构造请求,以下是一个普通的查询请求:

requests:
  - request:
      method: GET
      basic_auth:
        username: elastic
        password: pass
      url: http://localhost:8000/medcl/_search?q=name:$[[user]]

上面的查询对 medcl 索引进行了查询,并对 name 字段执行一个查询,每次请求的值来自随机变量 user

批量写入(bulk)操作

使用 Loadgen 来模拟 bulk 批量写入也非常简单,在请求体里面配置一条索引操作,然后使用 body_repeat_times 参数来随机参数化复制若干条请求即可完成一批请求的准备,如下:

  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/_bulk
      body_repeat_times: 1000
      body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" :

启动:

./loadgen-linux-386 -d 120 -c 7

 上面是持续120秒,7个并发的情况。

输出结果:

[Loadgen Client Metrics]
Requests/sec:        3892.07
Request Traffic/sec:    0.00bytes
Total Transfer/sec:    55.84MB
Avg Req Time:        256.932µs
Fastest Request:    860.181µs
Slowest Request:    134.490269ms
Number of Errors:    0
Number of Invalid:    0
Status 200:        467048

[Estimated Server Metrics]
Requests/sec:        3922.53
Transfer/sec:        56.28MB
Avg Req Time:        1.78456ms

这个数据需要结合kibana 监控一起看。

包括读写速率、延迟、cpu\系统负载大小等。

如果测试服务器充足,可以部署在多个上,一个节点可以部署多个loadgen.改下名字。

分别设定不同的并发,模拟业务读写不同的es索引。

开始用jmeter,不知道是不是我参数设置问题,抗不住这么大的并发jmeter自己先报了OOM 。

开多个情况,每个设置不同的配置,这样更好的模拟线上的不同读写速率,值得推荐。

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐