Fluent Bit — lekki agent do forwarding logów na VPS
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS
Gdy masz kilka serwerów, każdy produkuje gigabajty logów dziennie — Nginx, PHP-FPM, Docker kontenery, własne aplikacje, systemd journal. Ręczne sprawdzanie każdego serwera osobno jest nieefektywne. Fluent Bit rozwiązuje ten problem: to ultra-lekki agent (450 KB RAM!) zbierający logi z wielu źródeł, przetwarzający je i wysyłający do centralnego systemu (Elasticsearch, Grafana Loki, S3, Kafka). Napisany w C, bez JVM, bez Ruby — jeden z najlżejszych agentów log shippingu w ekosystemie. Artykuł pokazuje instalację, konfigurację inputs, filters i outputs.
Instalacja Fluent Bit
# Ubuntu / Debian — oficjalne repo Fluent Bit curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh # Lub recznie wget -qO - https://packages.fluentbit.io/fluentbit.key | \ sudo gpg --dearmor -o /usr/share/keyrings/fluentbit-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] \ https://packages.fluentbit.io/ubuntu/$(lsb_release -cs) \ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/fluentbit.list sudo apt update && sudo apt install fluent-bit -y # Uruchomienie sudo systemctl enable --now fluent-bit sudo systemctl status fluent-bit # Sprawdz wersje fluent-bit --version # Konfiguracja glowna: /etc/fluent-bit/fluent-bit.conf # Parsery: /etc/fluent-bit/parsers.conf
Architektura: inputs → filters → outputs
Fluent Bit działa jako pipeline: dane wchodzą przez inputs (skąd czytamy), są przetwarzane przez filters (transformacje, parsowanie, wzbogacanie) i wychodzą przez outputs (dokąd wysyłamy). Wiele inputs i outputs można konfigurować jednocześnie w jednym pliku konfiguracyjnym.
# /etc/fluent-bit/fluent-bit.conf
[SERVICE]
Flush 5
Daemon Off
Log_Level info
Parsers_File parsers.conf
storage.path /var/log/fluentbit-buffer
storage.type filesystem
# INPUT 1: Logi Nginx z pliku
[INPUT]
Name tail
Path /var/log/nginx/access.log
Tag nginx.access
Parser nginx
DB /var/log/fluentbit-db/nginx.db
# INPUT 2: Systemd journal (journald)
[INPUT]
Name systemd
Tag systemd.*
Systemd_Filter _SYSTEMD_UNIT=nginx.service
Read_From_Tail On
# INPUT 3: Docker logi kontenerow
[INPUT]
Name tail
Tag docker.*
Path /var/lib/docker/containers/*/*.log
Parser docker
Docker_Mode On
# FILTER: Dodaj pole hostname do kazdego rekordu
[FILTER]
Name record_modifier
Match *
Record hostname {{HOSTNAME}}
# FILTER: Parsuj JSON z logow aplikacji
[FILTER]
Name parser
Match docker.*
Key_Name log
Parser json
# OUTPUT: Wyslij do Grafana Loki
[OUTPUT]
Name loki
Match *
Host loki.example.com
Port 3100
Labels job=fluent-bit,env=production
Label_Keys $hostname,$container_name
# OUTPUT 2: Backup do pliku lokalnego
[OUTPUT]
Name file
Match *
Path /var/log/fluentbit-output
File all_logs.log Parsery — parsowanie logów Nginx, Apache i JSON
# /etc/fluent-bit/parsers.conf
# Parser Nginx (Combined Log Format)
[PARSER]
Name nginx
Format regex
Regex ^(?<remote>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
# Parser Apache
[PARSER]
Name apache2
Format regex
Regex ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ \"]*)(?: +(?<proto>[^ \"]*))?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
# Parser Docker JSON log driver
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
# Parser JSON (dla logow aplikacji jako JSON)
[PARSER]
Name json
Format json Parsowanie multiline — stack traces i logi Java
# Multiline parser dla Java stack traces
[MULTILINE_PARSER]
Name java_multiline
Type regex
Flush_Timeout 1000
# Linia startowa: timestamp + poziom loga
Rule "start_state" "/^\d4-\d2-\d2/" "cont"
# Kontynuacja: linie z tabulatorem (stack frames)
Rule "cont" "/^\s+at /" "cont"
# Uzyw w INPUT tail
[INPUT]
Name tail
Path /var/log/myapp/app.log
Tag app.java
multiline.parser java_multiline
# Wbudowane parsery multiline: java, go, python, ruby, docker
[FILTER]
Name multiline
Match app.*
multiline.parser go Porównanie agentów log forwarding
| Agent | Język | RAM | CPU | Pluginy | Zastosowanie |
|---|---|---|---|---|---|
| Fluent Bit | C | ~0.5 MB | Bardzo niski | 100+ | Edge agent, IoT, K8s DaemonSet |
| Fluentd | Ruby + C | 40-100 MB | Niski-Średni | 1000+ | Aggregator, rich transforms |
| Logstash | JRuby (JVM) | 200 MB+ | Średni-Wysoki | 200+ | ELK Stack, complex pipelines |
| Promtail | Go | 20-50 MB | Niski | Tylko Loki | Dedykowany agent dla Grafana Loki |
| Vector | Rust | 30-80 MB | Bardzo niski | 50+ | Alternatywa dla Fluentd, wielki ekosystem |