
k6 支持通过全局 options.tags 或命令行 --tag 为整个测试会话添加自定义标签,从而在 Grafana/InfluxDB 中区分不同测试任务的虚拟用户指标,解决多测试并行时指标混叠问题。
k6 支持通过全局 `options.tags` 或命令行 `--tag` 为整个测试会话添加自定义标签,从而在 grafana/influxdb 中区分不同测试任务的虚拟用户指标,解决多测试并行时指标混叠问题。
在 k6 中,虚拟用户(VU)本身不可单独打标签,但可通过测试级标签(test-wide tags) 实现逻辑上的“虚拟用户分组”——即为每次启动的 k6 测试进程统一注入唯一标识,使所有采集的指标(如 http_req_duration、vus_active、checks 等)自动携带该标签,进而在后端监控系统(如 InfluxDB + Grafana)中按 mytag、test_id、env 等维度进行过滤与可视化。
✅ 正确用法:声明式标签配置
在脚本中通过 options.tags 设置静态标签:
import http from 'k6/http';
import { check } from 'k6';
export const options = {
vus: 10,
duration: '30s',
tags: {
test_id: 'api-login-stress-v2', // 唯一测试标识
env: 'staging',
team: 'backend',
},
};
export default function () {
const res = http.get('https://test.k6.io');
check(res, { 'status is 200': (r) => r.status === 200 });
}
运行时,所有指标将自动附加 test_id=api-login-stress-v2 等标签,Grafana 查询示例(InfluxQL):
SELECT mean("value") FROM "http_req_duration" WHERE "test_id" = 'api-login-stress-v2' GROUP BY time(1s)
✅ 命令行动态打标(推荐 CI/CD 场景)
避免硬编码,使用 --tag 动态注入环境相关值:
k6 run --tag test_id="ci-deploy-$(date +%s)" \
--tag env=production \
--tag branch=main \
script.js
⚠️ 注意:--tag 优先级高于脚本内 options.tags,冲突时以命令行为准;多个 --tag 可重复使用。
❌ 常见误区澄清
- 不要尝试在 VU 内部动态修改 options.tags:options 是只读配置,运行时修改无效;
- tags 作用于整个测试生命周期,不是单个请求或单个 VU —— 这正是实现“按测试隔离指标”的设计前提;
- 请求级标签(如 http.get(url, { tags: { name: 'login' } }))仅影响该请求指标,无法满足“区分不同测试任务”的全局需求。
✅ 最佳实践建议
- 在 CI 流水线中结合 Git 分支、提交哈希、时间戳生成唯一 test_id;
- 使用语义化标签名(如 service, region, scenario),便于 Grafana 创建变量下拉筛选;
- 配合 --out influxdb= 输出时,确保 InfluxDB 的 retention policy 和连续查询适配新增标签维度。
通过合理使用 options.tags 或 --tag,你无需修改数据采集逻辑,即可在监控层面清晰分离多批次 k6 测试的虚拟用户行为,真正实现可观测性驱动的性能验证。











