Bencher v0.6.13 常用 CLI 命令详解

Bencher v0.6.13 CLI 29 个一级子命令分组详解:自托管生命周期(up/down/logs)、benchmark 运行核心(run/mock/noise)、项目与维度管理、bare metal runner/spec、server 运维,每条命令附真实 --help 与实测示例。

BencherBencherRust语言DevOps工程CI性能基准REST2026/10/27

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 CLIv0.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 个一级子命令,覆盖三类场景:

  1. 自托管生命周期:up / down / logs — 封装 docker compose 操作
  2. Benchmark 运行与数据提交:run / mock / noise / archive / unarchive
  3. 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]allall / api / console
-d, --detach不 detach后台运行,对应 docker compose up -d
--pull <WHEN>alwaysalways / missing / never
--tag <TAG>CLI 自身版本镜像 tag,默认是 CLI 的版本号
--console-port3000Console 端口
--api-port6610API 端口
--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_PROJECTProject name/slug/UUID。必填(或配合 --ci-on-the-fly)
--branch <BRANCH>BENCHER_BRANCHBranch name/slug/UUID,不存在会自动创建
--testbed <TESTBED>BENCHER_TESTBEDTestbed 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_HOSTAPI Server 地址
--token <TOKEN>BENCHER_API_KEYAPI 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

五、注意事项

  1. CLI 版本必须与 API Server 对齐:bencher run / bencher up / bencher server version 都会比对版本,跨版本跑会 warn,Plus 版可能直接拒绝。
  2. --adapter 大小写敏感:rust_criterion 对,RustCriterion 错,错了会报 Unknown adapter。
  3. run 命令的 [COMMAND]... 是数组:bencher run --project demo cargo bench 里 cargo bench 就是 benchmark 命令,CLI 会原样在当前 shell(或 bare metal runner 上)执行。不要在中间插额外的 --。
  4. 首次 run 自动 claim:自托管实例第一次 bencher run 会创建一个临时 project,输出里带 Claim URL,必须用浏览器 Claim 之后才能在 Dashboard 里看到数据——否则 project 是 orphan。
  5. BENCHER_HOST 环境变量优先级高于 config.toml:多环境切换时留意,避免 CI 里的 host 覆盖你本地的。
  6. 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。

七、参考链接