RousselTMLEARNING

Observabilité

LogQL (2/2) : transformer les logs en métriques

Créer des métriques à partir des logs avec LogQL : rate, count_over_time, bytes_rate, agrégations, unwrap, quantile_over_time, topk et alertes basées sur les logs.

1. Les fonctions de plage #

Compter et mesurer.

Compter les lignes #

Transformation des logs en métriques
La plage [5m] glisse le long de l'axe du temps.
# Nombre de lignes d'erreur par seconde (moyenne sur 5 min)
rate({app="api"} |= "error" [5m])

# Nombre total d'erreurs sur 1 h
count_over_time({app="api"} |= "error" [1h])

# Débit en octets
bytes_rate({app="api"} [5m])
bytes_over_time({app="api"} [1h])

# Détecter l'absence de logs (service muet)
absent_over_time({app="api"} [10m])

2. Agréger #

Même logique que PromQL.

sum, topk et by #

# Erreurs par application
sum by (app) (rate({env="prod"} |= "error" [5m]))

# Top 5 des applications les plus bavardes
topk(5, sum by (app) (rate({env="prod"} [5m])))

# Ratio d'erreurs HTTP 5xx
sum(rate({app="nginx"} | pattern `<_> "<_> <_> <_>" <status> <_>` | status >= 500 [5m]))
  /
sum(rate({app="nginx"} [5m]))

# Évolution comparée à la veille
sum(rate({app="api"} |= "error" [5m])) / sum(rate({app="api"} |= "error" [5m] offset 1d))

3. Extraire des valeurs numériques avec unwrap #

Latences, tailles, montants.

unwrap et quantiles #

# Latence p95 par route à partir d'un champ JSON duration_ms
quantile_over_time(0.95,
  {app="api"} | json | unwrap duration_ms [5m]
) by (path)

# Moyenne, maximum, somme
avg_over_time({app="api"} | json | unwrap duration_ms [5m]) by (app)
max_over_time({app="api"} | json | unwrap duration_ms [5m]) by (app)
sum_over_time({app="shop"} | json | unwrap order_total [1h])

# Durée au format Go (1.5s, 300ms) : convertir avec duration()
quantile_over_time(0.99, {app="api"} | logfmt | unwrap duration(latency) [5m]) by (service)
Erreur Courante : unwrap exige un label numérique valide : filtrez les erreurs de parsing avec | __error__="" pour éviter des séries vides ou des erreurs de requête.

4. Alertes et tableaux de bord #

Exploiter ces métriques.

Dans Grafana #

  • Panneau Time series avec une requête LogQL de type Range.
  • Panneau Stat / Gauge avec le type Instant.
  • Alerte Grafana (Alerting > Alert rules) sur la même requête : seuil sur le taux d'erreurs.
# Variables de dashboard pour filtrer
label_values({env="prod"}, app)               # variable "app"
sum by (level) (count_over_time({app="$app"} | json [$__auto]))   # $__auto = intervalle adapté
Bonne Pratique : Pour les requêtes lourdes exécutées souvent, créez une recording rule dans le Ruler de Loki et stockez le résultat dans Prometheus/Mimir.

Articles liés

La stack LGTM (Loki, Grafana, Tempo, Mimir) : architecture et mise en place

Comprendre la stack LGTM de Grafana Labs : Loki pour les logs, Grafana pour la visualisation, Tempo pour les …

Grafana Loki : le système de logs inspiré de Prometheus

Découvrir Grafana Loki : philosophie d'indexation par labels, architecture (distributor, ingester, querier, c…

Installer Grafana Loki (Docker Compose, binaire et Helm)

Installer et valider Grafana Loki : configuration minimale, Docker Compose avec Grafana et Alloy, installatio…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !