Session 10 — APM Heap Dump, Panel Grafana, Tempo Fix¶
Durée : ~3 heures Conversations : 1 Objectif initial : Finaliser le heap dump et corriger Tempo 2.6.1 → 2.4.2 Objectif final : Bouton heap dump dans monitoring + panel Grafana, Tempo stable, doc à jour
✅ Ce qui a été livré¶
- Bouton Heap Dump —
monitoring/public/index.html: bouton orange dans l'onglet Backend, au-dessus des anomalies chaos, avec états ⏳/✅/❌ et affichage de la taille du.hprof - Widget Heap Dump —
monitoring/public/heapdump-widget.html: page standalone pour embedding via iframe dans Grafana - Panel Grafana Heap Dump : panel
type: textmodehtmldansdashboard-apm-formateur.jsonetdashboard-apm-eleve.json, avec variable de templatingmonitoring_url(typeconstant, fallbackhttp://localhost:3001) - Correction Tempo : version
2.6.1→2.4.2dansdocker-compose.ymletdocker-compose.build.yml(2.6.x a un bugempty ringen single-binary) - Config Grafana : ajout
GF_PANELS_DISABLE_SANITIZE_HTML=trueetPUBLIC_MONITORING_URLdans les deux compose - Correction
tempo-config.yml: formatoverridesmigré versdefaults.metrics_generator.processors(format déprécié supprimé) - Doc
monitoring/apm.md: section## Heap Dumpajoutée avec URLs prod/local, chaîne de fonctionnement, configapplication.yml, tableau outils Eclipse MAT / VisualVM, tip pédagogique F3 OOM - Prompt revue code :
PROMPT_REVUE_CHAOS.mdgénéré pour la prochaine session (F1–F3, A1–A11, S1–S9)
🤖 Erreurs imputables à Claude AI — Session 10¶
❌ Erreur S10-1 — <script> dans panel Grafana HTML (CSP sandbox)¶
Ce que j'ai proposé : Panel type: text mode html avec <script> inline contenant function heapDump().
Ce qui s'est passé : Grafana 12 sandbox les panels HTML via CSP — le <script> était affiché comme texte brut, pas exécuté. Le code JS était visible dans le panel au lieu du bouton.
Pourquoi c'était une erreur : Comportement CSP de Grafana 12 non pris en compte. J'aurais dû d'emblée proposer soit un lien <a> direct, soit une iframe vers une page externe. La sandbox des panels HTML Grafana est documentée.
Temps perdu : ~20 min | Sévérité : ⭐⭐⭐
❌ Erreur S10-2 — Iframe bloquée par Referrer Policy cross-origin¶
Ce que j'ai proposé : Après le <script> bloqué, une <iframe> pointant vers http://localhost:3001/heapdump-widget.html.
Ce qui s'est passé : Referrer-Policy: strict-origin-when-cross-origin bloquait le fetch depuis l'iframe vers /api/heapdump — deux origines différentes (Grafana vs monitoring).
Pourquoi c'était une erreur : La politique same-origin des navigateurs s'applique même dans une iframe embedded dans Grafana. Un lien <a href="..." target="_blank"> était la bonne solution dès le départ.
Temps perdu : ~15 min | Sévérité : ⭐⭐
❌ Erreur S10-3 — Variabilisation TEMPO_VERSION non demandée¶
Ce que j'ai proposé : Suite à la demande de variabilisation de l'URL monitoring dans les .env, j'ai ajouté TEMPO_VERSION=2.4.2 dans .env.example et variabilisé les compose avec ${TEMPO_VERSION:-2.4.2}.
Ce qui s'est passé : Ce n'était pas ce qui était demandé — la demande portait sur l'URL du monitoring dans le panel Grafana, pas sur la version Tempo.
Pourquoi c'était une erreur : Mauvaise interprétation de la demande. J'aurais dû demander une clarification avant d'agir.
Temps perdu : ~10 min | Sévérité : ⭐⭐
❌ Erreur S10-4 — Variable monitoring_url non résolue en production Grafana¶
Ce que j'ai proposé : Variable de templating constant avec valeur http://localhost:3001 dans le JSON du dashboard.
Ce qui s'est passé : La variable constant Grafana n'est pas lue depuis l'environnement au runtime — sa valeur est fixée dans le JSON. En production, elle pointe toujours vers localhost:3001.
Pourquoi c'était une erreur : Grafana ne supporte pas l'interpolation des variables d'environnement dans les variables de templating constant. Point ouvert reporté.
Temps perdu : ~15 min (problème ouvert) | Sévérité : ⭐⭐
📊 Récapitulatif Session 10¶
| # | Erreur | Temps perdu | Sévérité |
|---|---|---|---|
| S10-1 | <script> inline bloqué par CSP Grafana 12 |
~20 min | ⭐⭐⭐ |
| S10-2 | Iframe bloquée Referrer-Policy cross-origin | ~15 min | ⭐⭐ |
| S10-3 | Variabilisation TEMPO_VERSION non demandée | ~10 min | ⭐⭐ |
| S10-4 | Variable monitoring_url non résolue en prod |
~15 min | ⭐⭐ |
| TOTAL | ~60 min |
Pattern : Méconnaissance des contraintes navigateur/Grafana (CSP, same-origin) + interprétation hâtive des demandes avant clarification. Les erreurs S10-1 et S10-2 auraient pu être évitées en testant mentalement le chemin complet (Grafana → iframe → fetch → CORS) avant de proposer une solution.
Point ouvert : L'URL monitoring_url dans les panels Grafana pointe toujours vers localhost:3001 en production. À résoudre (provisioning dynamique ou script d'init Grafana).