如何在k6+InfluxDB+Grafana负载测试中单独可视化各端点测试结果?
问题:Grafana中无法查看k6每个端点的单独统计数据
已搭建基于k6、InfluxDB和Grafana的负载测试环境,目前所有端点的请求统计数据在Grafana中是聚合显示的,虽然每个端点有独立的k6测试结果文件,但无法单独查看每个端点的均值、最小值、最大值等数据。
现有配置
k6脚本
import http from 'k6/http'; import { sleep } from 'k6'; const config = JSON.parse(open("./"+__ENV.CONFIG_PATH+".json")); const body = open("./"+__ENV.BODY_PATH+".json"); export const options = { stages: [ { duration: '10s', target: 100 }, { duration: '15s', target: 10 }, { duration: '5s', target: 0 } ], }; export default function () { http.request(__ENV.METHOD, [app base URL] + __ENV.API_PATH, body, config); sleep(1); }
测试运行命令
k6 run -e METHOD=POST -e API_PATH="..." -e BODY_PATH="..." -e CONFIG_PATH="..." --out influxdb=http://localhost:8086/k6 load.js > [results filename]
解决方案
要实现每个端点的单独统计,核心是给每个请求添加端点标识标签,让InfluxDB区分不同端点的数据,再在Grafana中基于标签过滤查询。
1. 修改k6脚本,添加请求标签
在http.request调用中,通过tags字段给每个请求打上唯一的端点标签(直接用环境变量中的API_PATH作为标签值即可),修改后的脚本如下:
import http from 'k6/http'; import { sleep } from 'k6'; const config = JSON.parse(open("./"+__ENV.CONFIG_PATH+".json")); const body = open("./"+__ENV.BODY_PATH+".json"); const endpointTag = __ENV.API_PATH; export const options = { stages: [ { duration: '10s', target: 100 }, { duration: '15s', target: 10 }, { duration: '5s', target: 0 } ], }; export default function () { const requestConfig = { ...config, tags: { endpoint: endpointTag } }; http.request(__ENV.METHOD, [app base URL] + __ENV.API_PATH, body, requestConfig); sleep(1); }
修改后,k6会将endpoint标签与请求数据一同写入InfluxDB,每个端点的数据就有了唯一标识。
2. 修改Grafana面板查询,按端点过滤
- 打开Grafana中显示聚合数据的面板,进入编辑模式
- 创建端点变量:新增一个查询变量,数据源选择你的InfluxDB,查询语句为
SHOW TAG VALUES FROM "http_req_duration" WITH KEY = "endpoint",变量会自动加载所有已测试的端点 - 更新面板查询:在原有查询基础上添加过滤条件,比如
WHERE "endpoint" =~ /$endpoint/(支持多选端点)或WHERE "endpoint" = '$endpoint'(单选端点) - 保存面板后,即可通过变量切换查看不同端点的单独统计数据
3. 验证数据
重新运行各端点的测试命令,待数据写入InfluxDB后,在Grafana中切换端点变量,确认能看到对应端点的均值、最小值、最大值等独立统计数据。
内容的提问来源于stack exchange,提问作者austinw
相关产品推荐
相关产品推荐

