Linux

Ansible — Déployer Grafana Alloy

Installer Grafana Alloy via son paquet .deb, déposer sa configuration et l'activer comme service — le tout automatiquement avec un rôle Ansible.

← Retour aux tutoriels Linux
📚 Ce qu'on va faire

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.

ⓘ C'est quoi Grafana Alloy ?

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).

⚠ Prérequis
  • Avoir suivi le tuto Ansible — Introduction : un dossier ansible/ avec ansible.cfg et un inventaire fonctionnel.
  • Une machine cible Debian/Ubuntu (architecture amd64).
  • Un backend compatible Prometheus (Mimir) joignable pour recevoir les métriques — voir Observabilité avec Grafana.
📚 Documentation officielle

Structure du projet

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}

Définir les variables par défaut

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"
💡 Astuce

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.

Écrire la configuration Alloy

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).

Écrire les tâches du rôle

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.

Écrire le playbook

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).

Lancer le déploiement

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

Vérifier le résultat

  1. Vérifier que le service tourne :
    systemctl is-active alloy
    # attendu : active
  2. Consulter l'interface de debug d'Alloy (par défaut sur le port 12345) :
    curl -I http://localhost:12345
    # attendu : HTTP/1.1 200 OK
  3. Vérifier dans Grafana/Mimir que les métriques node_* remontent bien pour le tenant demo.
⚠ Les métriques ne remontent pas ?
  • Backend Mimir injoignable : vérifiez l'IP/port dans config.alloy et le pare-feu.
  • Erreur dans la config : journalctl -u alloy -f pour lire les logs du service.
  • Mauvaise architecture : le paquet est en amd64, adaptez l'URL pour arm64 si besoin.
✓ Bravo, c'est fait !

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 :