Fluent Bit 服务配置开发指南:热重载技巧

本文详细介绍了 Fluent Bit 服务配置中的热重载功能,包括通过 SIGHUP 信号和 HTTP API 实现配置动态更新,提升开发效率,适用于容器和源码安装环境。

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 输入插件供开发者使用。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计