Installer Grafana Alloy via son paquet .deb, déposer sa configuration et l'activer comme service — le tout automatiquement avec un rôle Ansible.
Installer Grafana Alloy (le collecteur de télémétrie de Grafana, successeur de l'agent Grafana) sur une machine, lui pousser une configuration prête à l'emploi, et le démarrer comme service systemd — automatiquement via Ansible.
Résultat : Alloy collecte les métriques système (CPU, RAM, disque…) via l'exporter node et les envoie vers Mimir grâce à prometheus.remote_write.
Alloy est un collecteur unifié (métriques, logs, traces) configuré dans un langage déclaratif à base de composants (prometheus.exporter, prometheus.scrape, prometheus.remote_write…). Ici on l'utilise pour exposer les métriques de la machine et les expédier vers un backend compatible Prometheus (Mimir).
ansible/ avec ansible.cfg et un inventaire fonctionnel.amd64).get_urlapt (installation depuis un .deb)On ajoute un rôle alloy et un playbook deploy_alloy.yml :
ansible/
├── ansible.cfg ← déjà créé
├── inventories/
│ └── dev/inventory.yml ← déjà créé
├── playbooks/
│ └── deploy_alloy.yml ← à créer (étape 5)
└── roles/
└── alloy/ ← à créer (étapes 2 à 4)
├── defaults/main.yml
├── files/config.alloy
└── tasks/main.yml
Créez le squelette du rôle :
mkdir -p roles/alloy/{tasks,defaults,files}
Fichier roles/alloy/defaults/main.yml — la version d'Alloy à installer et l'emplacement de sa configuration :
---
alloy_version: "1.16.2"
alloy_config_src: "files/config.alloy"
alloy_config_dest: "/etc/alloy/config.alloy"
Centraliser la version dans une variable permet de mettre à jour Alloy en changeant une seule ligne. Consultez les releases GitHub pour la dernière version.
Fichier roles/alloy/files/config.alloy. Il collecte les métriques système et les pousse vers Mimir. Remplacez l'IP par celle de votre backend Mimir :
logging {
level = "warn"
}
prometheus.exporter.unix "node" {
}
prometheus.scrape "node_metrics" {
targets = prometheus.exporter.unix.node.targets
scrape_interval = "15s"
forward_to = [prometheus.remote_write.mimir.receiver]
}
prometheus.remote_write "mimir" {
endpoint {
url = "http://< votre IP >:9009/api/v1/push"
headers = {
"X-Scope-OrgID" = "demo",
}
}
}
Décryptage :
prometheus.exporter.unix "node" — expose les métriques système de la machine (équivalent de node_exporter).prometheus.scrape — récupère ces métriques toutes les 15 s et les transmet au bloc remote_write.prometheus.remote_write "mimir" — envoie les métriques vers Mimir sur le port 9009 (endpoint /api/v1/push).X-Scope-OrgID — en-tête multi-tenant de Mimir (ici le tenant demo).Fichier roles/alloy/tasks/main.yml. Quatre tâches : télécharger le .deb, l'installer, déposer la config, démarrer le service.
---
- name: Download Alloy .deb package
ansible.builtin.get_url:
url: "https://github.com/grafana/alloy/releases/download/v{{ alloy_version }}/alloy-{{ alloy_version }}-1.amd64.deb"
dest: "/tmp/alloy-{{ alloy_version }}.deb"
mode: "0644"
- name: Install Alloy via dpkg
ansible.builtin.apt:
deb: "/tmp/alloy-{{ alloy_version }}.deb"
- name: Copy Alloy config
ansible.builtin.copy:
src: "{{ alloy_config_src }}"
dest: "{{ alloy_config_dest }}"
owner: root
group: root
mode: "0644"
- name: Enable and start Alloy service
ansible.builtin.systemd:
name: "alloy"
enabled: true
state: started
daemon_reload: true
Décryptage :
get_url — télécharge le paquet .deb officiel depuis GitHub vers /tmp.apt: deb: — installe un paquet .deb local (gère les dépendances, contrairement à dpkg -i).copy — dépose votre files/config.alloy dans /etc/alloy/config.alloy.systemd avec state: started + enabled: true — démarre Alloy et l'active au boot.Fichier playbooks/deploy_alloy.yml :
---
- name: Deploy Grafana Alloy
hosts: localhost
become: true
roles:
- alloy
vars:
alloy_version: "1.16.2"
alloy_config_src: "files/config.alloy"
alloy_config_dest: "/etc/alloy/config.alloy"
Point important : hosts: localhost — ici on installe Alloy sur la machine de contrôle elle-même. Pour l'installer sur des serveurs distants, ciblez le groupe correspondant de votre inventaire (ex. hosts: web).
Depuis la racine du projet, trois étapes (de la plus prudente à la vraie exécution) :
# 1️⃣ Validation syntaxique (gratuit, ne touche à rien)
ansible-playbook playbooks/deploy_alloy.yml --syntax-check
# 2️⃣ « Dry-run » : simule sans rien modifier
ansible-playbook playbooks/deploy_alloy.yml --check
# 3️⃣ Déploiement réel
ansible-playbook playbooks/deploy_alloy.yml
Sortie attendue à la fin — le récapitulatif PLAY RECAP avec failed=0 :
PLAY RECAP ******************************************
localhost : ok=5 changed=4 unreachable=0 failed=0
systemctl is-active alloy
# attendu : active
curl -I http://localhost:12345
# attendu : HTTP/1.1 200 OK
node_* remontent bien pour le tenant demo.config.alloy et le pare-feu.journalctl -u alloy -f pour lire les logs du service.amd64, adaptez l'URL pour arm64 si besoin.Grafana Alloy est installé, configuré et démarré, et il pousse les métriques système vers Mimir. Le rôle est réutilisable : changez l'IP du backend ou la version d'Alloy en une ligne.
Pour aller plus loin :