feat: Observabilité et monitoring complet

Implémentation complète de la stack d'observabilité pour le monitoring
de la plateforme multi-tenant Classeo.

## Error Tracking (GlitchTip)
- Intégration Sentry SDK avec GlitchTip auto-hébergé
- Scrubber PII avant envoi (RGPD: emails, tokens JWT, NIR français)
- Contexte enrichi: tenant_id, user_id, correlation_id
- Configuration backend (sentry.yaml) et frontend (sentry.ts)

## Metrics (Prometheus)
- Endpoint /metrics avec restriction IP en production
- Métriques HTTP: requests_total, request_duration_seconds (histogramme)
- Métriques sécurité: login_failures_total par tenant
- Métriques santé: health_check_status (postgres, redis, rabbitmq)
- Storage Redis pour persistance entre requêtes

## Logs (Loki)
- Processors Monolog: CorrelationIdLogProcessor, PiiScrubberLogProcessor
- Détection PII: emails, téléphones FR, tokens JWT, NIR français
- Labels structurés: tenant_id, correlation_id, level

## Dashboards (Grafana)
- Dashboard principal: latence P50/P95/P99, error rate, RPS
- Dashboard par tenant: métriques isolées par sous-domaine
- Dashboard infrastructure: santé postgres/redis/rabbitmq
- Datasources avec UIDs fixes pour portabilité

## Alertes (Alertmanager)
- HighApiLatencyP95/P99: SLA monitoring (200ms/500ms)
- HighErrorRate: error rate > 1% pendant 2 min
- ExcessiveLoginFailures: détection brute force
- ApplicationUnhealthy: health check failures

## Infrastructure
- InfrastructureHealthChecker: service partagé (DRY)
- HealthCheckController: endpoint /health pour load balancers
- Pre-push hook: make ci && make e2e avant push
This commit is contained in:
2026-02-04 11:47:01 +01:00
parent 2ed60fdcc1
commit d3c6773be5
48 changed files with 5846 additions and 32 deletions

View File

@@ -72,6 +72,46 @@ make token-beta role=ROLE_PROF email=prof@test.com
| Mailpit | http://localhost:8025 | Emails de test |
| Mercure | http://localhost:3000/.well-known/mercure | SSE Hub |
#### Monitoring (optionnel)
Lancer avec `make up-full` pour activer le stack de monitoring :
| Service | URL | Description |
|---------|-----|-------------|
| Grafana | http://localhost:3001 | Dashboards (admin/admin) |
| Prometheus | http://localhost:9090 | Métriques |
| GlitchTip | http://localhost:8081 | Error tracking |
| Loki | http://localhost:3100 | Logs centralisés |
| Alertmanager | http://localhost:9093 | Gestion alertes |
##### Stack de monitoring expliquée
**GlitchTip** - Error tracking (compatible Sentry)
- Capture automatiquement les exceptions PHP et les envoie avec leur stack trace
- Regroupe les erreurs similaires pour éviter le bruit
- Configuration : ajouter `SENTRY_DSN` dans `compose.override.yaml`
**Prometheus** - Métriques & alertes
- Collecte les métriques applicatives (latence, requêtes, erreurs) toutes les 15s
- Déclenche des alertes si les SLAs sont menacés (P95 > 200ms, error rate > 1%)
- Requêtes PromQL : http://localhost:9090/graph
**Grafana** - Dashboards visuels
- Dashboard principal : vue globale des métriques applicatives
- Dashboard per-tenant : métriques filtrées par établissement
- Credentials : admin/admin
**Loki + Promtail** - Logs centralisés
- Promtail collecte les logs de tous les conteneurs Docker
- Loki les stocke et permet les requêtes LogQL
- Accès via Grafana → Explore → Loki
- Exemple : `{container_name="classeo_php"} |= "error"`
**Alertmanager** - Notification des alertes
- Reçoit les alertes de Prometheus et les route vers les bons canaux
- En dev : envoie les emails à Mailpit (http://localhost:8025)
- En prod : configurable pour Slack, PagerDuty, email, etc.
## Stack Technique
### Backend
@@ -138,7 +178,9 @@ Chaque Bounded Context suit la même structure :
### Workflow quotidien
```bash
make up # Démarrer les services
make up # Démarrer les services (app uniquement)
make up-full # Démarrer avec monitoring (Grafana, Prometheus, Loki...)
make down # Arrêter tous les services
make logs # Suivre les logs
make test # Lancer les tests avant commit
make check # Vérifier la qualité du code