
🌐 Aussi en: English · Deutsch · Español
Mon petit homelab est devenu une flotte de machines virtuelles modeste mais redoutable — près d’une douzaine d’entre elles ronronnent tranquillement. Mais qui dit plus de services dit plus de logs… et plus de chaos. 🌀
Pour mettre de l’ordre dans ce chaos, j’utilise le log shipper open source Fluent Bit : il collecte les logs de toutes mes VM et les transmet à une instance OpenSearch centralisée pour l’analyse et la visualisation.
L’objectif ? Tout collecter — des alertes d’espace disque aux tentatives de connexion échouées, en passant par le bruit de systemd, jusqu’aux savoureux messages du noyau. Tous les logs de toutes mes machines doivent finir proprement indexés et consultables dans un seul tableau de bord OpenSearch.
(Je vous présenterai bientôt l’installation d’OpenSearch dans un article à part.)
Plutôt que de me connecter à chaque VM et de configurer Fluent Bit à la main (non merci 🙃), j’ai écrit un petit playbook Ansible bien rangé qui automatise toute l’installation.
Voici ce que fait le playbook :
- Il installe Fluent Bit
- Il envoie un fichier de configuration personnalisé depuis le répertoire local
files/ - Il s’assure que le service est démarré et activé
Une fois le playbook prêt, je peux déployer Fluent Bit sur toutes les VM d’un coup, en parallèle — sans aucun travail manuel. Une seule commande, et Ansible s’occupe du reste.
L’un des grands atouts d’Ansible, c’est son idempotence : il vérifie intelligemment l’état de chaque système cible et n’exécute que les tâches réellement nécessaires. Vous pouvez lancer le playbook autant de fois que vous voulez sans rien casser — c’est de la pure magie DevOps. ✨
Pour que tout cela fonctionne, il faut encore un fichier : un inventaire hosts.ini, qui liste les adresses IP de toutes mes VM et indique comment Ansible doit s’y connecter en SSH.
--- # Ansible Playbook to install Fluent Bit
- name: Install packages and configure Fluent Bit on Debian 12
hosts: homelab
become: true
vars:
fluentbit_custom_config: true # Set to true to upload your own config file from "files/"
tasks:
- name: Ensure gpg is installed
ansible.builtin.apt:
name: gnupg
state: present
update_cache: yes
- name: Import Fluent Bit GPG key
ansible.builtin.apt_key:
url: https://packages.fluentbit.io/fluentbit.key
keyring: /usr/share/keyrings/fluentbit-archive-keyring.gpg
state: present
- name: Add Fluent Bit repository
ansible.builtin.apt_repository:
repo: deb [signed-by=/usr/share/keyrings/fluentbit-archive-keyring.gpg] https://packages.fluentbit.io/debian/bookworm bookworm main
filename: fluentbit
state: present
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
- name: Install Fluent Bit
ansible.builtin.apt:
name: fluent-bit
state: present
- name: Optional - Deploy custom fluent-bit.conf from files/
ansible.builtin.copy:
src: fluent-bit.conf
dest: /etc/fluent-bit/fluent-bit.conf
owner: root
group: root
mode: '0644'
notify: Restart fluent-bit
when: fluentbit_custom_config | default(false)
- name: Enable and start Fluent Bit service
ansible.builtin.systemd:
name: fluent-bit
enabled: yes
state: started
handlers:
- name: Restart fluent-bit
ansible.builtin.systemd:
name: fluent-bit
state: restarted
Voici un exemple de sortie après l’exécution du playbook. Comme vous pouvez le voir, tout s’est bien passé — sauf pour pihole, où gpg manquait au départ, ce qui a fait partiellement échouer la première installation. Une fois gpg installé, le playbook est passé sans problème :
root@seedVM:~/ansible/fluent-bit# ansible-playbook install_and_configure.yml -i hosts.ini
PLAY [Install packages and configure Fluent Bit on Debian 12] ************************************************
TASK [Gathering Facts] ***************************************************************************************
ok: [pihole]
ok: [gitlab]
...
TASK [Install Fluent Bit] ************************************************************************************
ok: [gitlab]
ok: [grafana]
changed: [pihole]
...
TASK [Enable and start Fluent Bit service] *******************************************************************
ok: [nextcloud]
changed: [pihole]
...
RUNNING HANDLER [Restart fluent-bit] *************************************************************************
changed: [pihole]
PLAY RECAP ****************************************************************************************************
blog : ok=8 changed=0 unreachable=0 failed=0
pihole : ok=9 changed=7 unreachable=0 failed=0
seedVM : ok=8 changed=0 unreachable=0 failed=0





