GrafanaLokiObservabilitéLogs

Grafana Loki : centraliser ses logs sans exploser son budget

5 mai 2026 · Sphinx-Digital

Centraliser les logs d’une infrastructure de taille moyenne avec Elasticsearch revient vite à plusieurs centaines d’euros par mois. Loki propose une alternative radicalement différente, avec un modèle d’indexation qui le rend dix fois moins coûteux à opérer.

Le principe qui change tout : indexer les labels, pas le contenu

Elasticsearch indexe chaque mot de chaque ligne de log. C’est puissant pour la recherche full-text, mais l’index grossit aussi vite que les logs eux-mêmes.

Loki fait le choix inverse : il n’indexe que les labels (métadonnées), pas le contenu des logs. Le texte des logs est stocké compressé et n’est scanné qu’au moment d’une requête.

Labels indexés : {app="api", env="prod", pod="api-7d4f9b-xk2"}
Contenu non indexé : "2026-05-05T14:32:01Z ERROR timeout connecting to db"

Résultat : des coûts de stockage et d’indexation bien inférieurs, au prix d’une recherche plus lente sur le contenu.

Collecter les logs avec Promtail

Promtail est l’agent de collecte officiel pour Loki. Sur Kubernetes, un DaemonSet Promtail sur chaque node récupère automatiquement les logs de tous les pods :

scrape_configs:
  - job_name: kubernetes-pods
    kubernetes_sd_configs:
      - role: pod
    pipeline_stages:
      - cri: {}           # parse le format CRI-O/containerd
      - labeldrop:
          - filename      # éviter la cardinalité excessive

LogQL : requêter les logs comme des métriques

LogQL est le langage de requête de Loki. Il emprunte la syntaxe de PromQL.

# Filtrer les logs d'erreur de l'API
{app="api", env="prod"} |= "ERROR"

# Compter les erreurs par minute (log query → metric)
rate({app="api"} |= "ERROR" [1m])

# Parser les logs JSON et filtrer sur un champ
{app="api"} | json | status_code >= 500

La bascule entre vue log (lignes brutes) et vue métrique (graphe de taux) se fait sans changer de tool — c’est Grafana qui orchestre les deux.

Corrélation logs/métriques/traces dans Grafana

La vraie valeur de Loki apparaît quand il est intégré dans une stack Grafana complète avec Prometheus et Tempo :

  1. Un graphe Prometheus montre un pic de latence à 14h32
  2. Vous cliquez sur Explore logs depuis le panel — Grafana ouvre Loki pré-filtré sur la même fenêtre temporelle et le même service
  3. Vous trouvez les lignes d’erreur, cliquez sur un trace ID — Grafana ouvre Tempo avec la trace complète

Ce flux sans aller-retour entre des outils différents réduit considérablement le temps de résolution d’incidents.

Cardinalité : le piège à éviter

Le seul risque avec Loki : les labels à haute cardinalité. N’utilisez jamais comme label une valeur qui peut prendre des millions de valeurs différentes (user_id, request_id, IP…).

# ❌ À éviter — cardinalité explosive
labels:
  user_id: "{{ .UserID }}"

# ✅ Correct — cardinalité faible et stable
labels:
  app: "api"
  env: "prod"
  region: "eu-west"

Notre formation Grafana & Prometheus couvre la stack complète Prometheus + Loki + Tempo avec des ateliers pratiques sur Kubernetes.