La centralisation des logs est un pilier de l’administration système moderne. Face à des infrastructures de plus en plus distribuées, disposer d’un endroit unique pour interroger l’ensemble des journaux système est devenu indispensable. Si des solutions comme ELK Stack ou Graylog sont bien connues, Grafana Loki s’est imposé depuis 2024-2025 comme l’alternative la plus légère et la plus économique en ressources, notamment grâce à son intégration native avec Grafana et Prometheus.
Contrairement à Elasticsearch qui indexe l’intégralité du contenu des logs, Loki n’indexe que les métadonnées (labels) et stocke les messages bruts compressés. Cette philosophie, inspirée de Prometheus, réduit drastiquement la consommation RAM et les coûts de stockage tout en offrant des performances de recherche excellentes pour les workloads typiques d’administration système.
Dans ce guide, nous allons déployer le stack PLG complet (Prometheus + Loki + Grafana) sur Debian 12 / Ubuntu 24.04 LTS, en utilisant Grafana Alloy comme agent de collecte — le successeur officiel de Promtail, qui a atteint sa fin de vie le 2 mars 2026. Toutes les briques s’installent depuis le dépôt APT officiel Grafana.
Architecture du stack PLG
Le stack PLG s’articule autour de trois composants qui communiquent entre eux :
- Grafana Loki : le moteur de stockage et d’indexation des logs, exposé sur le port 3100.
- Grafana Alloy : l’agent léger installé sur chaque serveur, qui collecte les journaux (systemd, fichiers) et les pousse vers Loki.
- Grafana : l’interface de visualisation et de requêtage via le langage LogQL.
Loki ne reçoit pas directement les logs depuis les applications : c’est Alloy qui fait office de pipeline, permettant de filtrer, transformer et enrichir les entrées avant envoi.
Prérequis
- Debian 12 (Bookworm) ou Ubuntu 24.04 LTS (Noble) ou supérieur
- Grafana installé et fonctionnel (voir notre guide dédié)
- Accès root ou sudo
- Ports 3100 (Loki) et 12345 (Alloy UI) ouverts en local
- Minimum 2 Go de RAM, 10 Go d’espace disque pour les logs
Installation de Grafana Loki
Ajout du dépôt officiel Grafana
Grafana maintient un dépôt APT signé pour Debian et Ubuntu. La même clé GPG est utilisée pour Loki, Alloy et Grafana :
sudo apt update && sudo apt install -y gpg wget
sudo mkdir -p /etc/apt/keyrings
sudo wget -qO /etc/apt/keyrings/grafana.asc
https://apt.grafana.com/gpg-full.key
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc]
https://apt.grafana.com stable main"
| sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
Installation de Loki
sudo apt install -y loki
loki --version # vérifie la version installée (3.6.x ou supérieure)
Configuration de Loki
Le fichier de configuration principal est /etc/loki/config.yml. Voici une configuration de production adaptée aux environnements Debian/Ubuntu, avec un schéma TSDB v13 et une rétention à 31 jours :
sudo mkdir -p /var/lib/loki/{chunks,rules,compactor}
sudo chown -R loki:loki /var/lib/loki
sudo tee /etc/loki/config.yml > /dev/null << 'EOF'
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /var/lib/loki
storage:
filesystem:
chunks_directory: /var/lib/loki/chunks
rules_directory: /var/lib/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
compactor:
working_directory: /var/lib/loki/compactor
retention_enabled: true
limits_config:
retention_period: 744h # 31 jours
ingestion_rate_mb: 16
ingestion_burst_size_mb: 32
ruler:
alertmanager_url: http://localhost:9093
EOF
Activation du service
sudo systemctl enable --now loki
sudo systemctl status loki
# Vérifier que Loki est prêt
curl -s http://localhost:3100/ready
La réponse ready confirme que Loki accepte les connexions. En cas d’erreur, consultez les logs avec journalctl -u loki -f.
Installation de Grafana Alloy
Grafana Alloy est le successeur de Promtail (EOL mars 2026) et de Grafana Agent. Il utilise un langage de configuration déclaratif appelé River (extension .alloy) et supporte nativement les journaux systemd, les fichiers de log, les métriques Prometheus et bien d’autres sources.
Installation depuis le dépôt Grafana
Si vous avez déjà ajouté le dépôt lors de l’installation de Loki, l’installation se réduit à :
sudo apt install -y alloy
alloy --version
Configuration d’Alloy pour collecter les logs
Le fichier de configuration se trouve dans /etc/alloy/config.alloy. Voici une configuration complète qui collecte à la fois les journaux systemd et les fichiers de log classiques :
sudo tee /etc/alloy/config.alloy > /dev/null << 'EOF'
// ─── Journaux systemd (journald) ───────────────────────────────────────────
loki.source.journal "journald" {
forward_to = [loki.write.loki_server.receiver]
labels = { job = "systemd-journal", host = env("HOSTNAME") }
max_age = "12h"
relabel_rules = loki.relabel.journal_labels.rules
}
loki.relabel "journal_labels" {
forward_to = []
rule {
source_labels = ["__journal__systemd_unit"]
target_label = "unit"
}
rule {
source_labels = ["__journal_priority_keyword"]
target_label = "level"
}
}
// ─── Fichiers de log standards ─────────────────────────────────────────────
local.file_match "varlog" {
path_targets = [
{ __path__ = "/var/log/syslog", job = "syslog" },
{ __path__ = "/var/log/auth.log", job = "auth" },
{ __path__ = "/var/log/dpkg.log", job = "dpkg" },
{ __path__ = "/var/log/nginx/access.log", job = "nginx-access" },
{ __path__ = "/var/log/nginx/error.log", job = "nginx-error" },
]
}
loki.source.file "files" {
targets = local.file_match.varlog.targets
forward_to = [loki.write.loki_server.receiver]
}
// ─── Envoi vers Loki ───────────────────────────────────────────────────────
loki.write "loki_server" {
endpoint {
url = "http://localhost:3100/loki/api/v1/push"
}
}
EOF
Permissions et démarrage
Alloy s’exécute sous un utilisateur dédié. Pour accéder aux journaux systemd et aux fichiers protégés, il faut l’ajouter aux groupes appropriés :
sudo usermod -aG systemd-journal alloy
sudo usermod -aG adm alloy
sudo systemctl enable --now alloy
sudo systemctl status alloy
Vérifiez qu’Alloy envoie bien des données vers Loki :
# Consulter les métriques d'ingestion Loki
curl -s http://localhost:3100/metrics | grep loki_distributor_lines_received_total
Intégration avec Grafana
Ajouter Loki comme source de données
Dans Grafana, naviguez vers Connections → Data sources → Add new data source, sélectionnez Loki et renseignez :
- URL :
http://localhost:3100 - HTTP Method : POST
Cliquez sur Save & Test. Si la connexion est établie, le message Data source connected and labels found apparaît.
Premiers pas avec LogQL
LogQL est le langage de requête de Loki, inspiré de PromQL. Les requêtes s’écrivent dans l’onglet Explore de Grafana. Quelques exemples essentiels :
# Tous les logs du service SSH
{job="systemd-journal", unit="ssh.service"}
# Logs d'erreur Nginx des 15 dernières minutes
{job="nginx-error"} |= "error"
# Compter les lignes par job sur 5 minutes
sum by (job) (rate({job=~".+"}[5m]))
# Filtrer les erreurs critiques toutes sources confondues
{host="mon-serveur"} | level =~ "err|crit|emerg"
Bonnes pratiques de production
Limiter l’ingestion par client
Sur des serveurs produisant beaucoup de logs (nginx sous forte charge, applications verboses), ajustez les limites dans /etc/loki/config.yml :
limits_config:
per_stream_rate_limit: 5MB
per_stream_rate_limit_burst: 15MB
max_streams_per_user: 10000
Surveillance de Loki avec Prometheus
Loki expose ses propres métriques au format Prometheus sur http://localhost:3100/metrics. Ajoutez un scrape job dans votre prometheus.yml :
scrape_configs:
- job_name: 'loki'
static_configs:
- targets: ['localhost:3100']
Rotation et rétention
La rétention est gérée directement par le compacteur Loki (paramètre retention_period dans la configuration). Il n’est pas nécessaire de configurer logrotate pour les chunks de Loki ; en revanche, assurez-vous que /var/lib/loki dispose d’un espace suffisant et surveillez la métrique loki_compactor_blocks_cleaned_total.
À lire également
- Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques
- Graylog 7 — Centralisation et analyse de logs : l’alternative à ELK sur Debian/Ubuntu
- eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC
- Netdata — monitoring temps réel sans configuration complexe