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:
76
Makefile
76
Makefile
@@ -4,40 +4,81 @@
|
||||
# Docker
|
||||
# =============================================================================
|
||||
|
||||
# Fichiers compose - ajouter monitoring si MONITORING=1
|
||||
COMPOSE_FILES := -f compose.yaml
|
||||
ifdef MONITORING
|
||||
COMPOSE_FILES += -f compose.monitoring.yaml
|
||||
endif
|
||||
|
||||
.PHONY: up
|
||||
up: ## Lancer tous les services
|
||||
docker compose up -d
|
||||
up: ## Lancer les services (ajouter MONITORING=1 pour inclure observabilité)
|
||||
docker compose $(COMPOSE_FILES) up -d
|
||||
|
||||
.PHONY: up-full
|
||||
up-full: ## Lancer TOUS les services (app + monitoring)
|
||||
docker compose -f compose.yaml -f compose.monitoring.yaml up -d
|
||||
|
||||
.PHONY: down
|
||||
down: ## Arrêter tous les services
|
||||
docker compose down
|
||||
down: ## Arrêter tous les services (app + monitoring)
|
||||
docker compose -f compose.yaml -f compose.monitoring.yaml down --remove-orphans
|
||||
|
||||
.PHONY: restart
|
||||
restart: ## Redémarrer tous les services
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
restart: ## Redémarrer les services
|
||||
docker compose $(COMPOSE_FILES) down
|
||||
docker compose $(COMPOSE_FILES) up -d
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild: ## Reconstruire et relancer les services (sans cache)
|
||||
docker compose down
|
||||
docker compose build --no-cache
|
||||
docker compose up -d
|
||||
docker compose $(COMPOSE_FILES) down
|
||||
docker compose $(COMPOSE_FILES) build --no-cache
|
||||
docker compose $(COMPOSE_FILES) up -d
|
||||
|
||||
.PHONY: build
|
||||
build: ## Reconstruire les images Docker (sans cache)
|
||||
docker compose build --no-cache
|
||||
docker compose $(COMPOSE_FILES) build --no-cache
|
||||
|
||||
.PHONY: logs
|
||||
logs: ## Voir les logs de tous les services (Ctrl+C pour quitter)
|
||||
docker compose logs -f
|
||||
docker compose $(COMPOSE_FILES) logs -f
|
||||
|
||||
.PHONY: ps
|
||||
ps: ## Afficher le statut des services
|
||||
docker compose ps
|
||||
docker compose $(COMPOSE_FILES) ps
|
||||
|
||||
.PHONY: clean
|
||||
clean: ## Supprimer volumes et images locales
|
||||
docker compose down -v --rmi local
|
||||
docker compose -f compose.yaml -f compose.monitoring.yaml down -v --rmi local
|
||||
|
||||
# =============================================================================
|
||||
# Monitoring
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: monitoring-up
|
||||
monitoring-up: ## Lancer uniquement les services de monitoring
|
||||
docker compose -f compose.monitoring.yaml up -d
|
||||
|
||||
.PHONY: monitoring-down
|
||||
monitoring-down: ## Arrêter les services de monitoring
|
||||
docker compose -f compose.monitoring.yaml down
|
||||
|
||||
.PHONY: monitoring-logs
|
||||
monitoring-logs: ## Voir les logs du monitoring
|
||||
docker compose -f compose.monitoring.yaml logs -f
|
||||
|
||||
.PHONY: grafana
|
||||
grafana: ## Ouvrir Grafana dans le navigateur (http://localhost:3001)
|
||||
@echo "Grafana: http://localhost:3001 (admin/admin)"
|
||||
@command -v xdg-open >/dev/null && xdg-open http://localhost:3001 || echo "Ouvrir manuellement: http://localhost:3001"
|
||||
|
||||
.PHONY: prometheus
|
||||
prometheus: ## Ouvrir Prometheus dans le navigateur (http://localhost:9090)
|
||||
@echo "Prometheus: http://localhost:9090"
|
||||
@command -v xdg-open >/dev/null && xdg-open http://localhost:9090 || echo "Ouvrir manuellement: http://localhost:9090"
|
||||
|
||||
.PHONY: glitchtip
|
||||
glitchtip: ## Ouvrir GlitchTip dans le navigateur (http://localhost:8081)
|
||||
@echo "GlitchTip: http://localhost:8081"
|
||||
@command -v xdg-open >/dev/null && xdg-open http://localhost:8081 || echo "Ouvrir manuellement: http://localhost:8081"
|
||||
|
||||
# =============================================================================
|
||||
# Shell
|
||||
@@ -172,6 +213,13 @@ ci: ## Lancer TOUS les tests et checks (comme en CI)
|
||||
# Scripts
|
||||
# =============================================================================
|
||||
|
||||
.PHONY: setup-hooks
|
||||
setup-hooks: ## Installer les git hooks (pre-push: make ci && make e2e)
|
||||
@echo "Installation des git hooks..."
|
||||
@cp scripts/hooks/pre-push .git/hooks/pre-push
|
||||
@chmod +x .git/hooks/pre-push
|
||||
@echo "✅ Git hooks installés (pre-push)"
|
||||
|
||||
.PHONY: check-bc
|
||||
check-bc: ## Vérifier l'isolation des Bounded Contexts
|
||||
./scripts/check-bc-isolation.sh
|
||||
|
||||
Reference in New Issue
Block a user