Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

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

Najczęstsze pytania

Czym jest Fluent Bit i czym różni się od Fluentd? +
Fluent Bit to ultra-lekki agent do zbierania, filtrowania i forwarding logów napisany w C. Zużywa ok. 450 KB RAM i mniej niż 0.5% CPU przy dużym ruchu. Fluentd to bogatszy agent w Ruby — zużywa 40+ MB RAM, ma ogromny ekosystem pluginów, ale jest cięższy. Fluent Bit jest idealny jako "node agent" zbierający logi z każdego serwera i przesyłający je do centralnego Fluentd lub bezpośrednio do Elasticsearch/Loki. Razem tworzą architekturę edge (Fluent Bit) + aggregator (Fluentd).
Jakie outputy obsługuje Fluent Bit? +
Fluent Bit obsługuje dziesiątki outputów: Elasticsearch, OpenSearch, Grafana Loki, Splunk, Datadog, New Relic, InfluxDB, AWS CloudWatch, AWS S3, Google Cloud Logging, Azure Log Analytics, Kafka, Fluentd (jako aggregator), HTTP (generic webhook), TCP/UDP, stdout (debug). Lista rośnie z każdą wersją. Jeden Fluent Bit może wysyłać logi do wielu destynacji jednocześnie przez konfigurację wielu sekcji [OUTPUT].
Czy Fluent Bit radzi sobie z logami Docker kontenerów? +
Tak, Fluent Bit ma dedykowany input Docker dla logów kontenerów. Może czytać logi ze wszystkich kontenerów przez /var/lib/docker/containers/*/*-json.log, parsować je (JSON log driver) i wzbogacać o metadane (container_id, container_name, image). W środowiskach Kubernetes jest popularnym wyborem obok Promtail (dla Loki) — DaemonSet Fluent Bit zbiera logi ze wszystkich nodów.
Jak działa parsowanie multiline w Fluent Bit? +
Stack traces i logi Java/Python/Ruby rozciągają się na wiele linii. Fluent Bit obsługuje parsowanie multiline przez [FILTER] multiline z konfiguracją parsera (Java, Go, Python, Ruby wbudowane lub własne przez regex). Parser wykrywa linię startową (np. timestamp) i łączy kolejne linie aż do następnej linii startowej w jeden rekord. Obsługiwane też przez typ input tail z parametrem multiline.parser.
Jak zapewnić że logi nie są tracone przy awarii serwera docelowego? +
Fluent Bit obsługuje storage.type=filesystem — buforuje rekordy na dysku gdy output jest niedostępny i ponawia wysyłkę po przywróceniu połączenia. Konfiguruj storage.path=/var/log/fluentbit-storage i storage.max_chunks_up=128. Parametr Retry_Limit=false powoduje nieskończone ponawianie. W ten sposób logi nie są tracone nawet przy kilkugodzinnej awarii backendu.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.