Files
wiki/Catalogue-Self-Hosted/apps/app-loki.md
T
2026-06-09 18:40:21 +02:00

7.5 KiB
Raw Blame History


title: Loki created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, logs, observability, loki, grafana, promtail, multi-tenant, s3, kubernetes, docker] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Logs, https://github.com/grafana/loki]

📋 Loki

L'agrégateur de logs cloud-native par Grafana : indexation par labels, stockage objet, intégration native avec Prometheus et Grafana. Le compagnon idéal de la stack Grafana.

📋 Informations Générales

Champ Valeur
Site web grafana.com/oss/loki
GitHub grafana/loki
License AGPL-3.0
Langage Go
Étoiles GitHub 28.3k
Dernière MAJ 2026-06-05
Catégorie [[cat-logs

📝 Description

Loki est un système d'agrégation de logs multi-tenant conçu par Grafana Labs, inspiré de Prometheus. Contrairement à un ELK classique, Loki n'indexe pas le contenu des logs : il n'indexe qu'un ensemble de labels (comme job, instance, namespace) et stocke les logs bruts compressés dans du stockage objet (S3, GCS, MinIO, filesystem). Cette approche réduit drastiquement les coûts de stockage et accélère l'ingestion.

Loki s'intègre nativement avec Grafana pour la visualisation et Promtail (ou Grafana Alloy) pour la collecte de logs. Les requêtes se font en LogQL, un langage proche de PromQL, qui permet de filtrer par labels puis d'appliquer des regex sur le contenu. Le couple Loki + Grafana + Prometheus forme la stack d'observabilité open source de référence (souvent appelée "LGTM Stack").

Public cible : équipes techniques qui veulent une stack logs/métriques/traces unifiée, labos personnels avec budget serré (Loki coûte 10× moins cher qu'Elasticsearch à scale équivalente), et environnements Kubernetes massifs.

  • Multi-tenant natif (isolation par tenant ID)
  • Stockage objet (S3, GCS, Azure Blob, MinIO, filesystem)
  • LogQL : requêtes puissantes (regex, parsing, métriques dérivées)
  • Indexation par labels : pas d'index inversé, coûts réduits
  • Scalabilité horizontale (mode microservices : read/write/ingester/querier)
  • Intégration Grafana native (exploration, alertes, dashboards)
  • Promtail / Alloy : agents de collecte officiels
  • Mode single-binary pour les petits déploiements
  • Compression élevée (gzip, snappy)
  • Compatible Kubernetes (Helm chart officiel)
  • API HTTP d'ingestion (compatible avec n'importe quel agent)

🚀 Installation

Option 1 : Docker Compose (single-binary mode)

# docker-compose.yml
version: '3.8'
services:
  loki:
    image: grafana/loki:3.3.0
    container_name: loki
    restart: unless-stopped
    command: -config.file=/etc/loki/local-config.yaml
    ports:
      - "3100:3100"
    volumes:
      - loki-data:/loki
      - ./loki-config.yaml:/etc/loki/local-config.yaml:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.loki.rule=Host(`loki.example.com`)"
      - "traefik.http.routers.loki.entrypoints=websecure"
      - "traefik.http.routers.loki.tls.certresolver=letsencrypt"

  promtail:
    image: grafana/promtail:3.3.0
    container_name: promtail
    restart: unless-stopped
    command: -config.file=/etc/promtail/config.yml
    volumes:
      - /var/log:/var/log:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./promtail-config.yml:/etc/promtail/config.yml:ro

  minio:
    image: minio/minio:latest
    container_name: loki-minio
    restart: unless-stopped
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: loki
      MINIO_ROOT_PASSWORD: CHANGEME-STRONG-PASSWORD
    volumes:
      - minio-data:/data
    ports:
      - "9000:9000"
      - "9001:9001"

volumes:
  loki-data:
  minio-data:

Option 2 : Helm (Kubernetes)

helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack \
  --namespace logging --create-namespace \
  --set promtail.enabled=true \
  --set grafana.enabled=false \
  --set loki.persistence.enabled=true \
  --set loki.persistence.size=50Gi

⚙️ Configuration Initiale

  1. Démarrer la stack : docker compose up -d
  2. Accéder à Loki : http://IP:3100 (API)
  3. Connecter Grafana : Administration > Data Sources > Loki > URL http://loki:3100
  4. Tester une requête : {job="docker"} |= "error"
  5. Créer des labels cohérents : configurer Promtail pour étiqueter par service/env
  6. Activer la rétention : configurer compactor et limits_config.retention_period
  7. Mettre en place le stockage objet (S3/MinIO) pour la production

🔄 Alternatives

Open Source

  • app-quickwit — Recherche full-text, écrit en Rust
  • app-graylog — Plateforme SIEM-like (⚠️ licence SSPL)
  • app-parseable — Format columnar Parquet sur S3
  • app-elasticsearch — La référence historique (mais lourd)
  • OpenSearch — Fork AWS d'Elasticsearch
  • Vector ( Timber ) — Collecteur/transformateur de logs (souvent utilisé avec Loki)

Comparaison Loki vs autres

Critère Loki Elasticsearch Quickwit Graylog
Stockage Objet (S3) Disque/JVM Objet (S3) MongoDB + ES
Indexation Labels Full-text Inverted index Full-text
Coût Très bas Élevé Bas Moyen
Recherche full-text Regex (LogQL) Excellente Excellente Bonne
Métriques dérivées (LogQL)
Multi-tenant Natif Plugins
Setup Facile Complexe Moyen Moyen
Stack Grafana Natif Plugin Plugin Plugin

Verdict : Loki est le choix par défaut si vous utilisez déjà Grafana/Prometheus. Pour une recherche full-text pure, tournez-vous vers app-quickwit. Pour un SIEM, Graylog reste plus complet.

Propriétaires (ce que Loki remplace)

  • Datadog Logs (cher, vendor lock-in)
  • Splunk (très cher, enterprise)
  • Sumo Logic
  • Loggly
  • New Relic Logs

🔐 Sécurité

  • ⚠️ Logs = données sensibles : peuvent contenir mots de passe, tokens, PII
  • Chiffrement at-rest : LUKS/ZFS sur disque + chiffrement S3 côté bucket
  • Chiffrement in-transit : TLS obligatoire (Traefik + Loki en HTTPS)
  • Authentification : basic auth, JWT, ou proxy SSO devant Loki
  • RBAC multi-tenant : isolation par X-Scope-OrgID header
  • ⚠️ Rétention : GDPR/RGPD — limiter à 30/90 jours pour les logs user (compactor.retention_enabled)
  • PII filtering : regex dans Promtail/Alloy pour anonymiser emails, IPs, tokens
  • Audit log : activer loki.audit_log_enabled pour tracer les accès
  • Backups chiffrés : app-restic sur le bucket S3 des chunks

📚 Ressources

Pages Liées