2. Fluent Bit 基础回顾:架构概览、核心组件与 Pipeline 概念
在深入多租户日志路由之前,必须先牢固掌握 Fluent Bit 的基础架构。Fluent Bit 是一个轻量级、高性能的日志处理器和转发器,其核心设计围绕 Pipeline(管道) 模型展开。理解 Pipeline 中各个组件的职责与协作方式,是后续配置标签规则和输出插件的基石。
2.1 整体架构概览
Fluent Bit 采用单进程、多线程的架构,通过内部事件循环驱动数据流动。其核心是一个可插拔的插件系统,所有功能(数据采集、解析、过滤、输出)均由插件实现。下图展示了 Fluent Bit 的宏观架构与数据流方向:
2.2 核心组件详解
Fluent Bit 的 Pipeline 由以下核心组件构成,每个组件都承担着特定的职责:
| 组件 | 职责 | 常见插件示例 | 关键特性 |
|---|---|---|---|
| Input | 从各种数据源采集日志或指标数据,并为每条记录打上初始标签(Tag)。 | cpu, tail, tcp, syslog, kafka | 数据入口;标签在此处生成 |
| Parser | 将非结构化数据(如文本行)解析为结构化的键值对(Record)。 | json, regex, ltsv, logfmt | 数据清洗与结构化 |
| Filter | 对已解析的记录进行修改、删除、添加字段或条件过滤。 | grep, record_modifier, throttle, kubernetes | 数据加工与治理 |
| Buffer / Storage | 提供内存或文件系统级别的缓冲,防止数据丢失,支持背压处理。 | memory, filesystem | 可靠性保障 |
| Routing | 根据记录的 Tag 与 Output 插件配置的 match 规则,决定数据去向。 |
Tag 匹配规则(通配符) | 多租户路由的核心 |
| Output | 将处理后的数据发送到指定的目标存储或分析系统。 | elasticsearch, s3, kafka, http, stdout | 数据最终目的地 |
关键概念: 在 Fluent Bit 中,Tag 是连接 Input 和 Output 的桥梁。每个 Input 插件在生成数据时都会分配一个 Tag(可配置),而每个 Output 插件通过
match 规则声明自己需要处理哪些 Tag 的数据。这种基于标签的松耦合设计,是实现多租户日志路由的基础。
2.3 Pipeline 概念与数据生命周期
Pipeline 定义了数据从采集到输出的完整生命周期。理解这个流程有助于诊断问题并优化配置。一个典型的 Pipeline 包含以下阶段:
- 采集阶段: Input 插件启动并持续读取数据源,为每条日志记录生成一个包含
Tag、Timestamp和Record的事件。 - 解析阶段: 如果 Input 配置了
parser,数据会先经过 Parser 插件,将原始文本转换为结构化 JSON。 - 过滤阶段: 数据依次通过所有配置的 Filter 插件。Filter 可以修改记录内容、添加 Kubernetes 元数据、或根据条件丢弃记录。
- 缓冲阶段: 处理后的数据被写入 Buffer(内存或文件)。Buffer 起到削峰填谷的作用,防止 Output 写入速度慢导致数据丢失。
- 路由与输出阶段: Fluent Bit 的 Router 检查每个事件的 Tag,并将其发送给所有
match规则匹配的 Output 插件。一个事件可以同时发送给多个 Output。
2.4 配置示例:一个简单的 Pipeline
以下是一个完整的 Fluent Bit 配置文件示例,展示了如何将 CPU 指标采集、过滤并输出到标准输出:
[SERVICE]
flush 1
log_level info
[INPUT]
name cpu
tag my_cpu_metrics
interval_sec 1
[FILTER]
name record_modifier
match my_cpu_metrics
record hostname ${HOSTNAME}
[OUTPUT]
name stdout
match my_cpu_metrics
format json_lines
配置解读:
- Input 插件采集 CPU 数据,并打上标签
my_cpu_metrics。 - Filter 插件匹配标签
my_cpu_metrics的数据,并添加一个hostname字段。 - Output 插件同样匹配标签
my_cpu_metrics,将处理后的数据以 JSON 格式打印到控制台。