RousselTMLEARNING

DevOps

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

Envoyer les résultats de k6 dans Prometheus (remote write) ou en OpenTelemetry, les visualiser dans Grafana et les corréler avec les métriques, traces et profils du système testé.

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 } });
}

Articles liés

Tests de charge avec Grafana k6 : pourquoi et quels types de tests

Pourquoi tester la performance avant la production, les types de tests (smoke, charge, stress, pic, endurance…

Écrire des scripts k6 : requêtes, vérifications, scénarios et exécuteurs

La structure d'un script k6 (init, setup, default, teardown), les requêtes HTTP, les checks, les groupes et t…

Seuils, métriques et résultats d'un test k6

Lire le résumé d'un test k6, comprendre les métriques intégrées (http_req_duration, http_req_failed, iteratio…

Pour aller plus loin