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)模式。每个事件从产生到最终输出,依次经过以下阶段:

  1. 采集阶段: Input 插件从数据源拉取或接收原始数据,生成初始事件。
  2. 解析阶段: 事件被送入与 Input 关联的 Parser,将原始文本转换为键值对结构。
  3. 过滤阶段: 事件依次通过配置的 Filter 链,每个 Filter 可以修改、标记或丢弃事件。
  4. 路由阶段: 根据事件中的 Tag 与 Output 的 Match 规则,决定事件流向哪个输出目标。
  5. 输出阶段: Output 插件将事件写入外部系统,并处理重试与确认机制。
Fluent Bit 事件管道模型 Fluent Bit 事件管道模型 Input Parser Filter 链 Router Output 管道关键特征: • 事件携带 Tag 标签,从 Input 产生后贯穿整个管道。 • Filter 链支持多个 Filter 顺序执行,任一 Filter 可丢弃事件。 • Router 根据 Tag 与 Output 的 Match 规则做一对多路由。 • 每个阶段都有独立的错误处理和背压机制。

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 来决定是否处理该事件。

Tag 路由与匹配机制 Tag 路由与匹配机制 Input: tail tag = "app.logs" 事件 tag: app.logs Router match 规则 Output: stdout match: app.* Output: ES match: app.logs 匹配规则说明: • 通配符 * 匹配任意字符,app.* 匹配所有以 app. 开头的 Tag。 • 一个事件可被多个 Output 匹配,实现扇出(Fan-out)路由。

2.5 架构设计对热加载的影响

Fluent Bit 的管道模型天然支持组件级热替换,原因在于:

  • 无状态管道: 每个事件独立处理,Filter 和 Output 不维护跨事件的会话状态。
  • 插件隔离: 每个插件运行在独立的上下文(ctx)中,配置变更仅影响该插件实例。
  • 事件缓冲: 内存缓冲层(Buffer)在配置变更期间暂存事件,避免数据丢失。
  • 配置快照: 热加载时,Fluent Bit 会生成新的配置快照,与运行中的管道并行存在,切换瞬间完成。