2. Fluent Bit 基础回顾:架构概览、核心组件与 Pipeline 概念

在深入多租户日志路由之前,必须先牢固掌握 Fluent Bit 的基础架构。Fluent Bit 是一个轻量级、高性能的日志处理器和转发器,其核心设计围绕 Pipeline(管道) 模型展开。理解 Pipeline 中各个组件的职责与协作方式,是后续配置标签规则和输出插件的基石。

2.1 整体架构概览

Fluent Bit 采用单进程、多线程的架构,通过内部事件循环驱动数据流动。其核心是一个可插拔的插件系统,所有功能(数据采集、解析、过滤、输出)均由插件实现。下图展示了 Fluent Bit 的宏观架构与数据流方向:

Fluent Bit 整体架构与 Pipeline 数据流 Input 插件 (CPU/File/TCP/Kafka) Parser / Filter 插件 (解析、过滤、修改记录) Buffer / Storage (内存 / 文件系统) Output 插件 (ES/S3/Kafka/HTTP) Routing (Tag 匹配) (根据 Tag 分发数据) 说明: 数据从 Input 进入,经过 Parser/Filter 处理,暂存于 Buffer,最后根据 Tag 路由到对应的 Output。 虚线表示 Filter 处理后的数据流与 Tag 路由的关联。

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 包含以下阶段:

  1. 采集阶段: Input 插件启动并持续读取数据源,为每条日志记录生成一个包含 Tag、Timestamp 和 Record 的事件。
  2. 解析阶段: 如果 Input 配置了 parser,数据会先经过 Parser 插件,将原始文本转换为结构化 JSON。
  3. 过滤阶段: 数据依次通过所有配置的 Filter 插件。Filter 可以修改记录内容、添加 Kubernetes 元数据、或根据条件丢弃记录。
  4. 缓冲阶段: 处理后的数据被写入 Buffer(内存或文件)。Buffer 起到削峰填谷的作用,防止 Output 写入速度慢导致数据丢失。
  5. 路由与输出阶段: Fluent Bit 的 Router 检查每个事件的 Tag,并将其发送给所有 match 规则匹配的 Output 插件。一个事件可以同时发送给多个 Output。
Pipeline 数据生命周期详细流程 ① 采集 Input ② 解析 Parser ③ 过滤 Filter ④ 缓冲 Buffer ⑤ 路由 Routing ⑥ 输出 Output 关键说明: • 每个事件都携带 Tag、Timestamp 和 Record。 • 路由阶段根据 Tag 匹配 Output 的 match 规则。 • 一个事件可被路由到多个 Output(Fan-Out)。

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 格式打印到控制台。

2.5 多租户路由的基石