k6结合xk6-output-prometheus-pushgateway时自定义标签不生效如何解决?
解决k6 Pushgateway输出缺失自定义标签的问题
问题分析
你遇到的核心问题是:xk6-output-prometheus-pushgateway插件默认不会自动将k6指标的自定义tags转换为Prometheus的labels,同时如果创建Counter时未显式声明自定义标签,插件会直接忽略这些标签。
解决方案
1. 修改脚本,显式声明自定义标签
在创建Counter指标时,必须明确指定要使用的自定义标签键,让k6和插件识别这个标签的合法性:
// 显式声明要使用的status_code标签 const httpErrors = new Counter("http_errors", { tags: ["status_code"] }); // 原有计数逻辑保持不变 if (!success) { httpErrors.add(1, { status_code: `${res.status}` }); }
2. 添加环境变量启用标签转换
在运行k6的命令中,增加K6_PROMETHEUS_PUSHGATEWAY_TAGS_AS_LABELS=true环境变量,这个配置会强制插件将k6指标的tags转换为Prometheus的labels:
K6_WEB_DASHBOARD=true K6_WEB_DASHBOARD_EXPORT=./reports/api_spins/smoke-test-report.html K6_PUSHGATEWAY_URL=http://localhost:9091 K6_JOB_NAME=k6_tests K6_PROMETHEUS_PUSHGATEWAY_TAGS_AS_LABELS=true k6 run --out csv=./reports/api_spins/smoke_test_results.csv --out output-prometheus-pushgateway ./dist/tests/api_spins/smoke_test.es.js
3. 验证结果
重新运行测试后,Pushgateway中应该会出现带status_code标签的指标,格式如下:http_errors{instance="",job="k6_tests",status_code="400"} 2
额外注意事项
- 自定义标签键必须符合Prometheus的label命名规范:只能包含字母、数字、下划线(
_)、冒号(:)和连字符(-),status_code是符合要求的。 - 你已经使用
@latest构建插件,版本兼容性无需额外处理。
内容的提问来源于stack exchange,提问作者Armax7
相关产品推荐
相关产品推荐

