2. Fluent Bit 架构基础:核心组件与事件管道模型
Fluent Bit 采用轻量级、高性能的事件驱动架构,其内部由一组职责单一的核心组件构成,并通过标准化的事件管道(Event Pipeline)串联起来。理解这一基础架构是掌握配置热加载的前提——因为热加载的本质就是动态修改管道中各组件的拓扑与参数。
2.1 核心组件一览
Fluent Bit 定义了五种核心组件类型,它们共同构成了数据采集、处理与输出的完整链路:
| 组件 | 职责 | 典型实例 | 是否支持热加载 |
|---|---|---|---|
| Input(输入) | 从外部数据源采集原始日志/指标 | tail、cpu、syslog、kafka | ✅ 是(新增/修改/删除) |
| Parser(解析器) | 将非结构化数据解析为结构化记录 | regex、json、ltsv、logfmt | ✅ 是(新增/修改) |
| Filter(过滤器) | 对事件进行修改、富化、路由或丢弃 | grep、record_modifier、kubernetes | ✅ 是(新增/修改/删除) |
| Output(输出) | 将处理后的事件发送到目标存储或分析系统 | elasticsearch、kafka、s3、stdout | ✅ 是(新增/修改/删除) |
| Buffer(缓冲区) | 内存/文件暂存,防止数据丢失 | memory、filesystem | ⚠️ 仅参数调整 |
关键认知: 热加载主要作用于 Input、Parser、Filter、Output 四类插件。Buffer 配置变更通常需要重启进程,但本课程后续会介绍通过动态调整输出目标间接影响缓冲行为的技巧。
2.2 事件管道模型
Fluent Bit 内部的数据流遵循严格的管道-处理器(Pipeline-Processor)模式。每个事件从产生到最终输出,依次经过以下阶段:
- 采集阶段: Input 插件从数据源拉取或接收原始数据,生成初始事件。
- 解析阶段: 事件被送入与 Input 关联的 Parser,将原始文本转换为键值对结构。
- 过滤阶段: 事件依次通过配置的 Filter 链,每个 Filter 可以修改、标记或丢弃事件。
- 路由阶段: 根据事件中的 Tag 与 Output 的 Match 规则,决定事件流向哪个输出目标。
- 输出阶段: Output 插件将事件写入外部系统,并处理重试与确认机制。
2.3 插件系统概述
Fluent Bit 的扩展性完全建立在插件(Plugin)体系之上。核心组件本身只是框架,实际的数据采集、解析、过滤和输出能力由插件提供。插件系统分为两大类:
2.3.1 内置插件 vs 外部插件
| 类型 | 来源 | 加载方式 | 热加载支持 |
|---|---|---|---|
| 内置插件 | 编译进 Fluent Bit 二进制 | 自动可用,无需额外配置 | ✅ 支持 |
| 外部插件 | 通过共享库(.so)动态加载 | 需在配置中指定 plugin 指令 |
⚠️ 需重启加载新 .so |
2.3.2 插件注册与配置结构
每个插件在配置文件中通过 [INPUT]、[PARSER]、[FILTER]、[OUTPUT] 区块声明。以下是一个包含完整管道定义的配置示例:
[SERVICE]
flush 5
log_level info
[INPUT]
name tail
tag app.logs
path /var/log/app/*.log
parser json
[PARSER]
name json
format json
time_key timestamp
time_format %Y-%m-%dT%H:%M:%S
[FILTER]
name grep
match app.logs
regex level ^(ERROR|WARN)$
[OUTPUT]
name stdout
match app.logs
热加载视角: 上述配置中的
[INPUT]、[FILTER]、[OUTPUT] 区块均可在运行时通过热加载机制动态增删改。例如,新增一个 [OUTPUT] 指向 Elasticsearch,无需重启 Fluent Bit 进程。
2.4 事件生命周期与 Tag 路由
事件在管道中流转时,Tag 是路由的核心标识。Tag 由 Input 插件在创建事件时赋予,后续的 Filter 和 Output 通过 match 规则匹配 Tag 来决定是否处理该事件。
2.5 架构设计对热加载的影响
Fluent Bit 的管道模型天然支持组件级热替换,原因在于:
- 无状态管道: 每个事件独立处理,Filter 和 Output 不维护跨事件的会话状态。
- 插件隔离: 每个插件运行在独立的上下文(ctx)中,配置变更仅影响该插件实例。
- 事件缓冲: 内存缓冲层(Buffer)在配置变更期间暂存事件,避免数据丢失。
- 配置快照: 热加载时,Fluent Bit 会生成新的配置快照,与运行中的管道并行存在,切换瞬间完成。