RousselTMLEARNING

Article · Grafana k6: load and performance testing

Observing a k6 test

This article is available in French.

1. Pourquoi exporter ? #

Le résumé ne suffit pas.

Voir dans le temps #

Observer un test de charge
Les courbes de k6 et du système testé sur un même dashboard.

Le résumé de fin de test donne des moyennes et des percentiles globaux. Pour comprendre à quel moment la latence décroche et pourquoi, il faut voir les métriques de k6 dans le temps, à côté du CPU, des connexions à la base et des traces du système testé.

2. Vers Prometheus #

La sortie remote write.

Configuration #

# Prometheus doit accepter le remote write
prometheus --config.file=prometheus.yml --web.enable-remote-write-receiver
K6_PROMETHEUS_RW_SERVER_URL=http://localhost:9090/api/v1/write \
K6_PROMETHEUS_RW_TREND_STATS="p(95),p(99),avg,max" \
k6 run -o experimental-prometheus-rw --tag testid=release-2.4 script.js
Métrique PrometheusOrigine
k6_http_reqs_totalCompteur http_reqs
k6_http_req_duration_p95Statistique demandée dans TREND_STATS
k6_http_req_failed_rateTaux d'échec
k6_vusUtilisateurs virtuels
Bonne Pratique : Avec K6_PROMETHEUS_RW_TREND_AS_NATIVE_HISTOGRAM=true, les durées sont envoyées en histogrammes natifs : n'importe quel percentile se calcule ensuite dans Grafana.
À savoir : Le tag testid distingue les exécutions : il permet de comparer deux tests dans le même dashboard. Grafana publie un dashboard officiel « k6 Prometheus » à importer.

En OpenTelemetry #

k6 dispose aussi d'une sortie OpenTelemetry (-o opentelemetry) qui envoie ses métriques en OTLP à un Collector ou à Alloy, pratique si votre pile est déjà OTLP.

3. Corréler avec le système testé #

Expliquer les résultats.

Méthode #

  1. Marquer le test : tag testid et annotation Grafana au début et à la fin.
  2. Afficher sur le même dashboard : débit et latence k6, saturation du service (CPU, mémoire, pool de connexions), erreurs.
  3. Repérer le moment où la latence décroche et chercher la ressource saturée à cet instant (méthode USE).
  4. Ouvrir des traces lentes de cette période (exemplars) et le profil CPU du service (Pyroscope).
import http from 'k6/http';
// Propager un en-tête de trace pour retrouver les requêtes du test dans Tempo
export default function () {
  http.get('http://api/produits', { headers: { 'X-Test-Id': __ENV.TEST_ID } });
}

📄 Observer un test k6 : Prometheus, Grafana et corrélation avec le système testé →

My progress

  • ⏱ Estimated time : ≈ 4 min

Sign in to track your progress and take notes. Sign in

✉️ Ask a question