Understand built-in and custom metrics in k6, including the four metric types and how to use them for performance analysis.
Metrics measure how your system performs under load. k6 automatically collects built-in metrics and lets you create custom metrics for application-specific measurements.
k6 organizes metrics into four types, each suited for different measurements:
Counter
Gauge
Rate
Trend
Counters sum values over time.Use for: Total number of requests, errors, or events
import { Counter } from 'k6/metrics';const errors = new Counter('errors');export default function () { if (someCondition) { errors.add(1); }}
Gauges track the latest value and min/max.Use for: Current connection count, memory usage, response size
import { Gauge } from 'k6/metrics';const contentSize = new Gauge('content_size');export default function () { const res = http.get('https://test.k6.io'); contentSize.add(res.body.length);}
Rates track the percentage of non-zero values.Use for: Error rates, success rates, check pass rates
import { Rate } from 'k6/metrics';const errorRate = new Rate('errors');export default function () { const res = http.get('https://test.k6.io'); errorRate.add(res.status !== 200);}
import { Trend } from 'k6/metrics';const waitingTime = new Trend('waiting_time');export default function () { const res = http.get('https://test.k6.io'); waitingTime.add(res.timings.waiting);}
import http from 'k6/http';import { Trend } from 'k6/metrics';const waitingTime = new Trend('waiting_time');export default function () { const res = http.get('https://quickpizza.grafana.com/'); waitingTime.add(res.timings.waiting);}
import http from 'k6/http';import { Trend } from 'k6/metrics';const apiDuration = new Trend('api_duration');export default function () { const res = http.get('https://quickpizza.grafana.com/api/pizzas'); // Add metric value with tags apiDuration.add(res.timings.duration, { endpoint: '/api/pizzas', status: res.status, });}