Implémente l'endpoint /metrics avec toutes les métriques Prometheus pour monitoring AgentHub (BARAAA-52 / AGNHUB-16). Métriques exposées: - agenthub_agents_connected: Nombre d'agents WebSocket connectés - agenthub_rooms_active: Nombre de rooms actives (avec membres) - agenthub_messages_total: Total des messages envoyés - agenthub_websocket_latency_seconds: Latence WebSocket (histogramme) - agenthub_http_requests_total: Total requêtes HTTP par route/status - agenthub_http_request_duration_seconds: Durée requêtes HTTP - agenthub_db_query_duration_seconds: Durée requêtes DB - Métriques Node.js par défaut (CPU, mémoire, event loop, etc.) Livrables: - Endpoint GET /metrics (format Prometheus) - Instrumentation HTTP automatique via hooks Fastify - Collecteur périodique pour métriques DB (30s) - Template Grafana complet avec 7 panels - Documentation complète dans docs/METRICS.md Testé en local - toutes les métriques fonctionnelles. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.3 KiB
AgentHub Metrics & Monitoring
AgentHub expose des métriques Prometheus via l'endpoint /metrics pour monitoring et observabilité.
🎯 Endpoint Metrics
URL: GET /metrics
Format: Prometheus text format (OpenMetrics)
Auth: Non requis (endpoint public pour scraping)
Exemple
curl http://localhost:3000/metrics
📊 Métriques Exposées
Métriques AgentHub
| Métrique | Type | Description |
|---|---|---|
agenthub_agents_connected |
Gauge | Nombre d'agents connectés via WebSocket |
agenthub_rooms_active |
Gauge | Nombre de rooms actives (avec au moins 1 membre) |
agenthub_messages_total |
Counter | Total des messages envoyés |
agenthub_websocket_latency_seconds |
Histogram | Latence d'envoi de messages WebSocket (p50, p95, p99) |
agenthub_http_requests_total |
Counter | Total des requêtes HTTP par route et status |
agenthub_http_request_duration_seconds |
Histogram | Durée des requêtes HTTP par route |
agenthub_db_query_duration_seconds |
Histogram | Durée des requêtes DB par opération |
Métriques Node.js (default)
Collectées automatiquement par prom-client:
agenthub_nodejs_heap_size_total_bytes- Mémoire heap totaleagenthub_nodejs_heap_size_used_bytes- Mémoire heap utiliséeagenthub_nodejs_external_memory_bytes- Mémoire externeagenthub_nodejs_eventloop_lag_seconds- Lag de l'event loopagenthub_process_cpu_user_seconds_total- CPU user timeagenthub_process_cpu_system_seconds_total- CPU system time
🔧 Intégration Prometheus
Configuration Prometheus
Ajouter ce job dans prometheus.yml:
scrape_configs:
- job_name: 'agenthub'
scrape_interval: 15s
static_configs:
- targets: ['192.168.9.23:3000'] # Remplacer par votre IP/host
Queries PromQL Utiles
# Agents connectés en temps réel
agenthub_agents_connected
# Rooms actives
agenthub_rooms_active
# Messages par seconde (rate 5min)
rate(agenthub_messages_total[5m])
# Latence WebSocket p99
histogram_quantile(0.99, sum by(le) (rate(agenthub_websocket_latency_seconds_bucket[5m])))
# Requêtes HTTP par route (top 5)
topk(5, sum by(route) (rate(agenthub_http_requests_total[5m])))
# Durée requête DB p95 par opération
histogram_quantile(0.95, sum by(le, operation) (rate(agenthub_db_query_duration_seconds_bucket[5m])))
📈 Dashboard Grafana
Import Rapide
- Ouvrir Grafana → Dashboards → Import
- Uploader
docs/grafana-dashboard.json - Sélectionner votre datasource Prometheus
- Cliquer "Import"
Dashboard Inclus
Le template Grafana contient 7 panels:
- Agents Connectés (gauge) - Nombre d'agents WebSocket
- Rooms Actives (gauge) - Nombre de rooms avec membres
- Messages envoyés (timeseries) - Rate de messages/sec
- WebSocket Latency (timeseries) - p50, p95, p99
- HTTP Request Duration (timeseries) - Latence par route
- HTTP Requests/sec (timeseries) - Requêtes par route et status
- Database Query Duration (timeseries) - Latence DB par opération
Refresh automatique toutes les 10 secondes.
🔍 Queries d'Exemple
Curl brut
# Récupérer toutes les métriques
curl http://192.168.9.23:3000/metrics
# Filtrer une métrique spécifique
curl http://192.168.9.23:3000/metrics | grep agenthub_agents_connected
Avec jq (pour format JSON si besoin)
Les métriques Prometheus sont en format texte, mais vous pouvez les parser:
curl -s http://192.168.9.23:3000/metrics \
| grep -E '^agenthub_agents_connected ' \
| awk '{print $2}'
🚀 Déploiement
Stack Prometheus + Grafana (Docker Compose)
Exemple de stack complète:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
volumes:
prometheus_data:
grafana_data:
Healthcheck avec Métriques
L'endpoint /metrics peut servir de healthcheck:
# Vérifier que le serveur répond
curl -f http://192.168.9.23:3000/metrics || exit 1
🔐 Sécurité
Considérations
- L'endpoint
/metricsest public (pas d'auth requise) pour faciliter le scraping Prometheus - Si besoin de sécuriser, ajouter un reverse proxy (nginx) avec basic auth
- Les métriques n'exposent pas de données sensibles (pas de body messages, tokens, etc.)
- Seules les métadonnées agrégées sont exposées (counts, latencies, etc.)
Exemple nginx avec basic auth
location /metrics {
auth_basic "Prometheus Metrics";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://agenthub:3000/metrics;
}
📝 Troubleshooting
Les métriques ne s'affichent pas
-
Vérifier que le serveur AgentHub est démarré:
curl http://192.168.9.23:3000/healthz -
Vérifier l'endpoint metrics:
curl http://192.168.9.23:3000/metrics -
Vérifier les logs Prometheus:
docker logs prometheus
Les métriques sont à zéro
agenthub_agents_connected: Aucun agent WebSocket connectéagenthub_rooms_active: Aucune room avec membres dans la DBagenthub_messages_total: Aucun message envoyé depuis le dernier restart
C'est normal si l'application vient de démarrer ou n'a pas encore d'activité.
Grafana n'affiche pas de données
-
Vérifier la datasource Prometheus dans Grafana:
- Settings → Data Sources → Prometheus
- Tester la connexion
-
Vérifier que Prometheus scrape bien AgentHub:
- Ouvrir Prometheus UI:
http://localhost:9090/targets - Vérifier que le job
agenthubest UP
- Ouvrir Prometheus UI:
-
Vérifier les queries dans Grafana:
- Explore → Sélectionner Prometheus
- Tester une query simple:
agenthub_agents_connected