Aller au contenu

TechniquePratique

Requêtes MetricsQL et tableaux de bord Grafana

Pour : ingénieurs et SREPrérequis : Avoir lu la leçon 3 du parcours et connaître les bases de PromQL.

7.1 Fonctionnalités MetricsQL utiles à l’observabilité LLM

Section intitulée « 7.1 Fonctionnalités MetricsQL utiles à l’observabilité LLM »

MetricsQL est largement compatible avec PromQL : la plupart des requêtes PromQL s’exécutent sans modification. Quelques extensions sont particulièrement utiles ici :

FonctionnalitéUsage pour les charges LLM
rate() et increase() sans extrapolationTotaux de coût plus proches des valeurs réelles sur des compteurs peu alimentés
Fenêtre d’analyse facultative (rate(x) utilise automatiquement le pas)Requêtes de tableau de bord plus simples
median_over_time, quantile_over_timeStatistiques robustes sur les scores et les nombres de tokens
rollup_candlestickOuverture, plus haut, plus bas, clôture d’une série (par exemple les scores RAG)
outliers_madRepère les séries qui s’écartent du groupe (par exemple un modèle parmi d’autres)
Modèles WITHRéutiliser des sous-expressions dans les requêtes longues

Coût LLM horaire par modèle (USD) :

sum by (model, provider) (increase(llm_cost_usd_total[1h]))

Projection du coût quotidien (extrapolée à partir des 30 dernières minutes) :

sum by (model) (rate(llm_cost_usd_total[30m])) * 86400

Les 10 tenants les plus coûteux (dernières 24 heures) :

topk(10, sum by (tenant_id) (increase(llm_cost_usd_total[24h])))

Ratio tokens de sortie sur tokens d’entrée (repérer les requêtes atypiques) :

sum(rate(llm_tokens_total{type='output'}[5m]))
/
sum(rate(llm_tokens_total{type='input'}[5m]))

Anomalie du score de recherche : détecter la dérive d’un index

Section intitulée « Anomalie du score de recherche : détecter la dérive d’un index »

Z-score du score de recherche par rapport à une référence de 7 jours (résolution horaire) :

(
avg by (index_id) (rag_retrieval_score_avg)
- avg_over_time(avg by (index_id) (rag_retrieval_score_avg)[7d:1h])
)
/
stddev_over_time(avg by (index_id) (rag_retrieval_score_avg)[7d:1h])

Une valeur proche de 0 signifie « comme d’habitude ». Une valeur fortement négative (par exemple inférieure à -3, à calibrer sur votre historique) signale une baisse de la qualité de recherche. Deux limites : la référence exige sept jours d’historique et un écart type proche de zéro (score très stable) rend le ratio instable. La fonction MetricsQL outliers_mad est un outil complémentaire quand vous voulez comparer les index entre eux plutôt qu’à leur propre passé.

Pression de contexte P95 par pipeline :

histogram_quantile(0.95,
sum by (le, pipeline_id) (
rate(rag_context_pressure_ratio_bucket[10m])
)
)

Chunks abandonnés pour 100 requêtes :

sum by (pipeline_id) (rate(rag_chunks_dropped_total[5m]))
/
sum by (pipeline_id) (rate(llm_requests_total[5m]))
* 100

Latence de bout en bout P99 par modèle :

histogram_quantile(0.99,
sum by (le, model, provider) (
rate(llm_request_duration_ms_bucket[5m])
)
)

TTFT P95, délai avant le premier token (time to first token, critique en streaming) :

histogram_quantile(0.95,
sum by (le, model) (rate(llm_ttft_ms_bucket[5m]))
)

Efficacité énergétique GPU, tokens de sortie par joule :

sum(rate(llm_tokens_total{type='output'}[5m]))
/
sum(DCGM_FI_DEV_POWER_USAGE)

Module 8 : tableaux de bord Grafana, structure et panneaux

Section intitulée « Module 8 : tableaux de bord Grafana, structure et panneaux »

Un tableau de bord LLM type s’organise en quatre rangées fonctionnelles qui reprennent les quatre dimensions de la taxonomie : vue d’ensemble du service (trafic, latence, erreurs), qualité RAG, coûts et tokens, infrastructure GPU.

# Source de données provisionnée (grafana/provisioning/datasources/vm.yaml)
apiVersion: 1
datasources:
- name: VictoriaMetrics
type: victoriametrics-metrics-datasource
url: http://victoriametrics:8428
access: proxy
isDefault: true
jsonData:
timeInterval: '15s'
# Variable 'model' : liste des modèles actifs
label_values(llm_requests_total, model)
# Variable 'provider'
label_values(llm_requests_total{model=~'$model'}, provider)
# Variable 'pipeline_id'
label_values(rag_retrieval_score_avg, pipeline_id)
MétriqueType de panneauOptions clés
Requêtes par minute (SLA)Stat + sparklineVert au-dessus de 0, orange si dérive de plus de 20 %
Latence P99Stat + seuilSeuils absolus selon le SLO contractuel
Taux d’erreurStat + seuilRouge au-dessus de 1 %, orange au-dessus de 0,5 %
Score de recherche sur 7 joursSérie temporelleCourbe du score, seuil à 0,70, z-score en seconde requête
Pression de contexte P95Série temporelle + seuilZone rouge au-dessus de 0,85
Coût cumulé par modèleSérie temporelle en aires empiléesUne couleur par modèle, unité USD
Distribution des tokensCarte de chaleur ou histogrammeFait ressortir les requêtes anormalement longues
Utilisation GPUJauge + seuilOrange à 80 %, rouge à 95 %
File d’attente vLLMSérie temporelleAlerte au-delà de 10 requêtes en attente
Z-score du score de rechercheSérie temporelleSeuil à calibrer (par exemple -3), ou anomaly_score si vous utilisez vmanomaly