Supervision¶
Santé¶
| Route | Répond | Usage |
|---|---|---|
GET /health |
200 dès que le processus répond, avec la version et le commit du moteur | Redémarrer un conteneur qui ne répond plus |
GET /ready |
200 si PostgreSQL, Neo4j et le service d'embeddings répondent ; 503 sinon, avec l'état de chacun | Healthcheck, répartiteur de charge, page d'état |
/ready interroge les trois dépendances en parallèle et répond en 2 secondes au plus, même si une base ne répond plus :
{"status": "not_ready", "checks": {"postgres": "ok", "neo4j": "unreachable", "embedding": "ok"}}
Le modèle de langage n'est pas vérifié : un appel coûterait, et le moteur reste utile pour indexer sans lui.
Métriques¶
GET /metrics expose des métriques au format Prometheus, sur le réseau interne :
| Métrique | Ce qu'elle mesure |
|---|---|
tie_http_requests_total |
Requêtes par route et par statut |
tie_query_stage_seconds |
Durée de chaque étape d'une question : reformulation, embedding, recherche par sens, plein texte, thèmes, reclassement, génération, total |
tie_queries_total |
Questions par mode de recherche |
tie_llm_tokens_total |
Tokens envoyés au modèle de langage et reçus, tous appels confondus |
tie_indexations_total, tie_index_stage_seconds |
Documents indexés par type, durée de chaque étape |
tie_indexing_queue_depth, tie_indexing_in_progress, tie_indexing_rejected_total |
File d'indexation : en attente, en cours, refus pour file pleine |
Aucune métrique ne porte un identifiant de document, d'espace ou un texte. ENABLE_METRICS=false désactive la route.
scrape_configs:
- job_name: tie-engine
static_configs:
- targets: ["engine:8001"]
Journaux¶
Le moteur écrit une ligne par requête et par opération (indexation, suppression, question), sur la sortie standard, conservée par Docker avec rotation. LOG_FORMAT=json produit une ligne JSON par événement, pratique pour un collecteur :
{"time": "2026-10-20T09:27:35.683+00:00", "level": "INFO", "logger": "[engine]", "message": "POST /query → 200", "request_id": "a1b2c3"}
request_id reprend l'en-tête X-Request-ID envoyé par l'appelant : il relie une ligne du moteur à la requête de l'application. Les journaux ne contiennent jamais le texte d'une question ni le contenu d'un document.