Référence des métriques¶
Ce document liste toutes les métriques Prometheus exposées par
PerfShop, organisées par famille. Toutes sont scrapées par Prometheus
toutes les 15 secondes via l'endpoint /actuator/prometheus du backend
Spring Boot.
Les noms ci-dessous sont les noms exposés à Prometheus : Micrometer
convertit automatiquement les points (.) des Gauges Java en
underscores (_) lors de l'export. Une Gauge déclarée
chaos.business.a1.tva côté Java apparaît donc comme
chaos_business_a1_tva dans Prometheus.
Métriques chaos infrastructure¶
Toutes exposées par ChaosService.java avec un tag type= qui
identifie le levier :
| Métrique | Plage | Description |
|---|---|---|
chaos_intensity{type="memory"} |
0–105 | Cible mémoire (105 = OOM) |
chaos_guardrail{type="memory"} |
0–100 | Garde-fou mémoire (% du heap max) |
chaos_intensity{type="gc_pressure"} |
0–100 | Intensité pression GC sawtooth |
chaos_intensity{type="db_pool"} |
0–100 | Saturation HikariCP |
chaos_intensity{type="thread_pool"} |
0–100 | Saturation pool Tomcat |
chaos_intensity{type="cpu"} |
0–100 | Charge CPU backend |
chaos_intensity{type="slow_query"} |
0–100 | Délai SQL injecté |
chaos_intensity{type="deadlock"} |
0–100 | Probabilité deadlock |
chaos_intensity{type="network"} |
0–100 | Délai réseau + 503 aléatoires |
Le tag type permet d'agréger ou de filtrer par levier dans les
requêtes PromQL : chaos_intensity{type="cpu"} retourne uniquement
le slider CPU.
Métriques chaos métier¶
Exposées par BusinessChaosService.java. Chaque anomalie A1 – A16
dispose de son propre compteur — incrémenté à chaque déclenchement.
| Métrique | Type | Description |
|---|---|---|
chaos_business_level |
Gauge | Niveau courant (0–4) |
chaos_business_a1_tva |
Gauge | Compteur A1 — TVA 19,6 % |
chaos_business_a2_arrondi |
Gauge | Compteur A2 — Arrondi prix plancher |
chaos_business_a3_stock |
Gauge | Compteur A3 — Stock non décrémenté |
chaos_business_a4_email |
Gauge | Compteur A4 — Email frais port absents |
chaos_business_a5_doublon |
Gauge | Compteur A5 — Double commande |
chaos_business_a6_promo |
Gauge | Compteur A6 — Code promo invalide |
chaos_business_a7_livraison |
Gauge | Compteur A7 — Délai jours calendaires |
chaos_business_a8_race |
Gauge | Compteur A8 — Race condition stock |
chaos_business_a9_inject |
Gauge | Compteur A9 — Log injection |
chaos_business_a10_total |
Gauge | Compteur A10 — Total historique faux |
chaos_business_a11_token |
Gauge | Compteur A11 — Token logout |
chaos_business_a12_loyalty |
Gauge | Compteur A12 — Remise fidélité |
chaos_business_a13_currency |
Gauge | Compteur A13 — Devise USD |
chaos_business_a14_shipping |
Gauge | Compteur A14 — Frais port doublés |
chaos_business_a15_history |
Gauge | Compteur A15 — Corruption historique |
chaos_business_a16_cancel |
Gauge | Compteur A16 — Annulation sans restock |
Les compteurs sont implémentés en Gauges (et non en Counters) parce
qu'ils peuvent être remis à zéro par BusinessChaosService.reset(),
ce qu'un Counter Prometheus ne supporte pas sémantiquement.
Métriques chaos fonctionnel¶
Exposées par FunctionalChaosService.java. Quatre compteurs pour les
quatre anomalies F1 – F4 :
| Métrique | Type | Description |
|---|---|---|
chaos_functional_level |
Gauge | Niveau courant (0–4) |
chaos_functional_f1_npe |
Gauge | F1 — NullPointerException paiement |
chaos_functional_f2_stackoverflow |
Gauge | F2 — StackOverflowError calcul |
chaos_functional_f3_oom |
Gauge | F3 — OutOfMemoryError catalogue |
chaos_functional_f4_corruption |
Gauge | F4 — Corruption silencieuse |
Métriques chaos sécurité¶
Exposées par SecurityChaosService.java. Douze compteurs pour les
douze failles S1 – S12 :
| Métrique | Type | Description |
|---|---|---|
chaos_security_level |
Gauge | Niveau courant (0–4) |
chaos_security_s1_sqli |
Gauge | S1 — Injection SQL |
chaos_security_s2_idor |
Gauge | S2 — IDOR Commandes |
chaos_security_s3_hash |
Gauge | S3 — Hash password exposé |
chaos_security_s4_xss |
Gauge | S4 — XSS stocké |
chaos_security_s5_price |
Gauge | S5 — Falsification prix |
chaos_security_s6_timing |
Gauge | S6 — Timing attack login |
chaos_security_s7_token |
Gauge | S7 — Token HMAC faible |
chaos_security_s8_path |
Gauge | S8 — Path Traversal |
chaos_security_s9_mass |
Gauge | S9 — Mass Assignment |
chaos_security_s10_portal |
Gauge | S10 — Stats portail non auth. |
chaos_security_s11_sqli |
Gauge | S11 — SQLi login portail |
chaos_security_s12_idor |
Gauge | S12 — IDOR élévation privilèges |
Métriques chaos scripting¶
Exposées par ChaosScriptingService.java. Pas de compteur par
événement — uniquement le niveau et le nombre de bundles actifs (qui
reflète la pression mémoire des sessions loggées) :
| Métrique | Type | Description |
|---|---|---|
chaos_scripting_level |
Gauge | Niveau courant (0–4) |
chaos_scripting_bundles_active |
Gauge | Nombre de TokenBundle en mémoire |
Métriques système¶
Exposées par ContainerCpuMetrics.java :
| Métrique | Type | Description |
|---|---|---|
container_cpu_usage |
Gauge | Charge CPU container (0.0 – 1.0) |
La métrique est obtenue via réflexion sur
com.sun.management.OperatingSystemMXBean.getCpuLoad() — elle peut
retourner 0.0 sur les JVM qui n'exposent pas cette méthode (cas avec
modules forts JDK 16+ sans --add-opens).
Métriques Spring Boot / JVM¶
PerfShop expose toutes les métriques standard de Micrometer via l'autoconfiguration Spring Boot Actuator. Les principales utiles pour le diagnostic chaos :
Mémoire JVM¶
| Métrique | Type | Description |
|---|---|---|
jvm_memory_used_bytes{area="heap"} |
Gauge | Heap occupé |
jvm_memory_max_bytes{area="heap"} |
Gauge | -Xmx configuré |
jvm_memory_used_bytes{area="nonheap"} |
Gauge | Metaspace, code cache |
jvm_memory_committed_bytes{area="heap"} |
Gauge | Heap actuellement commit |
Garbage Collector¶
| Métrique | Type | Description |
|---|---|---|
jvm_gc_pause_seconds_count |
Counter | Nombre de pauses GC |
jvm_gc_pause_seconds_sum |
Counter | Temps total cumulé en pause |
jvm_gc_pause_seconds_max |
Gauge | Pause GC la plus longue récente |
jvm_gc_memory_promoted_bytes_total |
Counter | Octets promus en old gen |
Threads JVM¶
| Métrique | Type | Description |
|---|---|---|
jvm_threads_states_threads{state="runnable"} |
Gauge | Threads actifs |
jvm_threads_states_threads{state="blocked"} |
Gauge | Threads bloqués sur monitor |
jvm_threads_states_threads{state="waiting"} |
Gauge | Threads en attente |
jvm_threads_live_threads |
Gauge | Total threads vivants |
Tomcat¶
| Métrique | Type | Description |
|---|---|---|
tomcat_threads_busy_threads |
Gauge | Threads Tomcat occupés |
tomcat_threads_current_threads |
Gauge | Threads Tomcat actuels |
tomcat_threads_config_max_threads |
Gauge | Max configuré (200 par défaut) |
HikariCP (pool DB)¶
| Métrique | Type | Description |
|---|---|---|
hikaricp_connections_active |
Gauge | Connexions actuellement utilisées |
hikaricp_connections_idle |
Gauge | Connexions inactives dans le pool |
hikaricp_connections_pending |
Gauge | Threads en attente d'une connexion |
hikaricp_connections_max |
Gauge | Taille max du pool |
hikaricp_connections_min |
Gauge | Taille min du pool |
hikaricp_connections_acquire_seconds_max |
Gauge | Temps max d'acquisition récent |
HTTP Server (Spring MVC)¶
| Métrique | Type | Description |
|---|---|---|
http_server_requests_seconds_count{uri,method,status} |
Counter | Nombre de requêtes |
http_server_requests_seconds_sum{uri,method,status} |
Counter | Temps total cumulé |
http_server_requests_seconds_max{uri,method,status} |
Gauge | Latence max récente |
http_server_requests_seconds_bucket{uri,le} |
Histogram | Histogramme pour quantiles |
L'histogramme _bucket permet de calculer les quantiles arbitraires
via histogram_quantile() en PromQL — c'est le mécanisme standard
Prometheus pour les latences.
Quelques requêtes PromQL utiles¶
Latence p99 globale corrélée au CPU¶
# Latence p99 sur 1 minute
histogram_quantile(0.99,
sum(rate(http_server_requests_seconds_bucket[1m])) by (le))
# À comparer avec
container_cpu_usage
À tracer dans le même panel Grafana — on observe directement la corrélation entre la charge CPU et la dégradation de la latence p99.
Taux d'anomalies métier sur 5 minutes¶
# Toutes les anomalies métier confondues
sum(rate(chaos_business_a1_tva[5m]))
+ sum(rate(chaos_business_a2_arrondi[5m]))
+ sum(rate(chaos_business_a3_stock[5m]))
# … additionner les 16 compteurs
Plus pratique : utiliser une regex sur le nom de métrique avec
{__name__=~"chaos_business_a.*"} (selon la version de Prometheus).
Saturation du pool HikariCP¶
# Threads en attente d'une connexion DB
hikaricp_connections_pending > 0
# Ratio de saturation (0 à 1)
hikaricp_connections_active / hikaricp_connections_max
À déclencher en alerte : hikaricp_connections_pending > 0 pendant
plus de 30 secondes signale presque toujours un Chaos DB Pool actif
ou une vraie saturation pool en production.
Heap dépassant 80 % du max¶
Seuil à 0.8 = par défaut le memoryGuardrail du Chaos Mémoire. Quand
ce ratio dépasse 0.8, on est soit en chaos mémoire actif, soit en
fuite mémoire réelle de l'application.
Pression GC excessive¶
# Temps GC cumulé sur 1 minute (en secondes)
rate(jvm_gc_pause_seconds_sum[1m])
# > 0.1 (10 % du temps en GC) = problème
C'est la signature typique du Chaos GC Pressure : le ratio dépasse 0.2 facilement à intensité 100 %, alors qu'une appli saine reste sous 0.05.
Failles sécurité actives¶
Permet de visualiser une vue agrégée de l'activité du Chaos Sécurité sans devoir lister les 12 compteurs individuellement.
Métriques client (Chaos Frontend)¶
Les métriques du Chaos Frontend ne sont pas exposées à Prometheus
directement — elles sont collectées par chaos-agent.js côté
navigateur et POSTées vers /api/chaos/client-metrics toutes les 2
secondes. Le service de monitoring les consomme et les affiche en
temps réel, sans persistance Prometheus.
Les champs collectés sont documentés dans la page Chaos Frontend.
Endpoint Prometheus¶
Toutes les métriques backend ci-dessus sont disponibles sur :
Cet endpoint est exclu du ChaosInterceptor — il reste accessible
même quand le backend est sous chaos à 100 %, ce qui garantit que
Prometheus peut continuer à scraper. Le scraping se fait toutes les
15 secondes par défaut (configurable dans
prometheus/prometheus.yml).
Pour aller plus loin¶
- Chaos Performance — leviers infrastructure et leurs métriques
- Chaos Métier — détail des 16 anomalies métier
- Chaos Fonctionnel — détail des 4 anomalies F1 – F4
- Chaos Sécurité — détail des 12 failles S1 – S12
- Chaos Frontend — métriques client navigateur
- Observabilité — Prometheus — configuration scraping
- Observabilité — Grafana — dashboards livrés