# Monitoring Setup - Veza Platform **Date:** 2025-01-27 **Statut:** ✅ Configuré et opérationnel --- ## 📊 Vue d'Ensemble Le monitoring de Veza Platform est configuré avec : - **Prometheus** pour les métriques backend - **Sentry** pour le suivi des erreurs (backend + frontend) - **Grafana** (optionnel) pour la visualisation --- ## 🔧 Backend - Prometheus ### Configuration Les métriques Prometheus sont automatiquement collectées via le middleware `middleware.Metrics()` dans `veza-backend-api/internal/middleware/metrics.go`. ### Métriques Disponibles 1. **HTTP Requests Total** - Nom: `veza_gin_http_requests_total` - Labels: `method`, `path`, `status` - Type: Counter 2. **HTTP Request Duration** - Nom: `veza_gin_http_request_duration_seconds` - Labels: `method`, `path`, `status` - Type: Histogram 3. **Error Metrics** - Collectées via `internal/metrics/error_metrics.go` - Exposées via `/api/v1/metrics/aggregated` ### Endpoints - **Prometheus Metrics:** `GET /metrics` ou `GET /api/v1/metrics` - **Aggregated Metrics:** `GET /api/v1/metrics/aggregated` - **System Metrics:** `GET /api/v1/system/metrics` ### Exemple de Requête ```bash curl http://localhost:8080/api/v1/metrics ``` ### Configuration Prometheus (scrape config) Ajoutez cette configuration à votre `prometheus.yml`: ```yaml scrape_configs: - job_name: 'veza-backend' scrape_interval: 15s metrics_path: '/api/v1/metrics' static_configs: - targets: ['localhost:8080'] labels: environment: 'staging' service: 'veza-backend-api' ``` --- ## 🐛 Backend - Sentry ### Configuration Sentry est initialisé dans `veza-backend-api/cmd/api/main.go` si `SENTRY_DSN` est configuré. ### Variables d'Environnement ```bash SENTRY_DSN=https://your-sentry-dsn@sentry.io/project-id SENTRY_ENVIRONMENT=staging # ou production, development SENTRY_SAMPLE_RATE_TRANSACTIONS=0.1 # 10% des transactions SENTRY_SAMPLE_RATE_ERRORS=1.0 # 100% des erreurs ``` ### Intégration - Erreurs capturées automatiquement via `middleware.SentryRecover()` - Stack traces incluses - Contexte enrichi avec request_id, user_id, etc. --- ## 🎨 Frontend - Sentry ### Configuration Sentry est configuré dans `apps/web/src/lib/sentry.ts` et doit être initialisé dans `apps/web/src/main.tsx`. ### Variables d'Environnement ```bash VITE_SENTRY_DSN=https://your-sentry-dsn@sentry.io/project-id ``` ### Fonctionnalités - ✅ Capture automatique des erreurs React - ✅ Performance Monitoring (10% en prod, 100% en dev) - ✅ Session Replay (10% des sessions, 100% avec erreur) - ✅ Enrichissement avec contexte (request_id, user_id) - ✅ Filtrage des erreurs (réseau, CORS, extensions) ### Initialisation Assurez-vous que `initSentry()` est appelé dans `main.tsx`: ```typescript import { initSentry } from '@/lib/sentry'; // Initialiser Sentry avant le rendu de l'app initSentry(); ``` ### Utilisation ```typescript import { captureException, captureMessage } from '@/lib/sentry'; try { // Code qui peut échouer } catch (error) { captureException(error, { context: 'additional info' }); } // Capturer un message personnalisé captureMessage('Something important happened', 'info'); ``` --- ## 📈 Grafana Dashboards ### Dashboard Recommandé Créez un dashboard Grafana avec les panneaux suivants: 1. **Request Rate** ```promql rate(veza_gin_http_requests_total[5m]) ``` 2. **Error Rate** ```promql rate(veza_gin_http_requests_total{status=~"5.."}[5m]) ``` 3. **Response Time (p95)** ```promql histogram_quantile(0.95, rate(veza_gin_http_request_duration_seconds_bucket[5m])) ``` 4. **Request Duration par Endpoint** ```promql histogram_quantile(0.50, rate(veza_gin_http_request_duration_seconds_bucket[5m])) by (path) ``` ### Exemple de Dashboard JSON Voir `grafana/dashboards/veza-backend.json` (à créer) --- ## 🚨 Alertes ### Alertes Prometheus Recommandées 1. **High Error Rate** ```yaml - alert: HighErrorRate expr: rate(veza_gin_http_requests_total{status=~"5.."}[5m]) > 0.1 for: 5m annotations: summary: "High error rate detected" ``` 2. **Slow Response Time** ```yaml - alert: SlowResponseTime expr: histogram_quantile(0.95, rate(veza_gin_http_request_duration_seconds_bucket[5m])) > 2 for: 5m annotations: summary: "Response time is slow" ``` 3. **Service Down** ```yaml - alert: ServiceDown expr: up{job="veza-backend"} == 0 for: 1m annotations: summary: "Veza backend is down" ``` ### Alertes Sentry Configurez dans le dashboard Sentry: - Erreurs critiques (> 100 erreurs/min) - Nouveaux types d'erreurs - Erreurs par utilisateur (> 10 erreurs/user) --- ## 📝 Checklist de Déploiement ### Staging - [x] Prometheus metrics exposées sur `/api/v1/metrics` - [x] Sentry backend configuré avec `SENTRY_DSN` - [x] Sentry frontend configuré avec `VITE_SENTRY_DSN` - [ ] Grafana dashboard créé - [ ] Alertes Prometheus configurées - [ ] Alertes Sentry configurées ### Production - [ ] Prometheus scrape config ajouté - [ ] Sentry DSN configuré (environnement: production) - [ ] Sample rates ajustés (10% transactions, 100% erreurs) - [ ] Grafana dashboard déployé - [ ] Alertes configurées et testées - [ ] Notifications configurées (email, Slack, PagerDuty) --- ## 🔍 Vérification ### Vérifier Prometheus ```bash # Vérifier que les métriques sont exposées curl http://localhost:8080/api/v1/metrics | grep veza_gin # Vérifier les métriques agrégées curl http://localhost:8080/api/v1/metrics/aggregated ``` ### Vérifier Sentry 1. Générer une erreur de test dans le backend ou frontend 2. Vérifier dans le dashboard Sentry que l'erreur apparaît 3. Vérifier que le contexte (request_id, user_id) est présent --- ## 📚 Ressources - [Prometheus Documentation](https://prometheus.io/docs/) - [Sentry Documentation](https://docs.sentry.io/) - [Grafana Documentation](https://grafana.com/docs/) --- ## 🆘 Dépannage ### Métriques Prometheus non visibles 1. Vérifier que le middleware `Metrics()` est activé dans le router 2. Vérifier que l'endpoint `/metrics` est accessible 3. Vérifier les logs pour erreurs de collecte ### Sentry ne capture pas les erreurs 1. Vérifier que `SENTRY_DSN` / `VITE_SENTRY_DSN` est configuré 2. Vérifier que Sentry est initialisé (`initSentry()` appelé) 3. Vérifier les filtres d'erreurs (`ignoreErrors`, `denyUrls`) 4. Vérifier la console du navigateur pour erreurs Sentry