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 |
支持动态添加/移除 |
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 *
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 如何将分散的模块文件整合到统一的管道中:
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
.conf 文件,放入对应的子目录。当需要动态添加新的采集规则时,只需在 inputs.d/ 中创建新文件,然后向 Fluent Bit 进程发送 SIGHUP 信号即可生效,无需中断正在运行的数据管道。