Aller au contenu
Outils medium

Grafana Alloy : le collecteur unifié logs, métriques et traces

8 min de lecture

Grafana Alloy est un collecteur de télémétrie open source qui rassemble logs, métriques et traces dans un seul agent. Bâti sur l'OpenTelemetry Collector, il remplace Promtail et le Grafana Agent, tous deux dépréciés depuis 2025. On le configure en assemblant des composants qui lisent, transforment et exportent les données.

Ce guide s'adresse aux profils débutants et intermédiaires qui veulent centraliser leur collecte, notamment vers Loki. Vous allez comprendre le modèle en composants d'Alloy, l'installer, puis collecter des fichiers de logs et les logs de conteneurs Docker vers Loki, avec des configurations testées.

  • Comprendre ce qu'est Alloy et ce qu'il remplace.
  • Lire le modèle en composants (source, relabel, write).
  • Installer Alloy avec Docker.
  • Collecter des fichiers de logs vers Loki.
  • Collecter les logs de conteneurs Docker en toute sécurité.

Alloy est l'agent unique de collecte de l'écosystème Grafana. Auparavant, il fallait un outil par signal : Promtail pour les logs, l'exporter Prometheus pour les métriques, un agent séparé pour les traces. Alloy unifie tout cela dans un seul binaire, ce qui réduit le nombre d'agents à déployer et à maintenir.

Techniquement, Alloy est une distribution de l'OpenTelemetry Collector enrichie de composants propres à Grafana. Il parle donc OTLP nativement, tout en offrant des briques taillées pour Loki, Mimir et Tempo. C'est ce double héritage qui explique son positionnement.

Une configuration Alloy est un graphe de composants reliés entre eux. Chaque composant fait une chose : découvrir des cibles, lire une source, transformer des labels, exporter vers un backend. On les connecte en passant la sortie de l'un à l'entrée de l'autre.

Type de composantRôleExemples
discoveryDécouvrir des cibles à collecterdiscovery.docker, discovery.kubernetes
sourceLire les donnéesloki.source.file, loki.source.docker
relabelRéécrire les labelsdiscovery.relabel
write / exportEnvoyer vers un backendloki.write, prometheus.remote_write

Le fil conducteur est le champ forward_to : il indique à un composant vers quel récepteur envoyer ses données. C'est cette chaîne de références qui forme le pipeline, de la source jusqu'à l'export.

Alloy se lance en conteneur en une commande. On lui passe un fichier de configuration via la sous-commande run, et on épingle la version pour rester reproductible.

Fenêtre de terminal
docker run -d --name alloy \
-v "$(pwd)/config.alloy:/etc/alloy/config.alloy" \
grafana/alloy:v1.17.1 \
run /etc/alloy/config.alloy

Alloy expose aussi une interface web de diagnostic sur le port 12345, pratique pour visualiser le graphe de composants et repérer un maillon en erreur. Sur une machine, un paquet .deb ou .rpm officiel installe Alloy en service systemd ; en conteneur, l'image ci-dessus suffit.

Le cas le plus simple : lire des fichiers de logs et les pousser vers Loki. La configuration enchaîne trois composants, une découverte de fichiers, une source qui les lit, et une destination loki.write.

config.alloy
local.file_match "app" {
path_targets = [{"__path__" = "/logs/*.log", "app" = "demo"}]
}
loki.source.file "app" {
targets = local.file_match.app.targets
forward_to = [loki.write.default.receiver]
}
loki.write "default" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}

On lance Alloy en montant la configuration et le dossier de logs à surveiller :

Fenêtre de terminal
docker run -d --name alloy \
-v "$(pwd)/config.alloy:/etc/alloy/config.alloy" \
-v "$(pwd)/logs:/logs" \
grafana/alloy:v1.17.1 \
run /etc/alloy/config.alloy

Vérification : ajoutez une ligne dans un fichier .log du dossier, puis interrogez Loki. La requête {app="demo"} doit retourner votre ligne, avec le label app déclaré dans path_targets. Chaque cible peut porter ses propres labels, c'est ainsi qu'on distingue les sources dans Loki.

En environnement conteneurisé, on ne surveille pas des fichiers mais les logs des conteneurs eux-mêmes. Alloy les découvre via le socket Docker, réécrit le nom du conteneur en label lisible, puis les lit.

discovery.docker "containers" {
host = "unix:///var/run/docker.sock"
}
discovery.relabel "containers" {
targets = discovery.docker.containers.targets
rule {
source_labels = ["__meta_docker_container_name"]
regex = "/(.*)"
target_label = "container"
}
}
loki.source.docker "default" {
host = "unix:///var/run/docker.sock"
targets = discovery.relabel.containers.output
forward_to = [loki.write.default.receiver]
}
loki.write "default" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}

Le composant discovery.relabel est indispensable : sans lui, Alloy connaît les conteneurs mais ne pose pas le nom comme label, et vos requêtes n'ont rien à cibler. La règle transforme le méta-label __meta_docker_container_name (de la forme /mon-conteneur) en label container propre. La requête {container="mon-conteneur"} retrouve alors les logs.

Alloy ne se limite pas aux logs, c'est tout son intérêt. Pour les métriques, le composant prometheus.scrape collecte des endpoints /metrics et prometheus.remote_write les envoie vers Prometheus ou Mimir. Pour les traces, un récepteur otelcol.receiver.otlp accepte l'OTLP et route vers Tempo.

Le principe reste identique : des composants source, éventuellement du relabel, puis un composant d'export, reliés par forward_to. Un même Alloy peut ainsi porter les trois signaux sur une seule configuration, ce qui en fait un remplaçant naturel de plusieurs agents.

La plupart des problèmes viennent d'un composant mal relié ou d'un label manquant. L'interface web sur :12345 affiche l'état de chaque composant.

SymptômeCause probableSolution
Aucun log dans Lokiforward_to mal branchéVérifier la chaîne source vers loki.write
Logs sans label utilePas de discovery.relabelAjouter une règle de relabel
permission denied sur le socketAccès Docker refuséPasser par un socket-proxy
Composant en erreurRéférence inexistanteContrôler les noms dans l'UI :12345
  1. Alloy est le collecteur unifié de Grafana : logs, métriques et traces dans un seul agent.
  2. Il remplace Promtail et le Grafana Agent, dépréciés depuis 2025.
  3. La configuration est un graphe de composants reliés par forward_to.
  4. Pour les conteneurs Docker, discovery.relabel est indispensable pour exposer le nom en label.
  5. Sécurisez l'accès au socket Docker avec un socket-proxy, jamais le socket brut en production.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn