Grafana Loki
Overview
Loki, c'est le système de logging développé par Grafana qui pense "comme Prometheus, mais pour les logs". Contrairement aux solutions traditionnelles qui indexent tout le contenu des logs, Loki n'indexe que les métadonnées (labels), ce qui le rend incroyablement efficace en termes de stockage et de performance. Si tu veux du logging moderne, scalable et peu gourmand, c'est parfait.
Loki s'intègre nativement avec l'écosystème Grafana (Grafana, Prometheus, Alertmanager) et utilise le même langage de requête LogQL que PromQL. Architecture multi-tenant, compression avancée, stockage object (S3, GCS, Azure), ça scale horizontalement sans problème.
Loki se distingue par son approche "labels-first" (pas d'indexation full-text, juste les métadonnées), sa scalabilité horizontale native (architecture micro-services), et son intégration parfaite avec Grafana (tu vois tes logs dans le même dashboard que tes métriques).
Informations essentielles
| Propriété | Valeur |
|---|---|
| Site officiel | https://grafana.com/oss/loki/ |
| Repository | https://github.com/grafana/loki |
| Licence | Apache 2.0 |
| Développeur | Grafana Labs |
| Langage | Go |
| Stockage | Local, S3, GCS, Azure Blob Storage |
Fonctionnalités principales
Architecture moderne
- Composants découplés (distributors, ingesters, queriers)
- Scalabilité horizontale native
- Multi-tenant avec isolation des données
- Haute disponibilité avec réplication
- Support clustering et load balancing
Efficacité du stockage
- Indexation uniquement des labels (pas du contenu)
- Compression avancée des logs
- Stockage par chunks avec retention flexible
- Déduplication automatique
- Support object storage (S3, GCS, Azure)
Langage de requête LogQL
- Syntaxe similaire à PromQL
- Filtrage par labels et expressions régulières
- Fonctions d'agrégation et calculs de métriques
- Requêtes temporelles et historiques
- Alerting basé sur les logs
Intégrations natives
- Grafana Dashboard intégré
- Promtail pour la collecte de logs
- Support Kubernetes avec annotations automatiques
- Intégration avec Prometheus et Alertmanager
- APIs REST pour intégration custom
Cas d'usage
- Observabilité moderne : Logging scalable pour infrastructures cloud-native
- Corrélation metrics/logs : Voir logs et métriques dans le même dashboard
- Debugging distribué : Tracer les problèmes dans des architectures microservices
- Compliance : Centraliser et archiver les logs pour audit
- Monitoring application : Alerting basé sur les patterns de logs
Installation
Via Docker Compose
version: '3'
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./loki-config.yml:/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- ./promtail-config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
Via Helm (Kubernetes)
helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack \
--set grafana.enabled=true \
--set prometheus.enabled=true
Via binaire
# Télécharger et démarrer Loki
curl -O -L "https://github.com/grafana/loki/releases/latest/download/loki-linux-amd64.zip"
unzip loki-linux-amd64.zip
./loki-linux-amd64 -config.file=loki-local-config.yaml
Utilisation basique
Configuration Promtail pour collecte
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
Requêtes LogQL dans Grafana
# Logs d'une application spécifique
{job="myapp"} |= "error"
# Agrégation - taux d'erreurs par minute
rate({job="myapp"} |= "error" [1m])
# Filtrage avec regex
{job="myapp"} |~ "user [0-9]+ login"
# Métriques extraites des logs
sum(rate({job="nginx"} | json | status_code="500" [5m])) by (server)
API REST
# Envoyer des logs via API
curl -H "Content-Type: application/json" -XPOST -s "http://localhost:3100/loki/api/v1/push" \
--data-raw '{"streams": [{"stream": {"job": "test"}, "values": [["'$(date +%s%N)'", "test log message"]]}]}'
# Requête via API
curl -G -s "http://localhost:3100/loki/api/v1/query" \
--data-urlencode 'query={job="test"}' | jq
Avantages
- ✅ Efficacité du stockage : indexation labels uniquement, stockage optimisé, ça prend moins de place
- ✅ Scalabilité native : architecture horizontale, ça scale sans limite
- ✅ Intégration Grafana : logs et métriques dans le même dashboard, tout est corrélé
- ✅ LogQL puissant : langage de requête expressif, si tu connais PromQL c'est pareil
- ✅ Multi-tenant : isolation des données, parfait pour les environnements partagés
Limitations
- Courbe d'apprentissage pour LogQL si tu viens d'ELK : mais c'est similaire à PromQL
- Pas de recherche full-text traditionnelle : mais les labels couvrent la plupart des besoins
- Configuration plus complexe que des solutions monolithiques : mais plus flexible
Alternatives
- Elasticsearch + Kibana : Solution traditionnelle avec indexation full-text
- Fluentd + Elasticsearch : Stack de logging classique
- Splunk : Solution enterprise propriétaire
- Vector : Alternative moderne axée performance
Ressources
- Documentation : https://grafana.com/docs/loki/latest/
- GitHub : https://github.com/grafana/loki
- Getting Started : https://grafana.com/docs/loki/latest/getting-started/
- LogQL : https://grafana.com/docs/loki/latest/logql/