# FICHE 24 — Observabilité (metrics + request id) ## Ce que ça ajoute 1) **/metrics** sur l'API FastAPI (`server/api_upload.py`) — en plus du dashboard qui l'avait déjà. 2) **Métriques HTTP** (req/s, statuts, latence, in-flight) **y compris** pour les requêtes bloquées par la sécu. 3) **Métriques "sécurité"** : compteur des blocages (`auth_fail`, `rate_limit`, `demo_safe`, `killswitch`, `ip_block`). 4) **Header `X-Request-Id`** sur toutes les réponses (pratique pour corréler logs ↔ requêtes ↔ incidents). ## Endpoints utiles - Dashboard (Flask): - `GET /metrics` (déjà présent) - `GET /health` / `GET /api/status` (selon ta config) - API Upload (FastAPI): - `GET /healthz` - `GET /metrics` ✅ (nouveau) - `GET /api/traces/status` ## Nouvelles métriques - `http_requests_total{service,method,path,status}` - `http_request_duration_seconds{service,method,path}` - `http_requests_in_flight{service}` - `rpa_security_blocks_total{service,reason}` ### Labels - `service` vient de `RPA_SERVICE_NAME` (en prod: posé par les unités systemd). - `path` utilise le **template** de route quand disponible (évite la cardinalité). ## Test rapide (sans Prometheus) ### 1) Vérifier l'API ```bash curl -s http://127.0.0.1:8000/metrics | head curl -i http://127.0.0.1:8000/api/traces/status | head ``` Tu dois voir `X-Request-Id:` dans la réponse. ### 2) Provoquer un blocage et voir le compteur monter ```bash # Sans token -> 401 (si RPA_AUTH_REQUIRED) curl -i http://127.0.0.1:8000/api/traces/sessions | head # Re-scrape metrics curl -s http://127.0.0.1:8000/metrics | grep -E "rpa_security_blocks_total|http_requests_total" | head ``` ## Prometheus (optionnel) Un exemple de config (si tu veux monter un Prometheus plus tard) : - `deploy/prometheus/prometheus.yml` (si tu l'ajoutes) qui scrape : - `127.0.0.1:8000/metrics` (API) - `127.0.0.1:5001/metrics` (Dashboard) ## Bonus Ce patch corrige aussi **un bug de syntaxe Python** dans `core/healing/strategies/format_transformation.py` (f-string + regex) qui empêchait un `py_compile` complet.