6.5 KiB
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
-
HTTP Requests Total
- Nom:
veza_gin_http_requests_total - Labels:
method,path,status - Type: Counter
- Nom:
-
HTTP Request Duration
- Nom:
veza_gin_http_request_duration_seconds - Labels:
method,path,status - Type: Histogram
- Nom:
-
Error Metrics
- Collectées via
internal/metrics/error_metrics.go - Exposées via
/api/v1/metrics/aggregated
- Collectées via
Endpoints
- Prometheus Metrics:
GET /metricsouGET /api/v1/metrics - Aggregated Metrics:
GET /api/v1/metrics/aggregated - System Metrics:
GET /api/v1/system/metrics
Exemple de Requête
curl http://localhost:8080/api/v1/metrics
Configuration Prometheus (scrape config)
Ajoutez cette configuration à votre prometheus.yml:
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
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
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:
import { initSentry } from '@/lib/sentry';
// Initialiser Sentry avant le rendu de l'app
initSentry();
Utilisation
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:
-
Request Rate
rate(veza_gin_http_requests_total[5m]) -
Error Rate
rate(veza_gin_http_requests_total{status=~"5.."}[5m]) -
Response Time (p95)
histogram_quantile(0.95, rate(veza_gin_http_request_duration_seconds_bucket[5m])) -
Request Duration par Endpoint
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
-
High Error Rate
- alert: HighErrorRate expr: rate(veza_gin_http_requests_total{status=~"5.."}[5m]) > 0.1 for: 5m annotations: summary: "High error rate detected" -
Slow Response Time
- 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" -
Service Down
- 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
- Prometheus metrics exposées sur
/api/v1/metrics - Sentry backend configuré avec
SENTRY_DSN - 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
# 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
- Générer une erreur de test dans le backend ou frontend
- Vérifier dans le dashboard Sentry que l'erreur apparaît
- Vérifier que le contexte (request_id, user_id) est présent
📚 Ressources
🆘 Dépannage
Métriques Prometheus non visibles
- Vérifier que le middleware
Metrics()est activé dans le router - Vérifier que l'endpoint
/metricsest accessible - Vérifier les logs pour erreurs de collecte
Sentry ne capture pas les erreurs
- Vérifier que
SENTRY_DSN/VITE_SENTRY_DSNest configuré - Vérifier que Sentry est initialisé (
initSentry()appelé) - Vérifier les filtres d'erreurs (
ignoreErrors,denyUrls) - Vérifier la console du navigateur pour erreurs Sentry