Loadgen是一款专为Elasticsearch或通用HTTP服务器设计的轻量级负载生成器,用于性能基准测试。它具备高并发处理能力,支持模板化参数动态生成和基准端流量控制,轻量级且无依赖,可快速部署以评估服务器在不同负载下的响应性能。
Loadgen通过YAML配置文件(默认loadgen.yml)定义测试参数,核心包含variables(变量定义)和requests(请求定义)两个节点。典型配置示例:
yamlvariables: - name: ip type: file path: test/ip.txt # 从文件加载变量 - name: user type: file path: test/user.txt - name: id type: sequence # 自增数字变量 - name: uuid type: uuid # UUID生成变量 - name: now_local type: now_local # 本地时间变量 requests: - request: method: GET basic_auth: username: elastic password: pass url: http://localhost:8000/medcl/_search body: '{ "query": {"match": { "name": "$[[user]]" }}}' # 使用变量
variables节点定义动态参数,通过name标识,在请求中使用$[[变量名]]引用。支持的变量类型说明:
| 类型 | 描述 |
|---|---|
| file | 从外部文本文件加载,每行一个值,随机选取 |
| sequence | 自增数字类型,从0开始逐次递增 |
| range | 范围数字类型,需通过from和to参数定义取值范围(如from:10, to:20) |
| uuid | 生成UUID格式字符串(如c3qj9123r0okahraiej0) |
| now_local | 当前时间(本地时区),格式YYYY-MM-DD HH:MM:SS |
| now_utc | 当前时间(UTC时区),格式YYYY-MM-DD HH:MM:SS |
| now_unix | 当前Unix时间戳(秒级) |
文件类型变量示例:
创建test/user.txt文件,每行一个值:
medcl elastic admin
请求中通过$[[user]]随机引用上述值之一。
requests节点按顺序定义待执行的HTTP请求,支持固定参数和模板化参数请求。支持的请求属性包括:
method:HTTP方法(GET/POST等)basic_auth:基础认证信息(username和password)url:请求URL(支持变量引用)body:请求体(支持变量引用)body_repeat_times:请求体重复次数(用于批量请求)查询请求示例:
yamlrequests: - request: method: GET basic_auth: username: elastic password: pass url: http://localhost:8000/medcl/_search?q=name:$[[user]] # URL中引用变量
通过命令行参数控制测试执行行为,执行loadgen --help查看完整参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| -c | int | 1 | 并发线程数 |
| -compress | bool | false | 是否启用gzip压缩请求 |
| -config | string | "loadgen.yml" | 配置文件路径(默认当前目录下的loadgen.yml) |
| -d | int | 5 | 测试持续时间(秒),默认5秒 |
| -debug | bool | false | 调试模式,发生错误时触发panic并退出 |
| -l | int | -1 | 限制总请求数(-1表示无限制) |
| -log | string | "info" | 日志级别,可选:trace, debug, info, warn, error |
| -r | int | -1 | 每秒最大请求数(固定QPS),-1表示不限制 |
| -v | bool | false | 显示版本信息 |
假设镜像名称为infinilabs/loadgen,通过以下命令运行(需挂载本地配置文件到容器内):
bash# 基础用法:运行30秒,100并发线程,启用gzip压缩 docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -d 30 -c 100 -compress # 限制QPS为200,日志级别debug docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -d 60 -c 50 -r 200 -log debug # 限制总请求数为***,使用自定义配置文件 docker run -v $(pwd)/custom-config.yml:/app/custom-config.yml infinilabs/loadgen -config custom-config.yml -l *** -c 80
典型测试输出示例:
5253 requests in 32.756483336s, 524.61KB sent, 2.49MB received [Loadgen Client Metrics] Requests/sec: 175.10 Request Traffic/sec: 17.49KB Total Transfer/sec: 102.34KB Avg Req Time: 5.711022ms Fastest Request: 440.448µs Slowest Request: 3.624302658s Number of Errors: 0 Status 200: 5253
注意:Loadgen结果为累积统计值,可能存在一定误差。建议结合Kibana仪表板实时监控Elasticsearch的CPU、内存、IO等关键指标。
通过body_repeat_times参数复制多次请求体,生成批量请求:
yamlrequests: - request: method: POST url: http://localhost:8000/_bulk # Elasticsearch bulk API body_repeat_times: 1000 # 随机复制请求体1000次生成批量数据 body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\" }\n"
使用-l参数限制总请求数,结合单请求单文档配置,生成固定数量文档:
bash# 配置文件中每个请求生成1个文档,通过-l控制总数量 docker run -v $(pwd)/loadgen.yml:/app/loadgen.yml infinilabs/loadgen -l 50000 -c 100
使用sequence类型变量作为文档ID,实现有序增长:
yamlvariables: - name: id type: sequence # 自增数字变量(0,1,2,...) requests: - request: method: POST url: http://localhost:8000/medcl-test/_bulk body_repeat_times: 1 body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[id]]\" } }\n{ \"id\" : \"$[[id]]\" }\n" # ID与文档字段同步
通过runtime_variables(请求级共享)和runtime_body_line_variables(文档级独立)实现变量复用,如路由值与文档字段关联:
yamlvariables: - name: suffix type: range from: 10 to: 15 # 随机生成10-15的数字 requests: - request: method: POST runtime_variables: batch_no: id # 整个请求批次共享一个batch_no runtime_body_line_variables: routing_no: uuid # 每个文档独立的routing_no url: http://localhost:8000/_bulk body_repeat_times: 10 # 生成10个文档 body: "{ \"create\" : { \"_index\" : \"test-$[[suffix]]\", \"routing\" : \"$[[routing_no]]\" } }\n{ \"batch_number\" : \"$[[batch_no]]\", \"routing_no\" : \"$[[routing_no]]\" }\n"
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429