Pourquoi remplacer Promtail par Alloy maintenant
La page officielle de Promtail est sans ambiguïté : l'agent est en fin de vie depuis le 2 mars 2026, le support commercial a pris fin et tout le développement se poursuit dans Grafana Alloy. Or un agent de collecte est un processus privilégié qui tourne en permanence : le laisser sans correctifs n'est pas tenable.
Alloy n'est pas qu'un Promtail renommé. C'est un collecteur unique, configuré par composants : une source de logs, un exporter de métriques système, un point d'envoi vers Loki, un autre vers Prometheus. Sur un VPS qui faisait tourner Promtail et node_exporter côte à côte, un seul service suffit désormais. Il sait aussi relayer de l'OTLP si vous instrumentez vos applications, sujet traité dans notre guide Tempo et OpenTelemetry.
Ce guide ne réinstalle pas Loki ni Prometheus : la partie serveur est décrite dans le guide Loki et Grafana et dans le guide Grafana et Prometheus. Ici, on s'occupe de l'agent.
Ce qu'un agent unique change sur votre serveur
- Un seul service à surveiller — logs et métriques passent par le même processus
alloy, avec un seul journal à lire en cas de panne. - Des mises à jour qui arrivent encore — Alloy est publié dans les dépôts apt et rpm de Grafana : un
apt upgradele maintient à jour comme le reste du système. - Une migration outillée — la commande
alloy converttraduit une configuration Promtail existante et produit un rapport de ce qu'elle n'a pas su convertir. - Les métriques système intégrées — le composant
prometheus.exporter.unixremplace node_exporter sans binaire supplémentaire ni port à ouvrir. - Une interface de débogage locale — l'UI sur le port 12345 montre le graphe des composants et leurs valeurs, accessible par tunnel SSH.
- Une sortie vers votre pile ou vers Grafana Cloud — le même fichier envoie vers un Loki auto-hébergé ou vers un service managé, en changeant une URL.
Prérequis chiffrés pour Alloy sur un VPS
Alloy s'installe sur Debian, Ubuntu, AlmaLinux ou Rocky Linux depuis les dépôts officiels de Grafana. Le paquet crée un utilisateur système alloy, un service systemd du même nom et le fichier de configuration /etc/alloy/config.alloy.
Côté ressources, la documentation d'Alloy donne deux ordres de grandeur : environ 1 cœur et 120 Mio de mémoire par Mio/s de logs ingérés, et environ 11 Gio de mémoire par million de séries Prometheus actives. Un VPS isolé expose quelques milliers de séries et écrit rarement plus de quelques centaines de Kio de logs par seconde. Notre recommandation éditoriale : réservez un demi-vCPU et 256 à 512 Mo de RAM à l'agent, et quelques Go de disque sous /var/lib/alloy pour les positions de lecture et le tampon d'envoi.
Il vous faut enfin une destination : un Loki joignable sur /loki/api/v1/push, et un Prometheus lancé avec le drapeau --web.enable-remote-write-receiver, qui ouvre l'endpoint /api/v1/write. Aucun port entrant n'est à ouvrir sur le VPS de l'agent : Alloy pousse, il n'est pas interrogé.
Installer Alloy et brancher logs et métriques
Ajouter le dépôt Grafana sur Debian ou Ubuntu
sudo mkdir -p /etc/apt/keyringssudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.keysudo chmod 644 /etc/apt/keyrings/grafana.ascecho "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.listsudo apt-get update && sudo apt-get install alloyOu l'installer sur AlmaLinux et Rocky Linux
Importez la clé avec
wget -q -O gpg.key https://rpm.grafana.com/gpg.keypuissudo rpm --import gpg.key. Créez/etc/yum.repos.d/grafana.repoavecbaseurl=https://rpm.grafana.com,repo_gpgcheck=1,gpgcheck=1etenabled=1, comme l'indique la page d'installation Linux d'Alloy, puis lancezsudo dnf install alloy.Démarrer le service et vérifier son utilisateur
sudo systemctl enable --now alloysudo systemctl status alloysystemctl cat alloy | grep UserLa dernière commande doit afficher
User=alloy. Le paquet ne fixe pas deGroup=: les droits de lecture viennent donc des groupes secondaires de cet utilisateur, point essentiel pour la suite.Déclarer la destination des logs
Ouvrez
/etc/alloy/config.alloyet ajoutez le point d'envoi vers Loki :loki.write "default" {endpoint {url = "http://127.0.0.1:3100/loki/api/v1/push"}}Remplacez l'adresse par celle de votre Loki. Si elle est distante, passez par HTTPS et un bloc
basic_auth.Collecter journald et les fichiers de logs
loki.source.journal "system" {forward_to = [loki.write.default.receiver]labels = {"job" = "systemd-journal"}}local.file_match "nginx" {path_targets = [{"__path__" = "/var/log/nginx/*.log", "job" = "nginx"}]}loki.source.file "nginx" {targets = local.file_match.nginx.targetsforward_to = [loki.write.default.receiver]}Par défaut, la source journal lit
/var/log/journalet/run/log/journal, et ne remonte que sept heures en arrière au premier démarrage.Collecter les métriques système
prometheus.exporter.unix "node" { }prometheus.scrape "node" {targets = prometheus.exporter.unix.node.targetsforward_to = [prometheus.remote_write.default.receiver]}prometheus.remote_write "default" {endpoint {url = "http://127.0.0.1:9090/api/v1/write"}}Si node_exporter tournait déjà sur la machine, arrêtez-le après la bascule pour ne pas collecter deux fois les mêmes séries.
Valider avant de recharger
sudo alloy validate /etc/alloy/config.alloysudo systemctl reload alloysudo journalctl -u alloy -fUne erreur de syntaxe ou un composant mal référencé est signalé par
validateavant que le service ne charge la configuration.Accorder les droits de lecture
id alloydoit lister les groupesadmetsystemd-journal. Le paquet les ajoute quand ils existent ; après une installation par binaire ou un groupe supprimé, rétablissez-les avecsudo usermod -aG adm,systemd-journal alloypuissudo systemctl restart alloy. Pour un dossier applicatif détenu par un autre utilisateur, la documentation préfère une ACL à un groupe de plus :sudo setfacl -R -m u:alloy:rx /var/log/monappetsudo setfacl -R -d -m u:alloy:rx /var/log/monapp.Vérifier de bout en bout, puis brancher vos tableaux de bord
Écrivez une ligne témoin avec
logger -t alloy-test "ligne de test alloy", puis cherchez-la dans Grafana, onglet Explore, avec la requête{job="systemd-journal"} |= "ligne de test alloy". Côté métriques, la requêtenode_load1doit renvoyer une série pour votre VPS. Les deux répondent : reprenez les tableaux de bord de notre guide Grafana et Prometheus, qui lisent les mêmes sériesnode_*.
Alloy et Docker : lire les conteneurs sans tout ouvrir
Pour lire les logs de vos conteneurs, Alloy installé sur l'hôte combine discovery.docker et loki.source.docker, tous deux pointés sur unix:///var/run/docker.sock. L'utilisateur alloy doit alors pouvoir ouvrir ce socket, ce qui passe en pratique par sudo usermod -aG docker alloy. Faites-le en connaissance de cause : la documentation de Docker rappelle que le groupe docker accorde des privilèges équivalents à root. Votre agent de logs devient, de fait, administrateur de la machine.
Vous pouvez aussi faire tourner Alloy lui-même dans un conteneur, avec l'image grafana/alloy, le fichier monté sur /etc/alloy/config.alloy et l'argument --storage.path=/var/lib/alloy/data sur un volume persistant. Monter le socket en :ro ne limite pas les appels à l'API Docker : un socket reste un socket. Et pour les métriques de l'hôte, le conteneur doit recevoir le système de fichiers, /proc et /sys de la machine en montage.
Sur un VPS unique, le paquet systemd reste le plus simple à auditer.
Migrer depuis Promtail : le vrai risque, ce sont les positions
Promtail tient un fichier de positions qui retient, pour chaque fichier suivi, l'endroit où il s'est arrêté de lire. Alloy range les siennes ailleurs, dans le dossier défini par --storage.path. La conversion le sait : le bloc loki.source.file produit par alloy convert porte un argument legacy_positions_file qui pointe vers l'ancien fichier, pour reprendre la lecture au bon endroit.
Ce mécanisme a un point faible documenté. Dans l'issue grafana/alloy #5493, un utilisateur décrit l'erreur error reading legacy positions file suivie de permission denied : Alloy n'a pas pu lire l'ancien fichier, l'a ignoré et a renvoyé tous les logs du serveur depuis le début. Le mainteneur a jugé légitime d'arrêter Alloy dans ce cas, et l'issue est close, mais ne pariez pas sur votre version : vérifiez les droits avant le premier démarrage.
L'autre risque est inverse : Promtail et Alloy actifs ensemble envoient chaque ligne deux fois. L'ordre ci-dessous évite les deux.
Migrer une configuration Promtail sans perte ni doublon
Repérer la configuration et le fichier de positions
Ouvrez la configuration de Promtail, souvent
/etc/promtail/config.yml, et notez la valeur depositions.filename. Dans une installation Docker Compose, ce fichier vit dans un volume : relevez son chemin réel sur l'hôte.Convertir avec un rapport
alloy convert --source-format=promtail --report=/tmp/promtail-report.txt --output=/tmp/promtail.alloy /etc/promtail/config.ymlLisez le rapport avant tout. L'option
--bypass-errorsforce une conversion partielle, mais la documentation prévient que le comportement peut alors différer de l'original.Vérifier que l'utilisateur alloy lit l'ancien fichier
grep legacy_positions_file /tmp/promtail.alloysudo -u alloy cat /var/lib/promtail/positions.yamlAdaptez le chemin à celui relevé plus haut. Si la seconde commande échoue, copiez le fichier dans un dossier lisible par
alloyet corrigez le chemin dans la configuration convertie.Arrêter Promtail avant de démarrer Alloy
sudo systemctl stop promtail, oudocker compose stop promtailpour une pile en conteneurs. Promtail écrit alors ses dernières positions, et aucune ligne ne part en double pendant la bascule.Basculer la configuration
Reportez les blocs convertis dans
/etc/alloy/config.alloy, lancezsudo alloy validate /etc/alloy/config.alloy, puissudo systemctl restart alloy. Contrôlez aussitôtsudo journalctl -u alloy | grep -i positions: aucune ligneerror reading legacy positions filene doit apparaître.Contrôler une semaine, puis désinstaller
Comparez le volume de logs dans Grafana avant et après la bascule, et suivez le compteur
loki_write_sent_entries_totald'Alloy. Gardez la configuration Promtail quelques jours, puissudo systemctl disable promtailet retirez le paquet ou le service Compose.
Promtail et Alloy, côte à côte
Faites défiler le tableau
| Critère | Promtail | Grafana Alloy |
|---|---|---|
| Statut | Fin de vie depuis le 2 mars 2026, plus de mises à jour | Développement actif, successeur désigné par Grafana |
| Signaux collectés | Logs uniquement | Logs, métriques, traces OTLP et profils |
| Métriques système | node_exporter à installer à part | Composant `prometheus.exporter.unix` intégré |
| Configuration | YAML | Syntaxe Alloy par composants, conversion par `alloy convert` |
| Positions de lecture | Fichier défini dans la configuration | Dossier `--storage.path`, reprise par `legacy_positions_file` |
| Débogage | Journal du service | Journal du service et UI locale sur le port 12345 |
| Utilisateur du service | Selon le mode d'installation | `alloy`, groupes `adm` et `systemd-journal` ajoutés par le paquet |
Configuration après installation : UI, secrets et stockage
L'interface de débogage écoute par défaut sur 127.0.0.1:12345. Laissez-la ainsi et ouvrez-la par tunnel : ssh -L 12345:127.0.0.1:12345 [email protected], puis http://localhost:12345 dans votre navigateur. Pour l'exposer malgré tout, ajoutez --server.http.listen-addr=0.0.0.0:12345 à CUSTOM_ARGS, mais seulement derrière un pare-feu qui filtre ce port.
Les options de lancement vivent dans /etc/default/alloy sur Debian et Ubuntu, dans /etc/sysconfig/alloy sur AlmaLinux et Rocky. C'est aussi là que vous placez les secrets : déclarez une variable LOKI_PASSWORD, lisez-la dans la configuration avec sys.env("LOKI_PASSWORD"), et gardez le mot de passe hors de config.alloy.
Pour un Loki distant, n'envoyez jamais en HTTP clair sur Internet : placez Loki derrière un reverse proxy TLS avec authentification, comme décrit dans notre guide Loki. Surveillez enfin l'espace de /var/lib/alloy : si Loki est injoignable, c'est là que s'accumule ce qui attend d'être envoyé.
Durcir le service sans casser la collecte
La documentation d'Alloy propose un fichier drop-in, créé par sudo systemctl edit alloy pour survivre aux mises à jour du paquet : NoNewPrivileges=yes, ProtectSystem=strict, ProtectHome=yes, PrivateTmp=yes et ReadWritePaths=/var/lib/alloy. Avec ProtectSystem=strict, ajoutez ReadOnlyPaths=/var/log/journal et ReadOnlyPaths=/run/log/journal, sinon la source journal ne lit plus rien. Terminez par sudo systemctl daemon-reload et sudo systemctl restart alloy. Préférez une ACL par dossier à l'ajout de groupes, et n'accordez le groupe docker que si vous collectez réellement les conteneurs.
Dépannage : les erreurs qu'Alloy ne crie pas
La plupart des pannes d'Alloy sur un VPS ne sont pas des plantages. Le service est actif, l'interface est verte, et Grafana reste vide. La raison est documentée par les mainteneurs eux-mêmes dans l'issue grafana/alloy #2994, close au profit de la #6340 : la santé d'un composant signifie qu'il tourne, pas qu'il transmet.
Deux réflexes suffisent à sortir de ce brouillard. Lisez le journal du service avec sudo journalctl -u alloy --since "10 min ago", et interrogez les métriques internes de l'agent avec curl -s http://127.0.0.1:12345/metrics | grep loki_write. Le compteur loki_write_sent_entries_total doit monter ; loki_write_dropped_entries_total compte les lignes abandonnées après tous les essais d'envoi.
Messages d'erreur et remèdes
- La source journal démarre, mais aucune ligne n'arrive — la documentation de
loki.source.journalle dit : sans les groupesadmetsystemd-journal, le composant démarre sans erreur et ne collecte rien. Corrigez avecsudo usermod -aG adm,systemd-journal alloy, puis redémarrez le service, car un groupe ajouté n'est pris en compte qu'au lancement suivant. failed to tail the file: open /var/log/…: permission denied— le fichier existe maisalloyne peut pas le lire. Accordez une ACL sur le dossier avecsetfacl -R -m u:alloy:rxet sa variante-dpour les fichiers créés ensuite par la rotation.- Aucun message, aucune ligne pour tout un dossier — l'issue grafana/alloy #6542 décrit des logs jamais transmis sans la moindre erreur. Un mainteneur y confirme qu'un fichier illisible est journalisé, mais qu'un dossier inaccessible ne l'est pas. Testez avec
sudo -u alloy ls /var/log/monapp. error reading legacy positions file … permission denied— Alloy n'a pas lu les positions de Promtail et peut tout renvoyer depuis le début (issue #5493). Arrêtez le service, rendez le fichier lisible pouralloy, puis relancez.failed to identify the read-write layer ID … mount-id: permission denied— erreur du composant cAdvisor sous systemd (issue #4068). Le groupedockern'y suffit pas ; des utilisateurs rapportent qu'un drop-in avecAmbientCapabilities=CAP_DAC_READ_SEARCHetCapabilityBoundingSet=CAP_DAC_READ_SEARCHrègle le cas sans passer le service en root. C'est un contournement communautaire, à tester avant de le généraliser.- L'UI est verte, mais Grafana reste vide — vérifiez
loki_write_sent_entries_totalet la ligne de test écrite parlogger. Si le compteur stagne, la panne est en amont, du côté de la source.
Un agent tenu à jour sur un serveur qui vous appartient
Alloy demande ce qu'un hébergement mutualisé ne donne pas : un service systemd, la lecture de /var/log et du journal, parfois le socket Docker. Sur un VPS, vous choisissez votre distribution, vous gardez votre pile Loki et Prometheus, et vous décidez des droits accordés à l'agent. Si vous préférez ne pas administrer vous-même le système, l'option administration VPS existe pour le serveur.
La documentation officielle reste la référence pour chaque composant : la migration depuis Promtail, les permissions sous Linux et la page de fin de vie de Promtail. Pour le traçage applicatif, poursuivez avec notre guide Tempo et OpenTelemetry.