Initial vault setup
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
---
|
||||
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](https://grafana.com/oss/loki/) |
|
||||
| **GitHub** | [grafana/loki](https://github.com/grafana/loki) |
|
||||
| **License** | AGPL-3.0 |
|
||||
| **Langage** | Go |
|
||||
| **Étoiles GitHub** | 28.3k ⭐ |
|
||||
| **Dernière MAJ** | 2026-06-05 |
|
||||
| **Catégorie** | [[cat-logs|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)
|
||||
|
||||
```yaml
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
- [GitHub grafana/loki](https://github.com/grafana/loki)
|
||||
- [Documentation officielle](https://grafana.com/docs/loki/latest/)
|
||||
- [LogQL cheat sheet](https://grafana.com/docs/loki/latest/logql/)
|
||||
- [Helm chart loki-stack](https://github.com/grafana/helm-charts/tree/main/charts/loki-stack)
|
||||
|
||||
## 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é
|
||||
Reference in New Issue
Block a user