⚙️ Fonctions

Tout ce qu'il faut pour maîtriser le chaos

9 anomalies backend · 5 anomalies frontend · Chaos Sécurité OWASP 12 failles · Chaos Métier 16 anomalies · Chaos Fonctionnel APM · Scripting 5 niveaux · Stack APM complète et 8 socles — un seul déploiement Docker.


💥 Chaos Engineering

Injection d'anomalies en temps réel

Activez et désactivez des pannes réelles sans redémarrer l'application. Trois niveaux d'intensité par anomalie.

💥 Chaos Admin Panel
chaos.perfshop.io
🔴
Injection instantanée
Aucun redémarrage nécessaire — les anomalies sont injectées à chaud via l'API Spring Boot.
🎚️
3 niveaux d'intensité
Faible, Moyen, Critique — adaptez la pression selon l'objectif pédagogique ou le niveau de l'équipe.
📋
Audit trail complet
Chaque injection est horodatée et visible dans les traces Tempo — corrélation immédiate anomalie/impact.
🖥️ Backend — 9 anomalies
🧠
Memory Leak
JVM Heap
Fuite mémoire progressive simulée — la heap JVM monte jusqu'au GC storm, puis OOM. Observable en temps réel dans Grafana.
FaibleMoyenCritique
🐢
Slow Query
PostgreSQL
Injection de latence SQL — les requêtes s'allongent artificiellement, le p95 monte, le pool de connexions se sature.
FaibleMoyenCritique
🔒
Thread Pool Saturation
Tomcat
Le pool de threads HTTP se remplit — les nouvelles requêtes attendent ou échouent. Timeouts en cascade observables.
FaibleMoyenCritique
External Latency
HTTP Client
Simulation d'un service tiers lent — les appels externes ajoutent une latence configurable, le circuit breaker peut se déclencher.
FaibleMoyenCritique
💾
DB Connection Leak
HikariCP
Les connexions DB ne sont pas libérées — le pool HikariCP s'épuise progressivement jusqu'au rejet des nouvelles requêtes.
FaibleMoyenCritique
🔄
CPU Spike
JVM Thread
Thread en boucle infinie — la CPU monte et reste haute, dégradant toutes les requêtes en parallèle. Visible dans Pyroscope.
FaibleMoyenCritique
Error Rate Injection
HTTP 500
Injection d'un taux d'erreur configurable sur les endpoints — de 5% à 80% de 500. Teste la résilience des scripts et alertes.
5%30%80%
♻️
GC Pressure
JVM GC
Cycle d'allocation mémoire cadencé (4s FILL + 1s RELEASE + 2s PAUSE) — la heap monte par vagues régulières. La pression GC est visible en temps réel dans Grafana JVM.
FaibleMoyenCritique
⛓️
Deadlock
JVM Thread
Inversion de verrous dans OrderService — les threads se bloquent mutuellement sur /api/orders. Détectable via thread dump JVM ou les traces distribuées Tempo.
FaibleMoyenCritique
🖥️ Frontend — 5 anomalies
Render Blocking
React
Des calculs lourds bloquent le thread principal React — l'UI se fige, le score Lighthouse s'effondre.
FaibleMoyenCritique
🌐
Network Throttling
XHR/Fetch
Les requêtes API depuis le front sont ralenties côté client — simule une connexion dégradée.
FaibleMoyenCritique
💥
Memory Leak UI
React / DOM
Accumulation de listeners et de nœuds DOM non nettoyés — la mémoire navigateur monte progressivement jusqu'au crash de l'onglet.
FaibleMoyenCritique
🔁
Infinite Re-render
React State
Boucle de re-rendu React provoquée par un useEffect mal configuré — CPU navigateur à 100%, UI non responsive.
FaibleMoyenCritique
🌀
Double Fetch
window.fetch
Monkey-patch de window.fetch() qui multiplie chaque requête réseau par un facteur 0–5. Expose les bugs React StrictMode et les doubles event listeners — invisible au monitoring réseau standard.
×1×3×5

Chaos Fonctionnel APM

Exceptions JVM réelles — diagnostics APM

Injectez de vraies exceptions Java dans le parcours applicatif. Identifiez la méthode fautive via Tempo et Pyroscope — pas les logs.

Objectif pédagogique : diagnostic APM
Les étudiants doivent identifier la méthode fautive via Tempo (traces distribuées) et Pyroscope (flamegraphs) — sans accès aux logs.
Désactivé — Nominal
0 exception
Comportement nominal — paiement, calcul de commande et catalogue fonctionnent correctement. Aucune exception injectée.
🟢
F1 — NullPointerException
Junior · OrderService.java
NPE injectée dans processPaymentPublic() — toute commande retourne HTTP 500. Stack trace courte dans Tempo.
Difficulté : Junior
🟡
F2 — StackOverflowError
Confirmé · FunctionalChaosService.java
Récursion infinie dans calculateOrderTotal() — stack répétitive (50+ frames identiques) visible dans Tempo. F1 reste actif (cumul).
Difficulté : Confirmé
🟠
F3 — OutOfMemoryError
Expert · ProductService.java
Allocation heap massive dans getAllProducts() — blocs 64 Mo en boucle. Heap JVM visible dans Grafana, heap dump analysable via Eclipse MAT. F1+F2 actifs.
Difficulté : ExpertOOM → /actuator/heapdump
F4 — Corruption silencieuse des données
Master · ProductService.java
HTTP 200, Tempo vert, aucune exception. Pourtant les fiches produits affichent un prix gonflé ×1,5, un stock épuisé et une description tronquée. Le monitoring ne voit rien — seul le payload révèle l'anomalie. F1+F2+F3 actifs (cumul).
Difficulté : Master

🎯 Chaos Métier ISTQB

16 anomalies e-commerce progressives

Injectez des anomalies progressives dans le parcours e-commerce. Les étudiants les identifient et les documentent — pas les corrigent.

Désactivé
Comportement nominal
TVA 20% correct, stock décrémenté, email complet, idempotence active. 0 anomalie.
🟢Junior — N1
3 anomalies simples
A1 TVA 19,6% · A2 prix arrondis à l'entier · A3 stock non décrémenté.
🟡Confirmé — N2
7 anomalies (cumul)
+A4 email sans frais de port · A5 double commande · A6 code promo invalide accepté · A7 délai en jours calendaires.
🔴Expert — N3
11 anomalies (cumul)
+A8 race condition stock · A9 log injection · A10 total historique faux · A11 token session valide 30s après logout.
Master — N4
16 anomalies (cumul)
+5 anomalies silencieuses à fort impact financier — invisibles sans inspection JSON ou vérification base/interface.
🎯
Exercice ISTQB — identification, analyse d'impact et documentation des anomalies. Monitoring temps réel dans l'onglet Chaos Métier du dashboard admin.

🔐 Chaos Sécurité OWASP

12 failles web injectables — OWASP Top 10

Injectez des failles web progressives dans l'application. Les étudiants les identifient, les exploitent et les documentent — dans un environnement isolé, à usage pédagogique uniquement.

Désactivé
Sécurisé — nominal
JPQL paramétré, BCrypt, vérification d'appartenance, whitelist de champs. 0 faille active.
🟢Junior — N1
3 failles — A01/A02/A03
S1 SQL injection /api/products/search · S2 IDOR /api/orders/{id} · S3 hash BCrypt exposé dans /api/auth/me.
🟡Confirmé — N2
6 failles (cumul)
+S4 XSS stocké adresse · S5 prix falsifié accepté · S6 timing attack login. Nécessitent Burp Suite, scripts Python.
🔴Expert — N3
9 failles (cumul)
+S7 token HMAC clé faible "secret123" · S8 path traversal /invoice · S9 mass assignment email/password.
Master — N4
12 failles — scénario chaîné
+S10 stats portail sans auth · S11 SQLi login portail /admin · S12 IDOR élévation de privilèges. Exploitation S10→S11→S12.
⚠️
Couvre OWASP A01 à A09 — SQL Injection, IDOR, XSS, Mass Assignment, Path Traversal, Timing Attack, Hash exposure. Monitoring temps réel des attaques détectées. Usage pédagogique uniquement — environnement isolé.

📊 Observabilité

Stack APM complète intégrée

Prometheus, Grafana, Loki, Tempo et Pyroscope préconfigurés — zéro setup, corrélation métriques/logs/traces/profiling out-of-the-box.

📈
Grafana + Prometheus
Dashboards pré-configurés JVM, HTTP, DB, chaos state. Alertes incluses.
🔍
Tempo — Distributed Tracing
Traces distribuées OpenTelemetry — suivez chaque requête de l'UI au SQL.
🔥
Pyroscope — Continuous Profiling
Flamegraphs CPU/mémoire en continu — identifiez le code qui consomme pendant les injections de chaos.
📋
Loki — Log Aggregation
Logs centralisés avec labels chaos — BusinessChaos, SecurityChaos, ChaosInterceptor corrélables aux traces Tempo.
📈 Grafana Dashboard
grafana.perfshop.io
📡 Monitoring avancé — 14 graphiques temps réel
🧠
JVM — 14 métriques live
Heap, threads (live/daemon/peak), GC pause, pool BDD HikariCP, threads Tomcat, latence p50/p95/p99 par route.
🌐
Métriques navigateur — 7 métriques client
FPS, heap JS, Long Tasks/s, nœuds DOM, requêtes fetch en vol, CPU worker, âge snapshot — 7 métriques JS depuis un Web Worker dédié.
🐳
Docker stats — tous containers
CPU, RAM, réseau IN/OUT, I/O disque par container — vue générale et vue détaillée Nginx vs Spring Boot.
⬇️
Heap Dump Eclipse MAT
Génération du fichier .hprof en un clic depuis le dashboard APM Élève — analysable avec Eclipse MAT ou VisualVM pour diagnostiquer l'anomalie F3 OOM.

📜 Chaos Scripting

Scripting JMeter & k6

Scripts fournis pour JMeter et k6, en 5 niveaux de complexité (Désactivé, Junior, Confirmé, Expert, Maestro).

Scripts de base
Thread Groups, HTTP Samplers, assertions simples. Idéal pour démarrer et comprendre les fondamentaux du test de charge.
Scénarios réalistes
Corrélations dynamiques, paramétrage CSV, think time, montée en charge progressive. Scénarios e-commerce complets.
Chaos + observabilité
Scripts coordonnés avec injections chaos — déclenchement automatique d'anomalies pendant le test, corrélation métriques.
Scripts ES6 basiques
VUs, durée, thresholds simples. Import des bibliothèques k6 standard. Idéal pour les équipes DevOps habituées au JS.
Scenarios & checks
Scenarios multiples, checks avancés, gestion des sessions, export Prometheus / Grafana Cloud. SLO intégrés.
Chaos orchestration
Orchestration chaos depuis k6 — appels API chaos synchronisés avec la montée de charge, scénarios de résilience complets.

🐳 Stack Docker

32 containers · Un seul docker compose up

La stack complète clé en main — application, observabilité APM, tests de charge, gestion de tests, automatisation et pédagogie.

Application· 4 containers
Spring Boot 3.2 / Java 21
API REST · JVM · Prometheus
⚛️
React 18 / Vite
Boutique e-commerce
⚙️
Admin PerfShop
Interface d'administration
🏠
Welcome Portal
Hub d'accès pédagogique
Bases de données· 2 containers
🐬
MySQL 8.0
Base de données principale
🐘
PostgreSQL 16
BDD Squash TM
Chaos Engineering· 2 containers
💥
Chaos Admin
Injection anomalies temps réel
📊
Monitoring Dashboard
Métriques temps réel
Observabilité APM· 7 containers
🔥
Prometheus
Collecte métriques
📈
Grafana 12
Dashboards observabilité
📋
Loki
Stockage & requête logs
🔄
Promtail
Collecte logs Docker
🔗
Tempo 2.4
Traces distribuées OTel
🔬
Pyroscope
Profiling continu JVM
🌱
Grafana Seed
Init dashboards & ACL
Search & Logs· 4 containers
🔍
OpenSearch 2.13
Indexation full-text
🗂️
OpenSearch Dashboards
UI Kibana-compatible
↗️
Vector 0.38
Collecte logs → OpenSearch
🌱
OpenSearch Seed
Init templates & index
Tests de charge· 2 containers
JMeter 5.5
Tests de charge
🖥️
JMeter UI
Interface pilotage tirs
Gestion & Automatisation QA· 5 containers
📋
Squash TM
ALM gestion de tests
🎮
Squash Orchestrator
Pilotage exécution
🌐
Selenium Grid
Chrome headless · noVNC
🤖
Robot Framework
Automatisation · pytest
🌱
Squash Seed
Init données TM
Git · Scripts · Pédagogie· 5 containers
🦊
Forgejo
Git auto-hébergé · SQLite
📝
Scripts UI
Éditeur · lanceur pédagogique
🧩
Games / Escape-room
100 énigmes · BAC+1→+5
📚
Documentation
MkDocs Material
🌱
Forgejo Seed
Init dépôt & comptes CI

Prêt à former vos équipes ou vos étudiants ?

Déployez en 5 minutes. Usage personnel libre — licence requise dès le premier usage professionnel.

▶ Voir la démo live 💳 Obtenir une licence