从 Fluentd 迁移到 Fluent Bit:完整指南
核心要点:Fluent Bit 是 Fluentd 的高性能替代方案,支持所有遥测数据类型
何时以及为何迁移?
Fluentd 是 14 年前创建的技术,至今仍是企业中最广泛部署的日志收集技术之一。其分布式插件架构和高度宽松的许可证使其成为云原生计算基金会(CNCF)的理想成员,现已毕业。
然而,淹没在遥测数据中的企业现在需要具有更高性能、更原生支持不断演进的模式和格式以及更强处理灵活性的解决方案。这就是 Fluent Bit 的用武之地。
Fluent Bit 虽然最初是 Fluent 生态系统内的子项目,但它从 Fluentd 扩展而来,支持所有遥测数据类型——日志、指标和追踪。Fluent Bit 现在比 Fluentd 更受欢迎,部署次数超过 150 亿次,被亚马逊、谷歌、甲骨文和微软等公司使用。
Fluent Bit 还完全与 OpenTelemetry 信号、格式和协议对齐,这确保了用户能够随着遥测数据的增长和演变继续处理这些数据。
迁移的原因
用户从 Fluentd 转向 Fluent Bit 的原因包括:
技术优势:
相同资源下更高的性能 完整的 OpenTelemetry 支持(日志、指标和追踪),以及 Prometheus 指标支持 更简单的配置和路由到多个位置的能力 更高的自定义处理规则添加速度 集成监控,更好地理解性能和数据流
Fluentd 与 Fluent Bit 的区别
背景差异
要理解两个项目之间的所有差异,重要的是了解每个项目的背景及其构建的时代特征。
Fluentd 的主要语言是 Ruby,最初设计是为了帮助用户将数据推送到大数据平台,如 Hadoop。该项目遵循分布式架构,插件是在主二进制文件安装和部署之后才安装的。
Fluent Bit 则是用 C 语言编写的,专注于小型系统(容器、嵌入式 Linux)中的超高性能。该项目从 Fluentd 插件中吸取了经验,而是选择了完全嵌入式的插件,这些插件是核心二进制文件的一部分。
性能差异
从 Fluentd 切换到 Fluent Bit 的明显差异和主要价值在于性能。使用 Fluent Bit,相同资源下可以处理的日志量可能是 Fluentd 的 10 到 40 倍,具体取决于使用的插件。
Fluent Bit 从头开始就被设计为超高性能,专注于尽可能快地传输数据以进行数据分析。后来发现性能足够高效,可以在不影响代理尽可能快速使命的前提下添加更多的边缘处理。
路由机制
Fluent Bit 的其他部分是从 Fluentd 遇到的挑战中发展而来的,比如缓冲和路由。在 Fluentd 中,多重路由是事后考虑的,用户需要"复制"数据流才能将数据路由到多个点。
这使得配置管理变得噩梦般困难,同时还基本上复制了路由数据所需的资源要求。
在 Fluent Bit 中,缓冲区只存储一次,允许多个插件"订阅"数据流。这确保了数据只存储一次,可以多次订阅,实现多重路由而无需在性能和配置疲劳之间做出权衡。
遥测信号焦点
虽然 Fluentd 最初只是一个数据发送器,但它成长为一个在 Kubernetes 等项目和 Splunk 等公司中使用的日志代理。Fluent Bit 则从嵌入式指标收集器开始,随后才支持日志文件。
随着 Fluent Bit 的采用开始超越 Fluentd 的功能,OpenTelemetry 日志/指标/追踪、Prometheus 抓取和远程写入支持、eBPF 和性能分析支持等功能都被添加进来。
如今 Fluent Bit 与 OpenTelemetry 模式、格式和协议对齐,旨在成为一个轻量级且高性能的实现。
自定义处理能力
Fluentd 和 Fluent Bit 有许多相同的处理器名称,但在自定义处理方面选项相当不同。
Fluentd 提供 enable_ruby 选项,允许在配置中使用自定义 Ruby 脚本来执行操作。这对小任务有效;但随着逻辑变得更加复杂,会产生较大的性能瓶颈。
Fluent Bit 的自定义处理是用 Lua 语言完成的,提供了极大的灵活性。与 Fluentd 不同,Fluent Bit 的 Lua 处理器性能很高,可以大规模使用(每天 100TB 以上)。
自定义插件支持
两个项目都允许自定义插件来连接源或目的地。Fluentd 的自定义插件是"Ruby Gems",你可以下载并安装到现有或新的安装部署中。Fluent Bit 的自定义插件则是用 Go 语言编写和编译的。还有新的举措可以用任何语言编写自定义插件并将其编译为 WebAssembly。
从 Fluentd 的分布式插件架构中学到的一课是,插件数量可能会呈指数级增长。然而,所需的质量和维护通常使许多插件被遗弃和支持不足。在 Fluent Bit 中,插件都集成到了源代码本身中,这确保了与每次发布的兼容性。
自定义插件仍然独立于主仓库。但我们正在寻找方法,让这些插件也能享有主 GitHub 仓库中原生 C 插件的相同优势。
监控功能
了解数据如何穿越环境通常是部署 Fluentd 或 Fluent Bit 的用户的首要需求。在 Fluentd 中,启用这些设置可能需要通过"monitor_agent"或使用第三方 Prometheus 导出插件进行复杂配置。这些监控插件也会增加 Fluentd 的维护开销,影响性能。
Fluent Bit 将监控作为核心功能的一部分,可以通过原生插件(fluentbit_metrics)或在 HTTP 端口上抓取获取。Fluent Bit 的指标还包含了比 Fluentd 更多的信息,允许你了解字节数、记录数、存储和连接信息。
如何开始迁移
部署方式
作为代理(Linux 或 Windows 包)
当 Fluentd 作为代理部署在 Linux 或 Windows 上时,其主要功能是收集本地日志文件或 Windows 事件日志并将它们路由到特定目的地。值得庆幸的是,Fluent Bit 的本地收集能力与 Fluentd 相当,包括故障恢复、存储最后收集的日志行和本地缓冲的能力。
在 Kubernetes 中作为 DaemonSet 部署
如果 Fluentd 在你的 Kubernetes 集群中作为 DaemonSet 运行,你应该首先检查正在运行的镜像。由于 Fluentd 有分布式插件,DaemonSet 镜像可能包含特定插件,这确保了你可以直接从读取 Kubernetes 日志到最终目的地。
例如,OpenSearch 和 Kafka 作为插件包含在内,所以你应该验证你使用的镜像是否具有与 Fluent Bit 相同的插件。Fluent Bit 还支持对所有日志进行 Kubernetes 增强,提供命名空间、Pod、标签等数据。
作为聚合器/收集器部署
如果你的 Fluentd 部署用于从 syslog、网络设备或 HTTP 请求收集日志,你可以首先验证 Fluent Bit 是否具有相同的功能。例如,Fluent Bit 有 syslog、TCP、HTTP 和 UDP 插件,可以覆盖大部分这些用例。
此外,Fluent Bit 还可以接收 OpenTelemetry HTTP1/gRPC、Prometheus 远程写入、HTTP gzip 和 Splunk HTTP 事件收集器(HEC)作为额外的入站信号。
添加遥测管道
在从 Fluentd 迁移到 Fluent Bit 时,我们还建议在代理和目的地之间添加遥测管道。这允许你将 Fluentd 代理中的较大处理逻辑转移到下游。
配置差异
Fluentd 和 Fluent Bit 之间的配置语法有很大不同。虽然两者最近都开始支持 YAML,但大多数遗留的 Fluentd 配置仍然是用类似 XML 的领域特定配置语言编写的。
一些通用注意事项:
-
一次验证单个插件,然后扩展到单一路由(如系统日志到 OpenSearch) -
缓冲和线程设置在 Fluent Bit 中不那么重要 -
安全设置应该是相似的 -
有疑问时,联系 Fluent 社区有助于处理一些更细致的设置
自定义插件迁移
迁移时,重要的是确保 Fluent Bit 支持所有插件(源和目的地)。你还应该检查它是否支持特定的身份验证、授权或访问设置。这将是一个手动过程,可能需要一些时间。但这也将给你机会重新审视过去所做的关于特定数据格式或插件设置的决策。
自定义处理逻辑迁移
如果你在 Fluentd 中有标签、过滤器或其他处理逻辑,重要的是注意你要实现的功能。虽然看起来只需交换这些过滤器可能最容易,但你也应该寻找将这些逻辑直接迁移到 Fluent Bit 处理器的方法。如果你有大量的自定义 Ruby 代码,可以使用大型语言模型(LLM)帮助将其转换为合适的 Lua 代码。
分批迁移
你不需要一次性迁移所有功能。由于 Fluent Bit 轻量且高性能,你可以寻找让每个代理处理不同工作负载部分的方法。随着时间推移,你可以按照上述逻辑继续迁移,而无需担心日志收集中断。
结论
虽然从 Fluentd 迁移到 Fluent Bit 看起来是一项巨大的任务,但你有很多选择来决定如何入手以及在哪里集中精力以实现最大影响。当然,迁移也是重新评估某些逻辑以改进甚至引入新架构模式(如遥测管道)的好时机。
如果你需要指导或协助,请告诉我。我已经帮助许多人从 Fluentd 迁移到 Fluent Bit,甚至协助将某些部分现代化为遥测管道。
常见问题解答
为什么从 Fluentd 迁移到 Fluent Bit?
使用 Fluent Bit 你会获得:
-
相同资源下更高的性能 -
完整的 OpenTelemetry 支持(日志、指标和追踪),以及 Prometheus 指标支持 -
更简单的配置和路由到多个位置的能力 -
更高的自定义处理规则添加速度 -
集成监控,更好地理解性能和数据流
Fluentd 和 Fluent Bit 有什么区别?
Fluentd 的主要语言是 Ruby,最初设计是为了帮助用户将数据推送到大数据平台,如 Hadoop。而 Fluent Bit 是用 C 语言编写的,专注于小型系统(容器、嵌入式 Linux)中的超高性能。
Fluentd 和 Fluent Bit 能否协同工作?
是的,Fluent Bit 和 Fluentd 可以协同工作,这意味着可以使用 Fluentd 从更多源捕获数据,然后将数据引入 Fluent Bit 部署。Forward 插件有一个定义的标准,Fluent Bit 和 Fluentd 都使用该标准。一些外部产品也采用了这个协议,因此可以直接连接到 Fluent Bit。
文档来源:Fluentd to Fluent Bit A Migration Guide
原始作者:Anurag Gupta | Fluent Bit 维护者 | 现场架构师 | Chronosphere
原始发布日期:2025 年 10 月 1 日
本文由 AI 助手整理优化,欢迎关注、分享转载,请注明出处

