Aller au contenu

TechniquePratique

VictoriaMetrics pour l'observabilité des LLM

Pour : ingénieurs et SRE · architectesPrérequis : Bases de Prometheus (types de métriques, PromQL), Docker Compose et un peu de Python.

Mode de lecture

Cette formation complète l’étape « Mettre en production » : elle traite un composant de la pile de production (le backend de métriques) et se suit après les labs et les playbooks de déploiement.

Public : ingénieurs SRE, plateforme et MLOps, architectes observabilité. Prérequis : bases de Prometheus (types de métriques, PromQL), Docker Compose, un peu de Python. Objectif : exploiter VictoriaMetrics comme backend de métriques de production pour des charges LLM et RAG, du premier déploiement jusqu’aux alertes et aux SLO.

Ce guide décrit une mise en place concrète : OpenTelemetry Collector et vmagent pour la collecte, VictoriaMetrics pour le stockage, MetricsQL pour les requêtes, Grafana pour les tableaux de bord, vmalert et Alertmanager pour les alertes. L’architecture peut être déployée dans un environnement isolé (air-gap).

Cette formation reprend et corrige mon guide « VictoriaMetrics as an LLM Observability Backend » (version 3). Les leçons signalent, dans des encadrés, les points corrigés par rapport à cette première version. Les travaux pratiques s’appuient sur le lab public VMLLM de la forge.

À l’issue de ce guide, vous saurez :

  • déployer VictoriaMetrics en mode Single pour un environnement de développement LLM ;
  • choisir entre les modes Single et Cluster selon votre charge LLM réelle ;
  • configurer la chaîne OTel Collector vers VictoriaMetrics pour collecter les métriques LLM ;
  • instrumenter une application Python/FastAPI pour qu’elle émette les bonnes métriques LLM ;
  • écrire les requêtes MetricsQL des principaux cas d’usage (coût, qualité, latence, GPU) ;
  • construire un tableau de bord Grafana LLM en quatre rangées fonctionnelles, avec des alertes en temps réel ;
  • configurer vmalert avec des règles d’alerte de niveau production pour les dégradations LLM ;
  • optimiser la rétention, le stockage et les règles d’enregistrement pour réduire les coûts d’infrastructure.
  1. Pourquoi VictoriaMetrics, architecture et mode de déploiement : le profil des métriques LLM, la comparaison avec Prometheus, Thanos et Mimir, l’architecture VM + OTel, Single ou Cluster.
  2. Installation et configuration : pile Docker Compose, OTel Collector avec le connecteur spanmetrics, collecte par vmagent.
  3. Métriques et instrumentation : taxonomie des métriques LLM, nommage, cardinalité, instrumentation Python.
  4. MetricsQL et tableaux de bord : requêtes de coût, de qualité, de latence et GPU, provisionnement et panneaux Grafana.
  5. Alertes, règles d’enregistrement et SLO : jeu de règles vmalert, routage Alertmanager, règles d’enregistrement, budget d’erreur et taux de consommation.
  6. Exploitation : rétention et réglages, sécurité et air-gap, migration depuis Prometheus, scénarios illustratifs, FAQ.
  7. Labs, checklist et aide-mémoire : quatre travaux pratiques, checklist de mise en production, aide-mémoire MetricsQL, références.
  8. Glossaire.

Ce cours nomme ses métriques applicatives llm_* et rag_* et les émet avec le client Prometheus. Ce ne sont pas les noms des conventions sémantiques OpenTelemetry GenAI, dont l’état et l’historique sont tenus dans l’article, section 2. Le principe de correspondance : les grandeurs sont les mêmes, les noms et les unités diffèrent. Si votre pile reçoit aussi des métriques gen_ai.* d’une instrumentation OpenTelemetry, retenez une seule source par grandeur et faites la traduction au Collector ou dans des règles d’enregistrement plutôt que dans chaque tableau de bord. Les noms du cours restent inchangés : ils sont alignés sur le code du lab.

Métrique du coursÉquivalent dans les conventions GenAIRemarque
llm_requests_totalnombre d’observations de l’histogramme gen_ai.client.operation.durationle statut d’échec y est porté par error.type
llm_request_duration_msgen_ai.client.operation.durationles conventions mesurent en secondes
llm_ttft_msgen_ai.client.operation.time_to_first_chunk (côté client) ou gen_ai.server.time_to_first_token (côté serveur)en secondes
llm_tokens_total{type}gen_ai.client.token.usage ventilé par gen_ai.token.type ; sur la branche principale non publiée du dépôt GenAI, gen_ai.client.inference.usage.input_tokens et gen_ai.client.inference.usage.output_tokensvoir l’article, section 2.1
llm_errors_totalattribut error.type des métriques de durée
llm_cost_usd_totalaucun : le coût ne fait pas partie des conventionsmétrique applicative, à garder
rag_*aucune métrique ; spans retrieval avec gen_ai.data_source.id et gen_ai.retrieval.top_kmétriques applicatives
étiquettes model, providerattributs gen_ai.request.model, gen_ai.provider.name

Révisé le 4 octobre 2026 : page passée en MDX avec l’encart de progression, positionnement dans la pile de production, correspondance entre les métriques llm_* et les conventions GenAI, liens vers le guide, les labs, l’article et la méthode.