Aller au contenu

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

jvm_memory_used_bytes{area="heap"}
  / jvm_memory_max_bytes{area="heap"} > 0.8

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

# Toutes les failles déclenchées sur 1 minute
sum(rate({__name__=~"chaos_security_s.*"}[1m]))

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 :

GET /actuator/prometheus

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