Vector уже закрывал тут задачу “собрать логи без JVM Logstash” — бинарник на Rust без прогрева и без гигабайта памяти на старте. Fluent Bit решает ту же задачу с другим допущением: он написан на C и исходно проектировался под embedded- и sidecar-сценарии, где процесс крутится не на отдельной VM с запасом ресурсов, а третьим-четвёртым соседом в поде или на роутере.

Конфиг в классическом формате — секции [INPUT] / [FILTER] / [OUTPUT], то же разделение по ролям, что source/transform/sink у Vector, просто без общего TOML-файла на всё сразу:

[INPUT]
  Name    tail
  Path    /var/log/myapp/*.log
  Tag     myapp.*
  Parser  json

[FILTER]
  Name    grep
  Match   myapp.*
  Regex   log error

[OUTPUT]
  Name    stdout
  Match   myapp.*

tail читает файл с хвоста, Parser json разбирает каждую строку как JSON ещё на входе, grep-фильтр пропускает дальше только записи, где поле log матчится с регэкспом — в данном случае только строки с error.

Fluent Bit изначально рос из Fluentd (тот же проект, тот же CNCF) как облегчённая версия для случаев, где полный Fluentd на Ruby избыточен — поэтому forward-протокол Fluentd он понимает нативно, можно слушать его как промежуточный агрегатор:

[INPUT]
  Name   forward
  Listen 0.0.0.0
  Port   24224

[OUTPUT]
  Name   stdout
  Match  *

Там, где у Vector троттлинг входящего потока обычно решается через transforms.throttle на VRL, у Fluent Bit это отдельный готовый фильтр:

[FILTER]
  Name     throttle
  Match    *
  Rate     1000
  Window   300
  Interval 1s

Это пропустит в среднем 1000 сообщений в секунду, усреднённых за скользящее окно в 300 секунд — всплеск выше лимита не обрубается резко, а сглаживается по окну.

Выбор между Vector и Fluent Bit в большинстве случаев решается средой, а не возможностями: на обычном сервере с запасом памяти Rust-бинарник Vector даёт более выразительный VRL для трансформаций, а на edge-узле, в sidecar-контейнере или там, где важен минимальный footprint — Fluent Bit ближе к тому, для чего его изначально проектировали.

#monitoring #logging