Bencher v0.6.13 常用 CLI 命令详解
Bencher v0.6.13 CLI 29 个一级子命令分组详解:自托管生命周期(up/down/logs)、benchmark 运行核心(run/mock/noise)、项目与维度管理、bare metal runner/spec、server 运维,每条命令附真实 --help 与实测示例。
Bencher v0.6.13 常用 CLI 命令详解
目标:逐条拆解 Bencher v0.6.13 CLI 的所有一级/二级子命令,按使用场景(自托管生命周期 / benchmark 运行 / 项目管理 / 维度管理 / runner / server / 用户)分组,每条命令附真实
--help回显、关键选项、实测示例与常见坑。CLI 版本已在本实验环境实测:bencher 0.6.13,与 API Server v0.6.13 版本对齐。
一、环境信息
| 项 | 值 |
|---|---|
| Bencher CLI | v0.6.13(2026-09-28) |
| API Server 要求 | 同版本(CLI 会校验,跨版本跑会 warn) |
| 配置文件 | ~/.bencher/config.toml(首次 bencher login 自动生成) |
| 安装方式 | 脚本 / 手动下载 / Docker / cargo 安装(见 B1 篇) |
| 全局连接参数 | --host <URL> / --token <API_KEY> 或环境变量 BENCHER_HOST / BENCHER_API_KEY |
| 查询日期 | 2026-10-27 |
二、工具概览
bencher 是 Rust 单二进制 CLI(静态链接 Linux x86_64 约 14 MB),共 29 个一级子命令,覆盖三类场景:
- 自托管生命周期:
up/down/logs— 封装 docker compose 操作 - Benchmark 运行与数据提交:
run/mock/noise/archive/unarchive - REST API 映射的资源管理:
organization/project/branch/testbed/benchmark/measure/threshold/alert/runner/spec/user/token/server/perf/plot/report/job/metric/plan/sso/member
bencher --help
Bencher CLI
Usage: bencher-cli <COMMAND>
Commands:
run / mock / noise / archive / unarchive
up / logs / down
organization / member / plan / sso
project / report / job / perf / plot
branch / testbed / benchmark / measure / metric / threshold / alert
user / token / runner / spec / server
help
三、前置条件
# 确认版本
bencher --version
# bencher 0.6.13
# 自托管已起来
curl -s http://localhost:6610/v0/server/version
# {"version":"0.6.13"}
# 首次使用需要配置 host
export BENCHER_HOST=http://localhost:6610
# 或者在 ~/.bencher/config.toml 里写
# [host]
# host = "http://localhost:6610"
四、各命令详解
4.1 自托管生命周期(up / down / logs)
三条命令直接封装 docker compose,是自托管模式下最常用的操作集。
bencher up — 拉起自托管容器
bencher up [OPTIONS] [SERVICE]
| 选项 | 默认 | 说明 |
|---|---|---|
[SERVICE] | all | all / api / console |
-d, --detach | 不 detach | 后台运行,对应 docker compose up -d |
--pull <WHEN> | always | always / missing / never |
--tag <TAG> | CLI 自身版本 | 镜像 tag,默认是 CLI 的版本号 |
--console-port | 3000 | Console 端口 |
--api-port | 6610 | API 端口 |
--console-env KEY=value | 无 | 往 Console 容器环境里注入变量,可重复 |
--api-env KEY=value | 无 | 往 API 容器环境里注入变量,可重复 |
--console-volume HOST:CONTAINER | 无 | Console 容器 bind mount |
--api-volume HOST:CONTAINER | 无 | API 容器 bind mount |
实测:
# 后台拉起,指定自定义 tag + 配置卷
bencher up --detach --tag v0.6.13 \
--api-volume '/opt/bencher-stack/services/api/etc:/etc/bencher' \
--api-volume '/opt/bencher-stack/services/api/data:/var/lib/bencher/data'
# Pulling `ghcr.io/bencherdev/bencher-api:v0.6.13` image...
# Creating `bencher_api` container...
# Starting `bencher_api` container...
# Pulling `ghcr.io/bencherdev/bencher-console:v0.6.13` image...
# ...
# 🐰 Bencher Self-Hosted is up and running!
# Console Server: http://localhost:3000
# API Server: http://localhost:6610
💡
bencher up实际在当前目录生成一个隐藏的.bencher-self-hosted/compose 目录,里面就是docker-compose.yml+services/结构。你可以用--api-volume把自己已有的数据和配置卷挂进去,覆盖默认生成的。
bencher logs — 查看容器日志
bencher logs [SERVICE] # SERVICE: all / api / console
bencher down — 停止并移除容器
bencher down [SERVICE]
4.2 Benchmark 运行与数据提交
bencher run — 提交 benchmark 结果(核心命令)
bencher run [OPTIONS] [COMMAND]...
# [COMMAND]... 是你的 benchmark 命令,如 `cargo test --bench my_bench`
关键选项:
| 选项 | 环境变量 | 说明 |
|---|---|---|
--project <PROJECT> | BENCHER_PROJECT | Project name/slug/UUID。必填(或配合 --ci-on-the-fly) |
--branch <BRANCH> | BENCHER_BRANCH | Branch name/slug/UUID,不存在会自动创建 |
--testbed <TESTBED> | BENCHER_TESTBED | Testbed name/slug/UUID,不存在会自动创建 |
--adapter <ADAPTER> | — | Benchmark harness adapter。最常用的 10 个值:rust_criterion / rust_bench / cpp_google / go_bench / java_jmh / python_pytest / python_asv / js_benchmark / ruby_benchmark / shell_hyperfine_v2 |
--hash <HASH> | — | git commit hash(默认 HEAD) |
--error-on-alert | — | 有阈值告警时 exit 非零,CI fail build 的关键开关 |
--ci-on-the-fly | — | CI 环境下允许项目不存在时自动创建 |
--start-point <BRANCH> | — | 以另一分支为起点(用于 PR 分支的基线继承 + 阈值克隆) |
--start-point-clone-thresholds | — | 把 start-point 分支的阈值 deep copy 到新分支 |
--spec-reset | — | 清空 testbed 的硬件 spec 字段 |
--key <KEY> | — | Project API Key(自托管无 key 机制,通常不用) |
--host <URL> | BENCHER_HOST | API Server 地址 |
--token <TOKEN> | BENCHER_API_KEY | API token |
--image <IMAGE> | — | Bare metal runner 上跑这个 OCI 镜像(Cloud 版) |
--iter <N> | — | Runner 迭代次数(Cloud 版) |
实测(自托管 + mock 命令):
# 最简单的跑法:mock 命令(不用你真写 benchmark)
bencher run \
--project demo \
--branch main \
--testbed local \
--adapter magic \
--error-on-alert \
bencher mock
# View report: http://localhost:3000/perf/demo/reports/<uuid>
# View results:
# - mock_0 (Latency): http://localhost:3000/perf/demo/benchmarks/<uuid>
# - mock_1 (Latency): ...
# - mock_2 (Latency): ...
# Claim this project: http://localhost:3000/auth/signup?claim=<uuid>
Rust criterion 真实项目的 CI 命令:
bencher run \
--project my-db \
--branch "${GITHUB_REF_NAME:-main}" \
--hash "${GITHUB_SHA}" \
--testbed "gha-${GITHUB_RUNNER_ARCH}" \
--adapter rust_criterion \
--ci-on-the-fly \
--error-on-alert \
cargo bench --bench my_benchmark
bencher mock — 生成 mock benchmark 数据
bencher mock \
--project demo \
--branch main \
--testbed local
# 输出 10 组随机 benchmark + 对应 Claim 链接
用途:首次部署验证全链路、做 demo、生成测试数据。
bencher noise — 测量环境噪声
bencher noise --iter 10
# Benchmarking noise...
# Noise (std dev): 1.23%
测量当前机器的 benchmark 噪声(百分比标准差),用于判断"这台机器跑的结果能不能信"。CI runner 通常 >30%(很吵),裸金属 runner <2%(很干净)。
bencher archive / unarchive — 归档维度
bencher archive branch <BRANCH> # 归档一个 branch
bencher archive testbed <TESTBED> # 归档一个 testbed
bencher archive benchmark <NAME> # 归档一个 benchmark
# 归档 = 不删数据但不出现在默认查询里,适合保留历史但不干扰当前视图
4.3 项目管理(project)
bencher project --help
# Commands: list / create / view / update / delete / allowed / key
# 列出所有项目(当前用户可看的)
bencher project list --host http://localhost:6610
# PROJECT NAME SLUG BRANCH TESTBED
# demo demo main local
# 查看项目详情
bencher project view demo
# 创建项目
bencher project create --name "my-db" --slug "my-db"
# 更新项目(改 name/slug/url/visibility/plus bmf_version)
bencher project update my-db --name "my-db-v2"
# 删除(默认软删;--hard 硬删需 admin)
bencher project delete my-db --hard
4.4 维度管理(branch / testbed / benchmark / measure / metric / threshold / alert)
这 7 条命令结构一致:list / create / view / update / delete(少数变体)。
# branch
bencher branch list --project demo
bencher branch create --project demo --name feature-x --start-point main
bencher branch view --project demo --branch feature-x
bencher branch update --project demo --branch feature-x
bencher branch delete --project demo --branch feature-x
# testbed(硬件规格维度,bare metal runner 场景关键)
bencher testbed list --project demo
bencher testbed create --project demo --name "prod-r740"
bencher testbed view --project demo --testbed prod-r740
# benchmark(性能指标维度名称,如 "Adapter::Magic (Rust)")
bencher benchmark list --project demo
bencher benchmark create --project demo --branch main --testbed local \
--name "Adapter::Magic (Rust)"
# measure(测量单位维度,如 "Latency (µs)")
bencher measure list --project demo
# metric(单个 metric 详情,只读查询)
bencher metric view --project demo --metric <UUID>
# threshold(阈值告警模型)
bencher threshold list --project demo
bencher threshold create --project demo --branch main --testbed local \
--measure "Latency" --model "lossless"
# model 可选:liner / lossless / summary
# alert(已触发的告警)
bencher alert list --project demo
bencher alert view --project demo --alert <UUID>
bencher alert update --project demo --alert <UUID> # 忽略/acknowledge
4.5 报告与查询(report / perf / plot / job)
# 列出项目的所有 report
bencher report list --project demo
# 按 branch/testbed/benchmark/measure 过滤
bencher report list --project demo --branch main --testbed prod-r740
# 查看单个 report
bencher report view --project demo --report <UUID>
# 删除 report
bencher report delete --project demo --report <UUID>
# 查询 perf 数据(时序 CSV/JSON)
bencher perf view --project demo \
--branch main --testbed prod-r740 \
--benchmark "Adapter::Magic (Rust)" --measure Latency \
--start-time "2026-10-01T00:00:00Z" --end-time "2026-10-27T23:59:59Z"
# 管理 plot(控制台的自定义图表面板)
bencher plot list --project demo
bencher plot create --project demo --name "Latency trend" \
--branch main --testbed prod-r740 \
--benchmark "Adapter::Magic (Rust)" --measure Latency
bencher plot view --project demo --plot <UUID>
bencher plot delete --project demo --plot <UUID>
# Job 查询(bare metal runner 的执行单元,Cloud 版用得多)
bencher job list --project demo
bencher job view --project demo --job <UUID>
4.6 Runner 与 Spec(bare metal runner 管理)
# 列出所有 runner
bencher runner list
# 创建 runner(会输出 runner 启动命令 + key)
bencher runner create --name "db-bench-runner-01"
# 返回 runner 启动命令,复制到裸机上执行:
# bencher runner key --runner <UUID> | sh -c 'bencher runner run ...'
# 或简化版:
# bencher runner run --key <RUNNER_KEY>
# runner key 轮转
bencher runner key --runner <UUID>
# runner spec(硬件规格,用于 bare metal runner 调度)
bencher spec list
bencher spec create --name "intel-v1" --cpu "Intel Xeon Gold 6330" --ram "64 GiB"
bencher spec view --spec intel-v1
bencher spec update --spec intel-v1
bencher spec delete --spec intel-v1
4.7 Server 运维
# API Server 版本(健康检查最常用)
bencher server version --host http://localhost:6610
# bencher 0.6.13
# API Server: 0.6.13
# OpenAPI spec
bencher server spec --host http://localhost:6610
# 输出 OpenAPI 3.0.3 JSON 原文(含全部 136+ 路由)
# 查看当前生效配置(敏感值打码,需 admin)
bencher server config view \
--host http://localhost:6610 --token $BENCHER_API_KEY
# Console 配置(公开,无需鉴权)
bencher server config console --host http://localhost:6610
# 数据库备份(导出 SQLite)
bencher server backup --host http://localhost:6610 --output bencher-backup.db
# Server stats(Plus 版,admin 专属)
bencher server stats --host http://localhost:6610
4.8 用户与 Token
# 用户详情
bencher user view --host http://localhost:6610 --user <slug-or-uuid>
# 列出当前用户的 API keys
bencher user key list --user <slug>
# 创建新 key(推荐,tokens 已废弃)
bencher user key create --user <slug> --name "CI pipeline"
# 列出 token(已废弃,仍可查)
bencher token list --user <slug>
4.9 Organization / Plan / SSO(Plus 版)
免费自托管版也有 organization 命令,但只有单节点场景的基础组织管理,SSO/Plan 需 Plus:
bencher organization list
bencher organization create --name "acme-corp"
bencher member list --organization "acme-corp"
bencher member create --organization "acme-corp" --user <slug> --role "member"
# Plan / SSO 命令免费版返回 403
五、注意事项
- CLI 版本必须与 API Server 对齐:
bencher run/bencher up/bencher server version都会比对版本,跨版本跑会 warn,Plus 版可能直接拒绝。 --adapter大小写敏感:rust_criterion对,RustCriterion错,错了会报 Unknown adapter。run命令的[COMMAND]...是数组:bencher run --project demo cargo bench里cargo bench就是 benchmark 命令,CLI 会原样在当前 shell(或 bare metal runner 上)执行。不要在中间插额外的--。- 首次 run 自动 claim:自托管实例第一次
bencher run会创建一个临时 project,输出里带 Claim URL,必须用浏览器 Claim 之后才能在 Dashboard 里看到数据——否则 project 是 orphan。 BENCHER_HOST环境变量优先级高于 config.toml:多环境切换时留意,避免 CI 里的 host 覆盖你本地的。- Plus 版 vs 免费版:
plan/sso/organization members 高级权限等免费版能列但写操作返回 403。
六、常见问题
Q1:bencher run 报 "project not found" 但我明明没建过?
加 --ci-on-the-fly,或先手动 bencher project create --name <name> --slug <slug>。
Q2:bencher run 跑完了但没生成任何 benchmark?
--adapter 可能配错了,CLI 没识别到 harness 的输出格式。把实际 benchmark 命令直接跑一遍看输出格式,对照 adapter 的文档确认。最简单的验证:bencher run ... --adapter magic bencher mock 这条一定能产出数据。
Q3:bencher up 拉 ghcr.io 报 401?
docker logout ghcr.io 清 token 再试。如果还不行,配 daemon proxy(~/.docker/config.json)。
Q4:bencher server version 返回了但 CLI 报 "version mismatch"?
你本机 CLI 版本和 API Server 镜像 tag 不一致。要么升级 CLI 到镜像同版本(export BENCHER_VERSION=X.Y.Z; curl ...),要么 bencher up --tag <你本机 CLI 对应的版本>。
Q5:bencher project view 报 401 Unauthorized?
自托管首次启动时没有用户——你需要先跑一次 bencher mock 生成 claim 链接,浏览器 Claim 注册后再用 bencher user key create 拿 API Key。
七、参考链接
- CLI 安装:https://bencher.dev/docs/how-to/install-cli/
- Bencher Run 详解:https://bencher.dev/docs/explanation/bencher-run/
- Bencher Compose 子命令:https://bencher.dev/docs/reference/bencher-compose/
- Adapter 完整列表:https://bencher.dev/docs/explanation/adapters/
- CLI
--help完整参考:bencher --help/bencher <COMMAND> --help