Initial vault setup

This commit is contained in:
2026-06-09 18:40:21 +02:00
commit bda02d587f
3692 changed files with 402457 additions and 0 deletions
+182
View File
@@ -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é