Guide de déploiement

Grafana Alloy sur VPS : installer et migrer depuis Promtail

Déployer sur un VPS Cloud →

Tutoriel

Grafana Alloy sur VPS : installer et migrer depuis Promtail

Sécurité & Monitoring12 min de lecture15 étapes

Promtail ne reçoit plus aucune mise à jour : Grafana le déclare en fin de vie depuis le 2 mars 2026. Si votre VPS envoie encore ses logs à Loki par cet agent, chaque faille découverte demain restera ouverte. Grafana Alloy prend sa place et collecte aussi les métriques système, ce qui retire un exporter de plus de votre serveur. Ce guide installe Alloy en service systemd, le branche sur Loki et Prometheus, migre une configuration Promtail existante et traite les erreurs de permission qu'Alloy ne signale pas toujours.

Sommaire· Pourquoi remplacer Promtail par Alloy maintenant1/13
  1. 01Pourquoi remplacer Promtail par Alloy maintenant
  2. 02Ce qu'un agent unique change sur votre serveur
  3. 03Prérequis chiffrés pour Alloy sur un VPS
  4. 04Installer Alloy et brancher logs et métriques
  5. 05Alloy et Docker : lire les conteneurs sans tout ouvrir
  6. 06Migrer depuis Promtail : le vrai risque, ce sont les positions
  7. 07Migrer une configuration Promtail sans perte ni doublon
  8. 08Promtail et Alloy, côte à côte
  9. 09Configuration après installation : UI, secrets et stockage
  10. 10Durcir le service sans casser la collecte
  11. 11Dépannage : les erreurs qu'Alloy ne crie pas
  12. 12Messages d'erreur et remèdes
  13. 13Un agent tenu à jour sur un serveur qui vous appartient

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 upgrade le maintient à jour comme le reste du système.
  • Une migration outillée — la commande alloy convert traduit 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.unix remplace 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

  1. Ajouter le dépôt Grafana sur Debian ou Ubuntu

    sudo mkdir -p /etc/apt/keyrings
    sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
    sudo chmod 644 /etc/apt/keyrings/grafana.asc
    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-get update && sudo apt-get install alloy

  2. Ou l'installer sur AlmaLinux et Rocky Linux

    Importez la clé avec wget -q -O gpg.key https://rpm.grafana.com/gpg.key puis sudo rpm --import gpg.key. Créez /etc/yum.repos.d/grafana.repo avec baseurl=https://rpm.grafana.com, repo_gpgcheck=1, gpgcheck=1 et enabled=1, comme l'indique la page d'installation Linux d'Alloy, puis lancez sudo dnf install alloy.

  3. Démarrer le service et vérifier son utilisateur

    sudo systemctl enable --now alloy
    sudo systemctl status alloy
    systemctl cat alloy | grep User

    La dernière commande doit afficher User=alloy. Le paquet ne fixe pas de Group= : les droits de lecture viennent donc des groupes secondaires de cet utilisateur, point essentiel pour la suite.

  4. Déclarer la destination des logs

    Ouvrez /etc/alloy/config.alloy et 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.

  5. 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.targets
    forward_to = [loki.write.default.receiver]
    }

    Par défaut, la source journal lit /var/log/journal et /run/log/journal, et ne remonte que sept heures en arrière au premier démarrage.

  6. Collecter les métriques système

    prometheus.exporter.unix "node" { }
    prometheus.scrape "node" {
    targets = prometheus.exporter.unix.node.targets
    forward_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.

  7. Valider avant de recharger

    sudo alloy validate /etc/alloy/config.alloy
    sudo systemctl reload alloy
    sudo journalctl -u alloy -f

    Une erreur de syntaxe ou un composant mal référencé est signalé par validate avant que le service ne charge la configuration.

  8. Accorder les droits de lecture

    id alloy doit lister les groupes adm et systemd-journal. Le paquet les ajoute quand ils existent ; après une installation par binaire ou un groupe supprimé, rétablissez-les avec sudo usermod -aG adm,systemd-journal alloy puis sudo 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/monapp et sudo setfacl -R -d -m u:alloy:rx /var/log/monapp.

  9. 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ête node_load1 doit 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éries node_*.

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

  1. Repérer la configuration et le fichier de positions

    Ouvrez la configuration de Promtail, souvent /etc/promtail/config.yml, et notez la valeur de positions.filename. Dans une installation Docker Compose, ce fichier vit dans un volume : relevez son chemin réel sur l'hôte.

  2. Convertir avec un rapport

    alloy convert --source-format=promtail --report=/tmp/promtail-report.txt --output=/tmp/promtail.alloy /etc/promtail/config.yml

    Lisez le rapport avant tout. L'option --bypass-errors force une conversion partielle, mais la documentation prévient que le comportement peut alors différer de l'original.

  3. Vérifier que l'utilisateur alloy lit l'ancien fichier

    grep legacy_positions_file /tmp/promtail.alloy
    sudo -u alloy cat /var/lib/promtail/positions.yaml

    Adaptez le chemin à celui relevé plus haut. Si la seconde commande échoue, copiez le fichier dans un dossier lisible par alloy et corrigez le chemin dans la configuration convertie.

  4. Arrêter Promtail avant de démarrer Alloy

    sudo systemctl stop promtail, ou docker compose stop promtail pour une pile en conteneurs. Promtail écrit alors ses dernières positions, et aucune ligne ne part en double pendant la bascule.

  5. Basculer la configuration

    Reportez les blocs convertis dans /etc/alloy/config.alloy, lancez sudo alloy validate /etc/alloy/config.alloy, puis sudo systemctl restart alloy. Contrôlez aussitôt sudo journalctl -u alloy | grep -i positions : aucune ligne error reading legacy positions file ne doit apparaître.

  6. 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_total d'Alloy. Gardez la configuration Promtail quelques jours, puis sudo systemctl disable promtail et retirez le paquet ou le service Compose.

Promtail et Alloy, côte à côte

Faites défiler le tableau

CritèrePromtailGrafana Alloy
StatutFin de vie depuis le 2 mars 2026, plus de mises à jourDéveloppement actif, successeur désigné par Grafana
Signaux collectésLogs uniquementLogs, métriques, traces OTLP et profils
Métriques systèmenode_exporter à installer à partComposant `prometheus.exporter.unix` intégré
ConfigurationYAMLSyntaxe Alloy par composants, conversion par `alloy convert`
Positions de lectureFichier défini dans la configurationDossier `--storage.path`, reprise par `legacy_positions_file`
DébogageJournal du serviceJournal du service et UI locale sur le port 12345
Utilisateur du serviceSelon 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.journal le dit : sans les groupes adm et systemd-journal, le composant démarre sans erreur et ne collecte rien. Corrigez avec sudo 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 mais alloy ne peut pas le lire. Accordez une ACL sur le dossier avec setfacl -R -m u:alloy:rx et sa variante -d pour 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 pour alloy, puis relancez.
  • failed to identify the read-write layer ID … mount-id: permission denied — erreur du composant cAdvisor sous systemd (issue #4068). Le groupe docker n'y suffit pas ; des utilisateurs rapportent qu'un drop-in avec AmbientCapabilities=CAP_DAC_READ_SEARCH et CapabilityBoundingSet=CAP_DAC_READ_SEARCH rè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_total et la ligne de test écrite par logger. 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.

Un VPS où votre agent de collecte a les droits qu'il lui faut

Sur un VPS ServOrbit.com, vous avez l'accès root, le choix de l'OS entre Ubuntu, Debian, AlmaLinux et Rocky, et la main sur systemd, les groupes et les ACL. Vous installez Alloy, Loki ou Prometheus comme vous l'entendez, et l'option administration VPS existe pour le serveur.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet