Plan d'amélioration des emails Spring Boot Admin
Contexte
Le module admin utilise Spring Boot Admin 3.x et un template Thymeleaf pour les notifications email (status-changed.html).
L'objectif est d'améliorer la lisibilité des alertes en cas d'incident, de réduire le bruit, et d'ajouter des liens directs vers l'interface SBA (https://sb-admin.nudger.fr).
Décisions déjà validées
- Notifier les statuts critiques avec un focus sur
DOWN. - Notifier également
OUT_OF_SERVICE. - Ne pas envoyer d'email hors production (environnement beta).
- Destinataires fixes.
- Pas de logique CC/BCC spécifique par criticité.
- Pas d'exclusion de services.
- Objet validé au format métier explicite.
- Afficher une durée depuis le changement d'état.
- Liens directs vers la page instance SBA.
- Format HTML + fallback texte.
- Style visuel minimal charte Nudger.
- Contenu en anglais.
- Anti-bruit avec confirmation
DOWNaprès 60 secondes. - Regroupement des événements simultanés.
- Journalisation des notifications.
- Ajout de tests.
1) Autres options possibles
Option A - Personnalisation uniquement par templates SBA
- Conserver
MailNotifierstandard SBA. - Personnaliser le rendu via templates Thymeleaf (
status-changed.htmlet template texte associé). - Configurer les propriétés
spring.boot.admin.notify.mail.*.
Avantages
- Mise en œuvre rapide.
- Peu de code Java.
Limites
- Faible contrôle sur l'anti-flapping (60 s) et le regroupement multi-instances.
- Logique métier de filtrage/déduplication limitée.
Option B - Étendre MailNotifier (recommandé)
- Créer un notifier custom qui hérite de la mécanique email SBA.
- Gérer explicitement:
- filtrage prod uniquement,
- anti-bruit 60 s,
- regroupement d'événements,
- génération du modèle de données pour templates HTML/texte,
- logs structurés.
Avantages
- Bon compromis entre maîtrise et effort.
- Compatible avec l'écosystème SBA 3.x.
Limites
- Plus de code et de tests.
Option C - Implémenter un Notifier entièrement custom
- Construire un
Notifierfrom scratch avec pipeline de notification interne. - Utiliser un moteur de template libre (Thymeleaf/Mustache/Freemarker).
Avantages
- Contrôle maximal.
Limites
- Coût de maintenance plus élevé.
- Risque de diverger des comportements SBA standards.
2) Option retenue
Option B: étendre MailNotifier avec templates custom HTML + texte.
Cette option couvre les exigences de lisibilité, anti-bruit, regroupement, et audit, sans reconstruire tout le sous-système de notifications.
3) Plan d'implémentation
Étape 1 - Configuration & feature flags
- Ajouter des propriétés de notification dédiées:
- activation en production uniquement,
- base URL SBA (
https://sb-admin.nudger.fr), - délai anti-bruit (
60s), - fenêtre de regroupement.
- Laisser
spring.boot.admin.notify.mail.*pour la connectivité SMTP (from/to/reply-to).
Étape 2 - Notifier custom
- Implémenter un notifier custom basé sur SBA 3.x.
- Règles de diffusion:
- envoyer
DOWNetOUT_OF_SERVICE, - envoyer le retour
UPpour résolution, - ignorer beta/hors-prod.
- envoyer
- Ajouter un buffer temporel pour confirmer
DOWNà +60 s avant envoi.
Étape 3 - Regroupement des alertes
- Regrouper les événements arrivant dans une même fenêtre temporelle.
- Construire un email unique contenant la liste des instances touchées.
- Ajouter un résumé en tête: nombre de services impactés, premier timestamp, statut dominant.
Étape 4 - Rendu email
- Adapter le template HTML existant vers un rendu lisible:
- objet clair,
- section "Current status" concise,
- composants health en anomalie uniquement (
DOWN,OUT_OF_SERVICE), - liens directs vers page instance SBA,
- charte minimale Nudger.
- Ajouter un template texte fallback avec les mêmes informations essentielles.
Étape 5 - Durée et contexte
- Inclure le temps écoulé depuis le dernier état sain (
UP) ou depuis la dégradation. - Ajouter host/instance, service name, environnement, timestamp UTC + local.
Étape 6 - Logging & observabilité
- Journaliser chaque notification envoyée:
- type d'événement,
- instances concernées,
- destinataires,
- mode grouped/unitaire,
- délai appliqué.
- Ajouter logs de suppression (événement ignoré par règles) pour audit.
Étape 7 - Tests
- Tests unitaires:
- filtrage prod/beta,
- anti-bruit 60 s,
- inclusion
DOWN+OUT_OF_SERVICE, - génération des liens SBA,
- calcul de durée.
- Tests de rendu:
- snapshot HTML,
- snapshot texte fallback.
- Test d'intégration:
- scénario multi-instances avec regroupement.
Étape 8 - Déploiement progressif
- Activer d'abord sur un périmètre réduit en prod.
- Vérifier bruit, lisibilité, et précision des liens.
- Généraliser après validation de l'astreinte.
4) Format cible des emails
Subject
[Nudger] open4goods-api is DOWN - 777de8a5e899
Body (HTML et texte)
- Service:
open4goods-api - Instance:
777de8a5e899 - Status change:
UP -> DOWN - Duration:
4m 12s - Failed indicators:
reviewGenerationService: DOWN (timeout)catalogSync: OUT_OF_SERVICE (dependency unavailable)
- Links:
Instance: https://sb-admin.nudger.fr/#/instances/<id>/detailsDashboard: https://sb-admin.nudger.fr
5) Risques et parades
- Flapping persistant: augmenter la fenêtre anti-bruit ou introduire un seuil de répétition.
- Volume en incident majeur: renforcer le regroupement par lot temporel.
- Régression template: snapshots HTML/texte + tests d'intégration SBA.