Une stack de journalisation centralisée est essentielle pour diagnostiquer les problèmes, assurer la traçabilité et améliorer l’observabilité de vos systèmes. Dans ce guide, nous allons déployer une stack complète composée de Grafana Loki (stockage des logs), Promtail (collecteur) et Grafana (visualisation), le tout en Docker.
Pourquoi utiliser Grafana Loki ?
Grafana Loki est une alternative légère et performante à la stack ELK (Elasticsearch, Logstash, Kibana) :
- 📦 Intégration native avec Grafana
- ⚡ Stockage optimisé pour la performance
- 📈 Requêtes similaires à Prometheus (LogQL)
- 🔧 Déploiement simple via Docker ou Kubernetes
Prérequis
- Serveur Debian 11/12
- Docker + Docker Compose
- Accès sudo
- Quelques services générant des logs
Structure du projet
mkdir -p ~/loki-stack && cd ~/loki-stack
Fichier docker-compose.yml
version: '3.8'
services:
loki:
image: grafana/loki:2.9.0
container_name: loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:2.9.0
container_name: promtail
volumes:
- /var/log:/var/log
- ./promtail-config.yaml:/etc/promtail/config.yaml
command: -config.file=/etc/promtail/config.yaml
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-storage:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
grafana-storage:
Configuration de Loki
Créez un fichier loki-config.yaml
:
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2022-01-01
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /tmp/loki/index
cache_location: /tmp/loki/boltdb-cache
shared_store: filesystem
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: true
retention_period: 168h
Configuration de Promtail
Créez un fichier promtail-config.yaml
:
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
Démarrage de la stack
docker compose up -d
Configuration de Grafana
- Accédez à : http://localhost:3000 (admin / admin)
- Ajoutez une source de données Loki :
- Type : Loki
- URL :
http://loki:3100
- Créez un dashboard ou utilisez un modèle existant
- Requêtes LogQL possibles :
{job="varlogs"} |= "error"
{job="varlogs"} |~ "timeout|fail|denied"
Exemple d’usage
- Analyse des erreurs d’Apache/Nginx
- Centralisation des logs de plusieurs serveurs via Promtail distant
- Suivi d’événements système (
/var/log/syslog
,auth.log
) - Supervision de conteneurs via Docker Logging Driver
Comparatif avec d'autres solutions
Stack | Visualisation | Poids | Maintenance | Coût |
Loki + Promtail | ✅ Grafana | 🟢 Léger | 🟢 Faible | Gratuit |
ELK Stack | ✅ Kibana | 🔴 Lourd | 🔴 Élevée | Gratuit* |
Graylog | ✅ Graylog UI | 🟠 Moyen | 🟠 Modérée | Gratuit* |
Fluentd + InfluxDB | ✅ Variable | 🟠 Moyen | 🟠 Variable | Gratuit |
Bonnes pratiques
- Utilisez des labels pertinents (
app
,env
,host
) - Activez la rétention automatique (
retention_period
) - Sécurisez l’accès Grafana (HTTPS, alerting, auth SSO)
- Intégrez avec Prometheus pour une observabilité complète
Conclusion
La stack Loki + Promtail + Grafana est une solution moderne, légère et puissante pour centraliser les logs. Facile à déployer avec Docker, elle offre une alternative crédible aux solutions plus lourdes tout en restant compatible avec les standards du monitoring moderne.