7.5 KiB
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
- Démarrer la stack :
docker compose up -d - Accéder à Loki :
http://IP:3100(API) - Connecter Grafana : Administration > Data Sources > Loki > URL
http://loki:3100 - Tester une requête :
{job="docker"} |= "error" - Créer des labels cohérents : configurer Promtail pour étiqueter par service/env
- Activer la rétention : configurer
compactoretlimits_config.retention_period - 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-OrgIDheader - ⚠️ 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_enabledpour tracer les accès - ✅ Backups chiffrés : app-restic sur le bucket S3 des chunks
📚 Ressources
Pages Liées
- cat-logs — Catégorie Logs
- app-prometheus — Métriques (souvent couplé à Loki)
- app-grafana — Visualisation
- app-tempo — Traces
- app-uptime-kuma — Monitoring uptime
- securisation-home-lab — Bonnes pratiques sécurité