菜单
文档面包屑箭头 Grafana k6面包屑箭头 使用 k6面包屑箭头 计算 iteration_duration 的权宜之计
开源

计算 iteration_duration 的权宜之计

一个常见的需求是跟踪 iteration_duration 指标,但不包含 setupteardown 函数所花费的时间。此功能尚不可用,但可以使用基于 iteration_duration 或任何现有指标的阈值作为权宜之计。

其基于为所需范围的标签创建子指标阈值,并设置始终通过的条件这一概念。它适用于任何已启用且已与阈值一起使用的标签,例如

  • iteration_duration{scenario:default} 生成一个子指标,仅收集默认场景迭代的样本。使用 scenario:default 是因为在我们没有显式指定 options.scenarios 而仅使用执行快捷方式时,它是内部 k6 场景名称。
  • iteration_duration{group:::setup}iteration_duration{group:::teardown} 创建子指标,仅收集 setupteardown 的时长。k6 会隐式为 setupteardown 创建分组,而 :: 是分组分隔符。
  • http_req_duration{scenario:default} 也可以用于隔离执行的长时间运行请求。
JavaScript
import { sleep } from 'k6';
import http from 'k6/http';

export const options = {
  vus: 1,
  iterations: 1,
  thresholds: {
    'iteration_duration{scenario:default}': [`max>=0`],
    'iteration_duration{group:::setup}': [`max>=0`],
    'iteration_duration{group:::teardown}': [`max>=0`],
    'http_req_duration{scenario:default}': [`max>=0`],
  },
};

export function setup() {
  http.get('https://quickpizza.grafana.com/api/delay/5');
}

export default function () {
  http.get('http://test.k6.io/?where=default');
  sleep(0.5);
}

export function teardown() {
  http.get('https://quickpizza.grafana.com/api/delay/3');
  sleep(5);
}

已生成专用子指标,仅收集由阈值定义的范围内的样本

bash
  █ THRESHOLDS

    http_req_duration{scenario:default}
    ✓ 'max>=0' max=117.34ms

    iteration_duration{group:::setup}
    ✓ 'max>=0' max=0s

    iteration_duration{group:::teardown}
    ✓ 'max>=0' max=0s

    iteration_duration{scenario:default}
    ✓ 'max>=0' max=1.13s