Grafana Loki + Alloy sur Debian/Ubuntu : centralisation de logs légère et performante

22 juillet 2026 — par admin_libra

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

Références

Index complet

Tous les articles (59)

Date Article Tags
22/07/2026 Grafana Loki + Alloy sur Debian/Ubuntu : centralisation de logs légère et performante alloy centralisation debian 20/07/2026 SSL : Certificat Let's Encrypt avec Certbot sur Debian/Ubuntu (sans Snap) apache certbot certificat 20/07/2026 MariaDB : Tuning mariadb server sous debian / ubuntu et operation de maintenance sauvegarde/restauration debian innodb maintenance 20/07/2026 MariaDB : Mise en place d'une réplication Master → Slave base-de-données binlog debian 20/07/2026 OpenSVC : piloter des conteneurs LXC sur datasets ZFS avec snapshots et réplication sous Debian/Ubuntu conteneurs debian haute-disponibilité 20/07/2026 SCREEN : utilisation et cas d'usage des screens sous Linux administration bash debian 20/07/2026 EtherPAD : installation et configuration d'Etherpad collaboration debian editeur-collaboratif 20/07/2026 Wazuh 4.14 : déployer un SIEM/XDR open source sur Debian/Ubuntu compliance debian fim 20/07/2026 Incus 7.x : gérer conteneurs système et VMs sur Debian/Ubuntu — le successeur communautaire de LXD conteneurs debian incus 20/07/2026 Restic : sauvegardes incrémentielles chiffrées sur Debian et Ubuntu backup chiffrement debian 20/07/2026 Restic : sauvegardes chiffrées et dédupliquées sur Debian/Ubuntu automatisation backup chiffrement 30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs