Raccourcis clavier

Appuyez sur ← ou → pour passer d'un chapitre à l'autre

Appuyez sur S ou / pour rechercher dans la documentation

Appuyez sur ? pour afficher cette aide

Appuyez sur Échap pour masquer cette aide

Supervision

Ce chapitre dit ce qui est mesurable aujourd'hui, ce qui est livré mais pas déployé, et ce qui reste à faire. Chaque ligne indique son état.

ÉtatSens
En serviceLe code ou l'unité existe et le déploiement l'installe
Développement seulDéfini dans podman-compose.yml, absent du déploiement Quadlet
Livré, non branchéLe fichier existe, aucun service ne le charge
Retiré du déploiementL'unité existe, le déploiement ne l'installe plus

Points de santé de l'API (en service)

Ces routes sont servies par forge-api (crates/forge-api/src/router.rs).

RouteRôleRéponse
GET /api/v1/healthz (alias /api/v1/health)Le processus répond200 avec status, service, version, et sha du binaire quand il est connu
GET /api/v1/readyzLe backend est prêt200 si PostgreSQL et Valkey répondent, sinon 503 ; indique aussi le nombre de connecteurs chargés
GET /api/v1/health/statusPage d'état publiqueSonde PostgreSQL, Ollama, Qdrant, Authentik et SMTP ; overall vaut operational, degraded ou down ; 503 si down

Le champ sha de healthz permet de vérifier de l'extérieur quelle version tourne après un déploiement.

curl -fsS https://<votre-domaine-api>/api/v1/healthz
curl -fsS https://<votre-domaine-api>/api/v1/readyz

Résultat attendu : healthz répond 200 avec le champ status ; readyz répond 200, ou 503 quand PostgreSQL ou Valkey ne répondent pas (voir Diagnostics et signalement). En production, <votre-domaine-api> est l'adresse publique de l'application, notée app.<domaine> dans les autres chapitres.

Métriques de l'API (en service)

GET /metrics (à la racine, hors /api/v1) rend le format texte Prometheus. L'accès est protégé :

  • avec PROMETHEUS_BEARER_TOKEN posée, le collecteur envoie Authorization: Bearer <jeton> ; un jeton faux reçoit 401 ;
  • sans cette variable, seule une session de plateforme avec élévation est acceptée.

Quatre séries sont émises :

SérieÉtiquettes
forge_http_requests_totalméthode, chemin normalisé, statut
forge_http_request_duration_secondsméthode, chemin normalisé
forge_http_errors_totalméthode, chemin normalisé, statut (4xx et 5xx)
forge_http_active_connectionsaucune

Il n'existe pas de série tool_call_duration_ms, resolve_ms, credentials_ms ni cache_hit_rate dans le code. Les temps par appel d'outil n'ont pas de métrique exportée.

Stockage des métriques et des journaux (développement seul)

podman-compose.yml définit deux services :

ServiceConteneurPortRéglage
VictoriaMetricsforge-victoriametrics8428rétention de 12 mois (--retentionPeriod=12)
VictoriaLogsforge-victorialogs9428rétention par défaut de l'outil

Aucune unité Quadlet ne déploie ces deux services, et ils ne figurent pas dans les niveaux de containers/scripts/deploy-all.sh. Le fichier de collecte prévu pour VictoriaMetrics n'est pas monté dans le conteneur : VictoriaMetrics ne collecte donc rien tant que vous ne l'alimentez pas (collecte configurée par vos soins, ou envoi depuis un autre collecteur).

Les valeurs VICTORIAMETRICS_RETENTION et VICTORIALOGS_RETENTION du fichier .env.example ne sont lues par aucun code.

Règles d'alerte (livré, non branché)

Un fichier de règles d'alerte du dépôt contient 24 règles : disque, mémoire, processeur, charge, conteneur arrêté ou en boucle de redémarrage, sauvegarde ancienne, certificat proche de l'expiration, force brute SSH, pic de décisions CrowdSec, coffre scellé, intégrité du système de fichiers. Elles supposent node_exporter sur l'hôte.

Aucun service vmalert n'existe dans les fichiers Compose ni dans les unités Quadlet. Ces règles ne s'évaluent donc nulle part aujourd'hui. Plusieurs règles ciblent des conteneurs nommés chatbotaurus-*, alors que les conteneurs du plan backend s'appellent forge-* : elles ne correspondraient à rien en l'état. Les brancher est un travail à faire : démarrer vmalert, y monter ce fichier, installer node_exporter et choisir un destinataire des alertes.

Supervision de l'hôte (en service)

Le déploiement du plan backend installe Beszel (hub et agent), un outil de supervision de serveurs : charge, mémoire, disque, conteneurs. Le hub écoute sur la boucle locale de l'hôte et n'est pas publié : la route d'ingress qui le placerait derrière Authentik est périmée et n'est câblée par aucun script. Accédez-y par un tunnel SSH.

Détection d'intrusion

OutilÉtatRôle
CrowdSecEn service (forge-crowdsec, niveau 2 du déploiement)Analyse les journaux du proxy inverse et de SSH ; un scénario cible les abus de l'API MCP (seuils et durée de blocage fixés dans un scénario du dépôt, non publiés)
FalcoRetiré du déploiement le 2026-09-19L'unité existe ; le chargement du pilote noyau échoue sur l'hôte cible, une version eBPF reste à concevoir
ZeekRetiré du déploiement le 2026-09-19Fichier de site que la préparation d'hôte n'installe pas

Les outils SIEM et IDS retirés (spec 98), comme les tableaux de bord du plan client, ne font pas partie du plan backend. Grafana existe côté client sous la forme d'un service mcp-grafana de tableaux de bord, accessible par le connecteur du même nom.

Niveaux de dégradation (livré, non branché)

Le code définit une cascade de dégradation selon la charge (DegradationManager, crates/forge-core/src/mgaas/resource_monitor.rs) : Full, puis NoMcts, NoTot, NoSelfConsistency, TemplateOnly. Les seuils de mémoire, de processeur et de latence sont fixés dans le code et ne sont pas publiés ici.

Deux réserves :

  • Les moteurs de raisonnement que cette cascade coupe (arbre de pensées, auto-cohérence, Monte Carlo) n'ont aucun appelant de production : la route GET /api/v1/mgaas/engines les déclare « dormants ».
  • GET /api/v1/mgaas/monitor (réservé aux administrateurs avec élévation) crée un moniteur neuf à chaque appel, et aucun appelant de production n'y écrit de mesure. D'après la lecture du code, le niveau rendu est Full.

Ne bâtissez pas d'alerte sur ce point.

Interroger VictoriaLogs

Quand l'export d'audit est activé (voir Journaux), VictoriaLogs répond sur son API LogsQL, par exemple /select/logsql/query (chemins utilisés par le connecteur connectors/victorialogs.yaml). Le connecteur du catalogue permet de poser ces requêtes depuis le chat.

Bonnes pratiques

  • Sondez readyz depuis votre supervision externe, pas healthz : healthz répond même quand la base est arrêtée.
  • Posez PROMETHEUS_BEARER_TOKEN sur un jeton aléatoire et donnez-le au seul collecteur.
  • Branchez vos propres alertes avant de compter sur le fichier de règles.

Voir aussi