Built-in metrics

Kinds: Counter (sum), Gauge (last/min/max), Rate (pass fraction), Trend (HDR histogram: avg/min/med/max + any percentile).

Core

MetricKindMeaning
iterationsCountercompleted iterations
iteration_durationTrendfull iteration time (ms)
dropped_iterationsCounterarrival-rate starts skipped (no free VU at max_vus)
vusGaugeactive virtual users
vus_maxGaugepeak VUs
checksRatecheck pass rate (tag check = name)
data_sent / data_receivedCounterbytes on the wire

HTTP (and GraphQL)

MetricKind
http_reqsCounter
http_req_durationTrend (sending + waiting + receiving)
http_req_blockedTrend (connection acquisition)
http_req_connectingTrend (TCP)
http_req_tls_handshakingTrend
http_req_sending / http_req_waiting / http_req_receivingTrend
http_req_failedRate (transport error or status ≥ 400)

Other protocols

MetricKind
ws_connecting, ws_session_durationTrend
ws_msgs_sent, ws_msgs_receivedCounter
grpc_reqs / grpc_req_durationCounter / Trend
graphql_reqs / graphql_req_durationCounter / Trend
tcp_reqs / tcp_req_durationCounter / Trend
udp_reqs / udp_req_durationCounter / Trend

Standard tags

scenario, name (request name), method, status, proto, group (::outer::inner), check (on checks samples), instance (agent name in distributed runs), plus everything from defaults.tags, scenario tags: and request tags:.

Custom metrics

Declare in YAML for threshold validation, or create ad hoc from JS:

metrics:
  carts_created: { kind: counter }
  render_time: { kind: trend, time: true }
new Counter('carts_created').add(1);
session.trendAdd('render_time', 16.6);