Fluent Bit 服务配置开发指南:热重载技巧
本系列文章为想要学习云原生计算基金会(CNCF)项目 Fluent Bit 的开发者提供入门指南。每篇文章聚焦一个主题,深入探讨其内容、意义、入门方法以及如何通过实践学习 Fluent Bit 项目的相关主题。本文基于免费的在线工作坊,后续将继续介绍 Fluent Bit 的更多高级配置和插件。
服务配置:热重载
初次接触 Fluent Bit 时,配置中的 service
部分可能显得不那么重要。但开发者常忽略一个非常有用的功能:通过配置热重载,在内部开发循环中快速测试配置更改,而无需重启 Fluent Bit 实例。
以下是一个简单的配置文件 fluent-bit.yaml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
service:
flush: 1
log_level: info
hot_reload: on
pipeline:
inputs:
# 生成测试 INFO 日志级别消息
- name: dummy
tag: msg.info
dummy: '{"message":"This is INFO message", "level":"INFO", "color": "yellow"}'
# 生成测试 ERROR 日志级别消息
- name: dummy
tag: msg.error
dummy: '{"message":"This is ERROR message", "level":"ERROR", "color": "red"}'
outputs:
- name: stdout
match: '*'
format: json_lines
|
运行配置:
1
2
3
4
5
6
7
8
|
$ fluent-bit --config fluent-bit.yaml
...
{"date":1753107336.593176,"message":"This is INFO message","level":"INFO","color":"yellow"}
{"date":1753107336.593878,"message":"This is ERROR message","level":"ERROR","color":"red"}
{"date":1753107337.591496,"message":"This is INFO message","level":"INFO","color":"yellow"}
{"date":1753107337.591669,"message":"This is ERROR message","level":"ERROR","color":"red"}
...
|
在测试和开发过程中,决定修改配置以过滤 INFO 级别的消息,移除 color
键。更改后,需通过热重载功能重启运行的 Fluent Bit 实例。
新配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
service:
flush: 1
log_level: info
hot_reload: on
pipeline:
inputs:
- name: dummy
tag: msg.info
dummy: '{"message":"This is INFO message", "level":"INFO", "color": "yellow"}'
- name: dummy
tag: msg.error
dummy: '{"message":"This is ERROR message", "level":"ERROR", "color": "red"}'
filters:
- name: modify
match: msg.info
remove: color
outputs:
- name: stdout
match: '*'
format: json_lines
|
在 Linux 系统上,使用 SIGHUP 信号触发热重载(使用 pidof
工具识别运行中的 Fluent Bit 进程 ID):
1
2
3
4
5
6
7
8
9
10
11
12
|
$ kill -s SIGHUP $(pidof fluent)
...
{"date":1753107336.593176,"message":"This is INFO message","level":"INFO","color":"yellow"}
{"date":1753107336.593878,"message":"This is ERROR message","level":"ERROR","color":"red"}
[2025/07/21 16:20:34] [engine] caught signal (SIGHUP)
... <<<< 重启 Fluent Bit 日志消息
{"date":1753107636.966377,"message":"An INFO message","level":"INFO"}
{"date":1753107636.966658,"message":"An ERROR message","level":"ERROR","color":"red"}
...
|
日志输出捕获 SIGHUP 信号,原地重启 Fluent Bit 实例并应用新配置,结果显示 INFO 级别事件的 color
已被移除。
另一种方法是使用可配置的 HTTP 服务器并利用提供的端点:
- PUT /api/v2/reload
- POST /api/v2/reload
在配置文件的 service
部分添加以下内容:
1
2
3
4
5
6
7
|
service:
flush: 1
log_level: info
http_server: on
http_listen: 0.0.0.0
http_port: 2020
hot_reload: on
|
启动实例(使用相同的配置,仅添加了 HTTP 服务器),并尝试以下命令展示热重载:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$ fluent-bit --config fluent-bit.yaml
...
{"date":1753344624.827537,"message":"An INFO message","level":"INFO"}
{"date":1753344624.827891,"message":"An ERROR message","level":"ERROR","color":"red"}
...
# 在另一个终端窗口
$ curl -X POST -d '{}' localhost:2020/api/v2/reload
{"reload":"done","status":0}
# 或在另一个终端窗口
$ curl -X PUT -d '{}' localhost:2020/api/v2/reload
{"reload":"done","status":0}
# 同时,在 Fluent Bit 终端窗口...
...
{"date":1753344797.824589,"message":"An INFO message","level":"INFO"}
[2025/07/24 10:13:19] [engine] caught signal (SIGHUP)
... <<<< 重启 Fluent Bit 日志消息
{"date":1753344801.312548,"message":"An INFO message","level":"INFO"}
...
|
使用 REST 客户端时,可能类似以下操作:
![REST Client Example]
可以通过以下 API 调用监控实例执行的热重载次数:
1
2
3
|
$ curl -X GET -d '{}' localhost:2020/api/v2/reload
{"hot_reload_count":2}
|
本文介绍了一些方便的技巧,帮助开发者在使用 Fluent Bit 解决方案时提升内部开发循环体验。设置和利用热重载功能能显著加快开发效率。
系列更多内容
在本篇文章中,您学习了一些使用 Fluent Bit 配置中服务部分的实用技巧,以改善内部开发者循环体验。本文基于免费的在线工作坊。
随着您继续学习如何在实践中配置、运行、管理并掌握 Fluent Bit 的使用,本系列将有更多内容。接下来,将探索一些更有趣的 Fluent Bit 输入插件供开发者使用。