目标
写在文档里的延迟预算会腐烂,写成 k6 阈值的延迟预算会执行。k6 按标签对每个端点独立评估分位数阈值,越界即非零退出,慢的 PR 变成一个红色检查而不是下季度才发现的趋势线。脚本就是需求,CI 运行就是审计,失败信息点名端点。
步骤要点
- 在 options.thresholds 里按 endpoint 标签声明阈值:search p95<300ms、detail p95<120ms、错误率<1%。
- 用 group+tags 给请求打端点类别标签,慢的 search 无法藏进快的均值里。
- CI 对候选构建环境执行 k6 run,任一阈值击穿即 job 失败、PR 被阻断。
- 失败时读 summary 的阈值明细:每个阈值带数值与通过标记,直接点名回归端点。
- 把 stages 调成 15s+30s 的轻量档,让门禁足够便宜以跑在每个 PR 上。
排错提示
共享 staging 导致阈值抖动,就为每个 PR 起一次性隔离环境或加预热阶段并放宽预算;首次运行因冷缓存失败就在测量前加 warmup stage 或在环境准备步预热数据;门禁太慢会被禁用,PR 跑轻量档、主干跑全量档,两档共享同一 thresholds 对象。
适用边界
阈值度量的是暂存环境而非生产拓扑,预算相对生产目标要保守;k6 度量 HTTP 行为,队列型异步端点需要场景专用探针。
代码示例
export const options = {
thresholds: {
"http_req_duration{endpoint:search}": ["p(95)<300"],
"http_req_duration{endpoint:detail}": ["p(95)<120"],
"http_req_failed": ["rate<0.01"],
},
};