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 # 限制总请求数为10000,使用自定义配置文件 docker run -v $(pwd)/custom-config.yml:/app/custom-config.yml infinilabs/loadgen -config custom-config.yml -l 10000 -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
自增ID确保文档顺序
使用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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务