Aller au contenu

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.