3. 配置文件结构:SERVICE、INPUT、FILTER、OUTPUT段详解、配置语法规则、@INCLUDE指令

Fluent Bit 的配置文件采用 段(Section) 与 键值对(Key-Value) 的层次结构,每个段负责定义插件生命周期中的一个特定环节。理解这四大核心段——SERVICE、INPUT、FILTER、OUTPUT——是编写可维护、可热加载配置的基础。

3.1 四大核心段详解

每个段以方括号 [SECTION_NAME] 开头,段内包含若干 Key Value 对。下表总结了各段的作用域与典型配置项:

段名称 作用域 典型配置项(示例) 热加载影响
SERVICE 全局守护进程行为 Flush、Log_Level、Daemon、HTTP_Server 修改后需重启进程
INPUT 数据源定义 Name、Tag、Path、DB 支持动态添加/移除
FILTER 数据流处理管道 Name、Match、Key、Pattern 支持动态添加/移除
OUTPUT 数据路由与存储 Name、Match、Host、Port 支持动态添加/移除
热加载边界提醒: 只有 INPUT、FILTER、OUTPUT 段支持运行时动态增删;SERVICE 段的变更(如修改 Flush 间隔或 Log_Level)必须通过重启 Fluent Bit 进程才能生效。

3.1.1 SERVICE 段:全局引擎配置

SERVICE 段是配置文件的入口,定义 Fluent Bit 引擎的全局参数。它通常位于文件顶部,且只能出现一次。常见配置项包括:

  • Flush:数据刷新间隔(秒),默认 5。
  • Log_Level:日志级别,可选 error、warning、info、debug、trace。
  • Daemon:是否以守护进程运行,on 或 off。
  • HTTP_Server:是否启用内置 HTTP 监控接口,on 或 off。
  • HTTP_Port:HTTP 服务监听端口,默认 2020。

3.1.2 INPUT 段:数据采集入口

每个 INPUT 段定义一个数据源。通过 Name 指定插件类型(如 cpu、tail、syslog),通过 Tag 为数据流打标签,后续 FILTER 和 OUTPUT 通过 Match 规则引用该标签。

[INPUT]
    Name        tail
    Tag         myapp.log
    Path        /var/log/myapp/*.log
    DB          /var/log/flb_tail.db
    Mem_Buf_Limit   50MB

3.1.3 FILTER 段:数据流处理管道

FILTER 段对匹配到的数据流进行转换、过滤或富化。多个 FILTER 按配置顺序依次执行。常用插件包括 grep(过滤)、modify(修改字段)、parser(解析)、nest(嵌套)等。

[FILTER]
    Name        grep
    Match       myapp.*
    Regex       log_level ^(ERROR|WARN)$

3.1.4 OUTPUT 段:数据路由与存储

OUTPUT 段定义数据的目的地。支持多种后端:stdout(控制台)、elasticsearch、kafka、s3、http 等。通过 Match 规则决定哪些标签的数据流向该输出。

[OUTPUT]
    Name        stdout
    Match       *
配置顺序原则: 在同一个配置文件中,INPUT、FILTER、OUTPUT 段可以按任意顺序出现,但 Fluent Bit 内部始终按照 INPUT → FILTER → OUTPUT 的管道顺序处理数据。建议按此逻辑顺序组织配置,提高可读性。

3.2 配置语法规则

Fluent Bit 的配置文件语法简洁,遵循以下规则:

  • 段定义:使用方括号 [SECTION_NAME],段名不区分大小写,但惯例使用大写。
  • 键值对:Key Value,键与值之间使用空格或制表符分隔。值中若包含空格,需用双引号包裹。
  • 注释:以 # 开头的行为注释,整行忽略。
  • 多值支持:某些键(如 Match)支持通配符 * 和 ?。
  • 缩进:缩进非强制,但建议使用 4 空格或制表符对齐,提升可读性。
  • 空行:空行被忽略,可用于分隔不同段。
# 这是一个完整的配置示例
[SERVICE]
    Flush        5
    Log_Level    info

[INPUT]
    Name         cpu
    Tag          my_cpu

[FILTER]
    Name         modify
    Match        my_cpu
    Add          hostname my-server-01

[OUTPUT]
    Name         stdout
    Match        *

3.3 @INCLUDE 指令:模块化配置管理

@INCLUDE 指令允许在配置文件中引用外部文件,实现配置的模块化拆分与复用。这在管理大量采集规则或输出目标时尤为重要,也是实现热加载的关键基础设施。

3.3.1 基本用法

在配置文件中使用 @INCLUDE 后跟文件路径,Fluent Bit 会在解析时将该文件的内容原地展开。

# 主配置文件:fluent-bit.conf
[SERVICE]
    Flush        5
    Log_Level    info

@INCLUDE inputs.d/*.conf
@INCLUDE filters.d/*.conf
@INCLUDE outputs.d/*.conf

3.3.2 路径规则

路径形式 说明 示例
路径 以 / 开头,指向文件系统位置 @INCLUDE /etc/fluent-bit/inputs/cpu.conf
相对路径 相对于主配置文件所在目录 @INCLUDE ./custom/parser.conf
通配符 支持 * 匹配多个文件,按字母顺序加载 @INCLUDE conf.d/*.conf
通配符加载顺序: 使用 @INCLUDE *.conf 时,文件按字母顺序加载。如果 FILTER 的执行顺序有依赖关系,建议在文件名中加入数字前缀(如 01-filter-grep.conf、02-filter-modify.conf)来控制顺序。

3.3.3 热加载与 @INCLUDE 的协同

当 Fluent Bit 启用热加载(通过 SIGHUP 信号或 HTTP API 触发重载)时,它会重新解析主配置文件,并递归展开所有 @INCLUDE 引用的文件。这意味着:

  • 新增一个 .conf 文件到 inputs.d/ 目录后,触发重载即可生效。
  • 修改某个 OUTPUT 配置文件后,无需重启整个进程。
  • 删除某个 FILTER 配置文件后,对应的处理管道会被移除。

3.4 配置文件结构总览(SVG)

下图展示了 Fluent Bit 配置文件的完整结构,以及 @INCLUDE 如何将分散的模块文件整合到统一的管道中:

Fluent Bit 配置文件结构总览 Fluent Bit 配置文件结构总览 主配置文件 fluent-bit.conf [SERVICE] 全局配置 @INCLUDE 指令 inputs.d/ 目录 01-cpu.conf 02-tail.conf 03-syslog.conf filters.d/ 目录 01-grep.conf 02-modify.conf 03-parser.conf outputs.d/ 目录 01-stdout.conf 02-es.conf 03-kafka.conf 运行时管道:INPUT → FILTER → OUTPUT SIGHUP / HTTP API → 重新解析 @INCLUDE 文件

3.5 配置语法规则速查表

以下表格汇总了配置编写中常见的语法规则与注意事项:

规则 说明 正确示例 错误示例
段名 使用方括号包裹,建议大写 [INPUT] INPUT(缺少方括号)
键值分隔 空格或制表符,至少一个 Name tail Name=tail(使用等号)
值含空格 使用双引号包裹 Path "/var/log/my app/*.log" Path /var/log/my app/*.log
注释 # 开头,整行忽略 # 这是注释 // 这是注释(不支持)
@INCLUDE 路径 支持、相对、通配符 @INCLUDE conf.d/*.conf @INCLUDE *.txt(扩展名错误)
重复段 INPUT/FILTER/OUTPUT 允许多个 多个 [INPUT] 段 多个 [SERVICE] 段(仅允许一个)

3.6 模块化配置最佳实践

结合 @INCLUDE 指令,推荐采用以下目录结构管理 Fluent Bit 配置:

/etc/fluent-bit/
├── fluent-bit.conf          # 主配置文件(仅含 SERVICE 和 @INCLUDE)
├── inputs.d/                # 采集规则模块
│   ├── 01-cpu.conf
│   ├── 02-tail-app.conf
│   └── 03-syslog.conf
├── filters.d/               # 过滤处理模块
│   ├── 01-grep-error.conf
│   ├── 02-modify-hostname.conf
│   └── 03-parser-json.conf
└── outputs.d/               # 输出目标模块
    ├── 01-stdout-debug.conf
    ├── 02-elasticsearch-prod.conf
    └── 03-kafka-backup.conf
热加载实战建议: 将每个 INPUT、FILTER、OUTPUT 拆分为独立的 .conf 文件,放入对应的子目录。当需要动态添加新的采集规则时,只需在 inputs.d/ 中创建新文件,然后向 Fluent Bit 进程发送 SIGHUP 信号即可生效,无需中断正在运行的数据管道。