Fluent Bit #
Fluent Bit sammelt Logs auf jedem Cluster-Knoten und liefert sie an OpenObserve. Es ist der Einlieferungsteil des Log-Stapels; ausgewertet wird dort.
Quelle #
Helm-Chart fluent-bit-collector aus der OCI-Registry
ghcr.io/fluent/helm-charts.
Dokumentation #
Funktion #
Drei Eingänge, drei Ausgänge, ein Ziel:
| Eingang | Quelle | Tag |
|---|---|---|
tail |
/var/log/containers/*.log |
kube.<namespace>.<pod>.<container> |
kubernetes_events |
Kubernetes-API, alle 5 s | k8s_events |
systemd |
Journal des Hosts | host.* |
Container-Logs werden über einen Prozessor mit Kubernetes-Metadaten angereichert — Namespace, Pod, Container, Labels. Die Abfrage läuft dabei gegen das Kubelet des eigenen Knotens und nicht gegen den API-Server. Auf einem Cluster mit vielen Pods ist das der Unterschied zwischen einer lokalen Abfrage je Knoten und einer Dauerlast auf dem API-Server.
Jeder Ausgang schickt seinen Tag-Bereich per HTTPS an die JSON-Einlieferungsschnittstelle von OpenObserve.
Lokale Anpassungen #
Die Konfiguration erfolgt vollständig über values.yaml.
Zwischenspeicherung auf Platte #
storage.type: filesystem mit Ablage unter /var/fluent-bit/data auf dem Host.
Das ist der wichtigste Unterschied zur Standardkonfiguration: Ist OpenObserve
nicht erreichbar, laufen die Daten auf Platte auf, statt im
Arbeitsspeicherpuffer verloren zu gehen. Der Fortschritt je Datei steht in einer
tail.db, sodass ein Neustart nicht von vorn beginnt und nichts doppelt liefert.
Einstellungen des tail-Eingangs
#
| Einstellung | Wert | Grund |
|---|---|---|
rotate_wait |
30 s | Nach einer Rotation werden die Reste noch ausgelesen |
refresh_interval |
10 s | Entlastet die Inotify-Liste bei schnellen Pod-Wechseln |
ignore_older |
5 m | Beim Start werden alte Überbleibsel nicht neu eingelesen |
mem_buf_limit |
10 M | Begrenzt den Arbeitsspeicher je Eingang |
multiline.parser |
cri |
Setzt vom Laufzeitsystem zerlegte Zeilen wieder zusammen |
mem_buf_limit ist der Schutz davor, dass ein Pod mit ausuferndem Logaufkommen
den Knoten in den Speichermangel treibt.
Host-Einhängungen #
| Pfad | Zweck |
|---|---|
/var/log |
Container-Logs und Journal |
/run/log/journal |
Flüchtiges Journal |
/etc/machine-id |
Ordnet Journal-Einträge dem Knoten zu |
Weiteres #
- RBAC: Zusätzlich zu den Chart-Vorgaben Leserechte auf
events, ohne die der Ereignis-Eingang nichts liefert. NODE_NAME: Wird per Downward API gesetzt und von einemmodify-Filter als Feldk8s_node_namean jede Container-Logzeile gehängt.- keel: Die Annotationen lassen das Image automatisch aktualisieren.
- Zugangsdaten: Ziel-Host und die Anmeldedaten für OpenObserve stehen in
den
outputs-Blöcken dervalues.yaml.
Installation #
Bereitgestellt über ArgoCD mit Kustomize und Helm. Von Hand:
1kubectl kustomize --enable-helm apps/fluent-bit | kubectl apply -n fluent-bit -f -Abhängigkeiten #
- OpenObserve als Ziel. Ist es nicht erreichbar, puffert Fluent Bit auf Platte, bis der Platz ausgeht.
- Zugriff auf das Kubelet jedes Knotens (Port 10250) für die Metadaten.