
đ Auch auf: English · Français · Español
Mein kleines Homelab ist inzwischen zu einer kleinen, aber feinen Flotte virtueller Maschinen herangewachsen â fast ein Dutzend davon schnurrt munter vor sich hin. Doch mehr Dienste bedeuten mehr Logs ⊠und mehr Chaos. đ
Um Ordnung in dieses Chaos zu bringen, nutze ich den Open-Source-Log-Shipper Fluent Bit: Er sammelt die Logs aller meiner VMs ein und schickt sie an eine zentrale OpenSearch-Instanz, wo ich sie auswerten und visualisieren kann.
Das Ziel? Alles einsammeln â von Speicherplatz-Warnungen, fehlgeschlagenen Login-Versuchen und systemd-Rauschen bis hin zu saftigen Kernel-Meldungen. SĂ€mtliche Logs aller Maschinen sollen sauber indexiert und durchsuchbar in einem einzigen OpenSearch-Dashboard landen.
(Das OpenSearch-Setup zeige ich dir demnÀchst in einem eigenen Beitrag.)
Statt mich jetzt auf jeder VM einzeln einzuloggen und Fluent Bit von Hand einzurichten (nein danke đ), habe ich ein kleines, aufgerĂ€umtes Ansible-Playbook gebaut, das die komplette Einrichtung automatisiert.
Das macht das Playbook:
- Installiert Fluent Bit
- LĂ€dt eine eigene Konfigurationsdatei aus dem lokalen Verzeichnis
files/hoch - Sorgt dafĂŒr, dass der Dienst gestartet und aktiviert ist
Sobald das Playbook steht, kann ich Fluent Bit auf alle VMs gleichzeitig ausrollen, parallel â ganz ohne Handarbeit. Ein einziger Befehl, um den Rest kĂŒmmert sich Ansible.
Eines der besten Dinge an Ansible ist die Idempotenz: Es prĂŒft clever den Zustand jedes Zielsystems und fĂŒhrt nur die Tasks aus, die wirklich nötig sind. Du kannst das Playbook beliebig oft laufen lassen, ohne etwas kaputtzumachen â und das ist pure DevOps-Magie. âš
Damit das funktioniert, braucht es noch eine weitere Datei: eine Inventory-Datei hosts.ini, die die IP-Adressen aller meiner VMs auflistet und festlegt, wie Ansible sich per SSH mit ihnen verbindet.
--- # 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
Hier eine Beispielausgabe nach einem Lauf des Playbooks. Wie du siehst, lief alles glatt â bis auf pihole: Dort fehlte zunĂ€chst gpg, weshalb die erste Installation teilweise fehlschlug. Nach der Installation von gpg lief das Playbook problemlos durch:
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





