Fluent Bit 详解:云原生时代的轻量日志采集器
Fluent Bit 中文详解:C 语言极致轻量(约 1MB 内存)、INPUT/FILTER/OUTPUT 配置结构、tail 文件采集、parser 解析器、Kubernetes 过滤器、stream processor SQL 流处理、容器与嵌入式场景,以及观测云 DataKit 的对标方案。
Fluent Bit 是 Fluentd 的轻量姊妹项目:C 语言编写、单实例内存约 1MB、零外部依赖,为容器与边缘环境而生。它是 Kubernetes 日志采集 DaemonSet 的事实标准之一。本文讲解其架构、配置实战与观测云视角的选型建议。
核心要点速览
- 极致轻量:C 实现、内存 1MB 级——DaemonSet 部署到每个节点也不会成为资源负担。
- INI 风格配置:[INPUT]/[FILTER]/[OUTPUT] 段落直截了当,也有 YAML 版本。
- Kubernetes 过滤器开箱即用:自动为容器日志附加 namespace、pod、label 元数据。
- 观测云视角:观测云用户优先 DataKit(同为轻量采集器,平台联动更深);存量 Fluent Bit 可直接外送观测云。
1. 配置结构
[SERVICE]
Flush 1
Log_Level info
[INPUT]
Name tail
Path /var/log/app/*.log
Tag app.*
Parser json
Refresh_Interval 5
[FILTER]
Name record_modifier
Match app.*
Record hostname ${HOSTNAME}
Record env production
[OUTPUT]
Name http
Match app.*
Host logs.example.com
Port 443
URI /ingest
Format json
tls On
三段式数据流:INPUT 采集打 tag → FILTER 按 Match 加工 → OUTPUT 按 Match 外送。Flush 控制批量发送间隔。
2. 核心插件
| 类别 | 常用插件 |
|---|---|
| 输入 | tail(文件)、systemd(journal)、syslog、http、opentelemetry |
| 过滤 | grep(含/排除)、record_modifier(加字段)、modify(条件改字段)、kubernetes(K8s 元数据)、lua(自定义脚本)、nest(字段结构调整) |
| 输出 | http、file、forward(发给 Fluentd)、kafka、es/opensearch、s3 |
kubernetes 过滤器是 K8s 场景的杀手锏:自动从容器运行时元数据中提取 pod 名、命名空间、标签附加到日志上——没有它,容器日志只是一堆匿名文本。
3. Parser:把文本变成结构
[PARSER]
Name nginx
Format regex
Regex ^(?<remote>[^ ]*) \S+ \S+ \[(?<time>[^\]]*)\] "(?<method>\S+) (?<path>[^"]*)" (?<code>\d+)
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
INPUT 里指定 Parser nginx 即可在采集时完成解析。JSON 日志用内置 json parser 零配置。
4. Stream Processor:边流边算
Fluent Bit 内置 SQL 流处理器,可对流动中的日志做实时计算:
SELECT pod_name, COUNT(*) AS errors
FROM STREAM:app.*
WHERE level = 'error'
GROUP BY pod_name
把"每 Pod 错误数"这类聚合前置到采集层,减少后端压力。
观测云视角:DataKit 对标与迁移
DataKit 与 Fluent Bit 同为轻量采集器定位,但 DataKit 与观测云平台开箱联动:
| 能力 | Fluent Bit | 观测云 DataKit |
|---|---|---|
| 资源占用 | 约 1MB | 轻量级(K8s DaemonSet 常驻) |
| K8s 元数据附加 | kubernetes 过滤器 | 内置容器/K8s 采集自动打标 |
| 解析处理 | parser + lua | Pipeline(grok/函数脚本) |
| 平台联动 | 通用输出 | 查看器/监控器/索引/敏感扫描开箱即用 |
存量 Fluent Bit:OUTPUT 改 http 指向观测云接收端即完成迁移;新环境直接 DataKit DaemonSet,采集、打标、缓冲、转发一站式。
常见问题(FAQ)
Fluent Bit 和 Fluentd 到底什么关系?
同一团队(CNCF 同项目族)的两代产品:Fluent Bit 轻量负责边缘采集,Fluentd 全能负责中心汇聚,两者通过 forward 协议互通。现代 K8s 场景 Fluent Bit 常独立完成全链路。
配置调试有什么好办法?
两步法:先把 OUTPUT 设为 stdout 确认 Fluent Bit 看到的数据形态;再 Log_Level debug 观察解析与路由过程。看到记录里有默认的 log 字段说明 parser 没生效。
tail 插件会重复采集吗?
Fluent Bit 维护位点数据库(DB 参数指定),重启后断点续采不重复。轮转场景配 Rotate_Wait 与 Ignore_Older 控制历史文件处理。
Lua 过滤器什么时候用?
当 modify/record_modifier 的条件逻辑不够用(如部分字段脱敏、复杂计算)时上 Lua——它能做任何事,但请先确认内置过滤器真不够用,简单优先。
系列阅读
- 上一篇:Fluentd 详解
- 下一篇:Logstash 详解
- 相关阅读:Fluentd vs Fluent Bit 对比 | 日志采集器七款横评