Fluentd 版本演进全景解读:基于 CHANGELOG.md 从 v0.14 到 v1.20 的核心特性、安全修复与升级路线
2026/9/23 4:04:21 网站建设 项目流程
  • 日志分析
  • 可观测性
  • 后端

【免费下载链接】fluentd

Fluentd: Unified Logging Layer (project under CNCF)

项目地址:https://gitcode.com/gh_mirrors/fl/fluentd
点击查看免费下载

本文以仓库根目录的 CHANGELOG.md(共 3000+ 行)为唯一主体,逐版本梳理 Fluentd 从 v0.14(2016 年)到 v1.20(开发中)的演进脉络,覆盖 zstd 压缩、零停机重启、TLS 传输、服务发现、多 worker、缓冲可靠性等核心能力,并结合lib/fluent/plugin/下的源码实现与example/示例配置给出落地佐证。读完本文,你将能把 Fluentd 的每次版本升级与具体功能、配置参数、Bug 修复对应起来,直接用于升级评估、排障定位和插件选型。

一、如何读懂这份变更日志:结构与版本节奏

CHANGELOG.md 是 Fluentd 官方维护的逐版本变更记录,按主版本(# vX.Y)分组,每个版本内再按三类条目组织:

  • New feature / Enhancement:新增插件、新配置参数、性能优化;
  • Bug fix:行为修复,其中包含安全漏洞(CVE)修复;
  • Misc:CI 调整、依赖升级、重构与文档改动。

从版本节奏可以看出 Fluentd 的维护策略:

  • 双主线并存:例如 v1.16 系列横跨 2023-03 至 2025-09(v1.16.10),而 v1.17、v1.18、v1.19 陆续发布,说明旧分支会持续获得安全与稳定性修复,属于典型的多版本长期维护(LTS 式)模式;
  • 安全修复会同步回填:v1.14.2 修复的 CVE-2021-41186(parser_apache2的 ReDoS 漏洞)明确标注了受影响范围(v0.14.14 至 v1.14.1),并直接给出升级建议,这类条目是升级决策的第一手依据;
  • 破坏性变更会显式说明:如 v0.14 的@ROOT保留字、v1.18 内嵌 Ruby 在 Hash/Array 值中的行为变化,都会标注"incompatible / not backward compatible"并提供规避方式。

下文按时间与主题两条线索交叉展开,先讲最新主线,再回溯 v0.14 的奠基性改造。

二、最新主线 v1.19–v1.20:IPv6、zstd 压缩与安全加固

1. v1.20.0(TBD):http_server helper 的 IPv6 支持

v1.20.0 目前仅收录一条 Bug fix,但技术含量不低——修复http_serverhelper 在 IPv6 绑定地址下的 URI 构造问题:

  • 修复绑定::::1时抛出URI::InvalidURIError的问题;
  • 按 RFC 3986 为 IPv6 地址补上方括号(如http://[::]:24231);
  • 正确处理已带方括号的地址,避免二次加括号(double-bracketing)。

该修复影响所有使用 http_server helper 且绑定 IPv6 地址的插件(in_httpin_monitor_agent等)。相关实现的入口可参考 lib/fluent/plugin_helper/http_server/ 目录下的 app.rb、server.rb 等文件。

2. v1.19.3(2026-06-25):一批安全与健壮性修复

v1.19.3 是安全面高度集中的一次补丁版本:

插件/模块修复内容
out_http对动态 endpoint 增加严格主机名校验(strict host validation)
buffer / in_http对解压后的 payload 强制大小上限
in_monitor_agent默认隐藏 config、retry、debug 信息的可见性
output对 tag 施加严格的路径边界校验
storage_local修复读取非 ASCII 字符时的编码错误
parser_csv跳过空行与不可解析行
out_forward远端断开后不再复用已关闭的 keepalive socket
buffer路径包含[]时也能正确恢复 buffer
in_debug_agent默认只接受来自本机的连接

此外 Misc 部分提醒了 Windows 服务关闭超时缩短、默认timekey(1d)使用的告警、杀毒软件排除路径建议等运维细节。

3. v1.19.0(2025-07-30):zstd 压缩落地

v1.19.0 是本阶段最重要的功能版本,核心是zstd 压缩支持

  • buffercompress选项新增zstd取值;
  • out_filecompress选项新增zstd
  • out_forward:新增zstd(标注为 Experimental);
  • in_forward:支持接收zstd格式数据。

仓库中的压缩实现集中在 lib/fluent/plugin/compressable.rb,并在 lib/fluent/plugin/buffer.rb、lib/fluent/plugin/out_file.rb、lib/fluent/plugin/out_forward.rb 中贯通。结合 example/in_sample_with_compression.conf 可以看到压缩在端到端配置中的用法——该示例即为演示压缩数据的生成与转发链路。相比 gzip,zstd 在压缩率与吞吐之间提供了新的折中选择;out_forward标记 Experimental 说明其跨版本兼容性仍需在生产前验证。

同版本还引入了 buffer 的重试上限时 chunk 文件撤离(evacuate)机制(PR #4986)、out_http 的 TLS 1.3 支持、out_filesymlink_path_use_relative参数、<system>中的forced_stacktrace_level与内建配置文件支持。指标方面:输入指标默认开启、in_tail新增tracked_file_count、secondary 写入事件数与丢弃最旧 chunk 数均有对应 metrics。

值得注意的行为变更:in_forward默认启用skip_invalid_event不再处理损坏数据;in_http允许空 Origin 头通过 CORS 检查。

4. v1.19.1 / v1.19.2:YAML 数组解析与连接超时

  • v1.19.1:YAML 配置格式支持解析数组格式;
  • v1.19.2:out_forwardestablish_connection增加超时防止死循环;in_tail修复 glob 匹配到无读权限文件时的报错;plugin_helper/http_server修复 POST 请求 body 未关闭导致的 socket 泄漏;config 修复config_include_dir重复加载;并为 Ruby 4.0 补齐ostructwin32-registry等依赖。

三、v1.18(2024-11-29):零停机重启、with-source-only 与 out_buffer

v1.18.0 是运维能力大幅增强的版本,主要新增:

1. 非 Windows 平台的零停机重启(zero-downtime-restart)无需中断数据采集即可完成 Fluentd 进程重启,为滚动升级提供基础。

2.--with-source-only<system>with_source_only选项让 Fluentd 仅作为日志源运行、不承载输出处理,常与out_buffer配合使用。

3. 内置out_buffer插件可用于对事件做缓冲与重新打标(relabeling),把"缓冲"从传输手段独立为一种可编排的管道能力。

4. 配置语法:内嵌 Ruby 在 Hash/Array 值中生效例如key {"foo":"#{1 + 1}"}会解析为key {"foo":"2"}。变更日志明确提示该行为不向后兼容,若出现意外行为可用单引号包裹整个值来禁用,例如key '{"foo":"#{1 + 1}"}'

5. TLS 默认策略调整transport tls 默认使用SSL_VERIFY_NONE,并新增ensure_fips选项强制 FIPS 合规模式;plugin_helper/server的 transport section 新增receive_buffer_size

6. 其他filter_parser支持处理多条解析结果;in_http新增add_tag_prefix<system>logsection 新增path选项。修复方面包括 Windows 下--daemonNoMethodError--plugin-p)选项不再覆盖默认值等。

四、v1.16–v1.17:输入插件能力与缓冲可靠性

1. v1.17.1(2024-08-19):in_sample的 reuse_record

in_sample新增reuse_record参数:默认情况下插件会复制样本数据,以避免后续插件对样本做破坏性修改时相互影响;代价是生成大量样本时负载上升。设置为true可复用同一份数据、恢复旧性能——适用于下游 filter 只读的场景。

该参数在源码 lib/fluent/plugin/in_sample.rb 中的定义与描述完全一致:

desc "Reuse the sample data to reduce the load when sending large amounts of data. You can enable it if filter does not do destructive change" config_param :reuse_record, :bool, default: false

同版本in_exec新增encoding处理非 ASCII 字符,in_tail增加限流 metrics,in_sample的配套示例见 example/in_sample_blocks.conf。

2. v1.17.0(2024-04-30)

  • in_http将 CSP report 识别为 JSON 数据;
  • out_http支持连接复用(keep-alive)与AWS Signature Version 4 认证
  • in_tail扩展 glob 能力(方括号与单字符匹配);
  • 行为收紧:parser_json/parser_msgpack现在只接受HashHash数组,并保证返回Hash
  • Ruby 最低版本要求再次提高。

3. v1.16.x:输入侧加固

v1.16 系列修复密集且跨度长(v1.16.0 至 v1.16.10):

  • v1.16.0in_tcp新增send_keepalive_packet;buffer 支持备份损坏的 file chunk;flush_at_shutdown true恢复 buffer 时输出告警。
  • v1.16.1in_tcp新增message_length_limit丢弃超大输入;修复compress与已压缩 MessagePack 的冲突。
  • v1.16.2:集中修复in_tailfollow_inodes下的旋转(rotation)问题(新 watcher 误脱离、重复读取等);MessagePackFactory 重置本地 unpacker 防止损坏数据污染后续接收。
  • v1.16.4write_step_by_step中避免处理已丢弃 chunk,防止chunk bytes limit exceeds错误堆积 IOError。
  • v1.16.5:修复 v1.16.4 大消息超 chunk 上限时的 emit 错误。
  • v1.16.6 / v1.16.7:Windows 服务停止问题、--plugin选项修复。
  • v1.16.8:⚠️ 变更日志明确警告"This version has a critical bug about Windows Service. Do not use this version."(Windows 服务会意外停止),这是 CHANGELOG 中最值得关注的"禁用它"型条目。
  • v1.16.9:修复上述 bug,恢复 Windows Service 正常停止行为。

这类"版本级警告"条目说明:升级前务必通读目标版本及其相邻补丁的 Bug fix 小节,尤其是 Windows 用户。

五、v1.14–v1.15:指标、JIT 与 YAML 配置

1. v1.14.0(2021-08-30):指标系统与保留字

  • 新增系统配置enable_input_metricsenable_size_metrics(输入侧指标/大小指标),并配套--enable-input-metrics--enable-size-metrics命令行选项;由于 CPU 开销,默认关闭。
  • 新增保留字@ROOT用于获取根 router——不兼容变更,标签名不得再使用@ROOT
  • in_syslog新增send_keepalive_packetin_http新增cors_allow_credentials
  • 引入 metrics 插件机制,为第三方插件暴露指标埋下接口基础(参见 lib/fluent/plugin/metrics.rb 与 lib/fluent/plugin/metrics_local.rb)。

2. v1.14.2(2021-10-29):CVE-2021-41186 修复

这是 CHANGELOG 中的安全公告级条目parser_apache2存在 ReDoS 漏洞(受影响 v0.14.14–v1.14.1),特定格式的损坏 Apache 日志可导致拒绝服务。官方建议升级到 v1.14.2 或使用打过补丁的parser_apache2。同版本fluent-cat新增--event-time用于测试时指定事件时间。

3. v1.14.4–v1.14.6:运维细节

  • in_tail新增max_line_size跳过超长行(v1.14.4);
  • 新增--umask命令行参数,并修复--daemon下 umask 未被应用的问题(v1.14.6);
  • rpc_endpoint支持 IPv6;<system>支持restart_worker_interval设置 worker 重启间隔(v1.15.0);
  • 新增dump子命令到 fluent-ctl(v1.15.0);
  • YAML 配置格式正式支持(v1.15.0),对应实现见 lib/fluent/config/yaml_parser/ 目录;v1.15.2 新增系统配置enable_jit(Ruby JIT 开关);v1.15.3 支持 YAML 配置!include指令的 glob 匹配。

六、v1.12–v1.13:in_tail 与 syslog 解析深化

1. v1.13.0(2021-05-29):文件级日志限流与 HTTP GET

  • in_tail实现按文件的日志限流(log throttling),配合 v1.15.0 的 group 规则形成完整限流体系;
  • 服务发现 manager 的简化扩展接口;
  • in_http支持 HTTP GET 请求;
  • <system>支持日志轮转(log rotate)设置。

2. v1.12.x:follow_inode 与解析器增强

  • v1.12.0in_tail新增follow_inode,支持带通配符场景下的日志旋转跟随;Windows 用 win32 events 替代 Unix 信号。
  • v1.12.2out_copy新增ignore_if_prev_success;支持多种时间戳格式;formatter_ltsv可抑制输出中的分隔符。
  • v1.12.3 / v1.12.4:修复parser_csv/parser_syslogparser_type命名冲突、in_tail旋转处理失败等问题。
  • v1.13.1 / v1.13.2out_forward握手竞态修复(多线程共用 unpacker);fluent-plugin-generate支持生成 storage 插件;parser_json通过FLUENT_OJ_OPTION_*环境变量自定义 oj 选项。

syslog 方向的持续投入(RFC5424、octet-counting、多行支持等)从 v0.14.14 一直延续到 v1.11,最终固化在 lib/fluent/plugin/parser_syslog.rb 中,对应示例配置见 example/in_syslog.conf。

七、v1.8–v1.11:服务发现、http_server helper 与内置插件扩容

1. v1.8.0(2019-12-11):服务发现插件

  • 新增service discovery 插件out_forward开始使用;对应实现见 lib/fluent/plugin/service_discovery.rb、lib/fluent/plugin/sd_file.rb、lib/fluent/plugin/sd_srv.rb 与 lib/fluent/plugin/sd_static.rb,示例配置见 example/out_forward_sd.conf。
  • config 增加 strict mode,ruby 内嵌模式支持default/nil值。

2. v1.9.0(2020-01-22):轻量级配置热加载

  • 新的轻量 config reload 机制;
  • 放弃 Ruby 2.1/2.2/2.3 支持;
  • in_tail后续版本(v1.9.1–v1.9.3)新增path_delimiterpos_file_compaction_interval(pos 文件自动压缩)等参数。

3. v1.10–v1.11:解析与注入增强

  • v1.10.0:新增 SRV 记录服务发现(sd_srv);cert_verifierTLS 参数。
  • v1.11.0in_unix迁移到 v1 API;parser_syslog新增 RFC5424 parser。
  • v1.11.2in_dummy更名为in_sampledummy保留为别名,源码 lib/fluent/plugin/in_sample.rb 中两个注册名同时存在);filter/match 指令支持正则。
  • v1.11.3in_exec新增connect_mode读取 stderr;log 新增ignore_same_log_intervalparser_json性能优化。
  • v1.11.5:formatter 提供newline参数支持 CRLF。

4. v1.6–v1.7:内置插件扩容

  • v1.6.0:新增 http_server plugin helper,in_monitor_agent率先使用;--conf-encoding选项;connect_timeout参数。
  • v1.7.0:新增out_http内置插件file_single buffer 插件buf_file_single,对应 lib/fluent/plugin/buf_file_single.rb);buffer 例程性能大幅优化;msgpack packer/unpacker 缓存化。
  • v1.7.2in_tcp支持<security>限制访问。

八、v1.4–v1.7:TLS 传输与 keepalive 网络栈

从 v1.4 到 v1.7,Fluentd 的传输层围绕TLS 与连接复用持续加固:

  • v1.4.0:支持<worker N-M>语法(多进程区间写法);<secondary>retry_forever可协同工作;out_filesymlink_path支持占位符。
  • v1.4.1tls_client_private_key_passphrase标记为 secret;parser_regexp校验命名捕获组。
  • v1.5.0out_forward支持keepalivein_httpin_syslog通过 server helper 支持 TLS;in_forward新增tag/add_tag_prefix
  • v1.5.1–v1.5.2:修复 keepalive 下重复握手、socket 处理问题。
  • v1.6.1:支持 OpenSSL 支持的所有私钥类型(不仅 RSA)。
  • v1.7.1:Windows certstore 加载证书;parser_syslog增加 RFC3164 快速解析。
  • v1.7.3–v1.7.4in_syslogseverity_key替代priority_keyin_http新增use_204_response(v2 将默认开启)。

TLS 能力集中在 lib/fluent/tls.rb 与 lib/fluent/plugin_helper/cert_option.rb,证书生成工具为 lib/fluent/command/ca_generate.rb,对应示例见 example/in_forward_tls.conf、example/out_forward_tls.conf、example/in_forward_shared_key.conf。

九、v1.0–v1.3:1.0 稳定线与 Counter API

  • v1.0.0(2017-12-06):Fluentd 1.0 发布(CHANGELOG 中附有 CNCF 公告链接);out_copy<store>支持ignore_error;TLS transport 资源占用优化。
  • v1.1.0:config 支持hostnameworker_id快捷变量;record_accessor helper 支持嵌套字段删除;证书生成命令从 secure-forward 移植。
  • v1.1.1–v1.1.3in_debug_agent支持多 worker;buf_file跳过并删除损坏 chunk;queued_chunks_limit_size控制排队 chunk 数量;tag 占位符支持负索引。
  • v1.2.0全新 Counter API(对应 lib/fluent/counter/ 目录的 client/server/store 实现);output 为损坏 chunk 提供备份;filter_grep支持<and>/<or>子段;config 支持regexp类型。
  • v1.2.6:output 新增disable_chunk_backup
  • v1.3.0in_syslog支持 octet-counting 帧;queued_chunks_limit_size缺省时取flush_thread_count
  • v1.3.1out_forward证书参数名分离、verify_connection_at_startup
  • v1.3.2out_forward支持互信 TLS(mTLS)。

out_forward的完整参数形态可在 example/out_forward.conf 与 example/out_forward_heartbeat_none.conf 中查看,负载均衡与 ack 机制实现见 lib/fluent/plugin/out_forward/load_balancer.rb、lib/fluent/plugin/out_forward/ack_handler.rb。

十、v0.14:现代 Fluentd 的奠基版本

v0.14 是 CHANGELOG 中分量最重的一个主版本(v0.14.0 至 v0.14.25,2016-05 至 2017-11),它奠定了今天 Fluentd 的一切核心架构:

1. 全新插件 API重写 input/filter/output/buffer 插件接口,引入config_param/config_section声明式配置与 plugin registry(注册表)。今天的插件体系、模板生成器(fluent-plugin-generate,对应 templates/new_gem/)都源自这一改造。

2. 亚秒级事件时间(sub-second event time)Fluent::EventTime支持纳秒精度,相关类型定义见 lib/fluent/time.rb 与 test/test_event_time.rb。

3. Windows 支持与 supervisor 改进包括 Windows 服务(lib/fluent/winsvc.rb)、win32 events 替代信号、--run-worker等。

4. 多 worker 能力v0.14.12 起支持workers选项的多进程模型,后续 v1.4.0 扩展出<worker N-M>区间语法,示例见 example/worker_section.conf。

5. TLS transport 层由 server plugin helper 统一提供 TLS 支持,forward 输入/输出插件全面接入;v0.14.5 为 forward 协议加入认证/授权(shared key 与 user 认证,见 example/in_forward_users.conf、example/out_forward_shared_key.conf)。

6. 缓冲系统成型标准 chunk 格式、root_dir系统参数(v0.14.11)、buffer 数据压缩(v0.14.7)、chunk 拆分大事件流(v0.14.2)等机制,直接演化成今天的 lib/fluent/plugin/buffer.rb 与 lib/fluent/plugin/buffer/ 下的 chunk 实现族。

7. 兼容层为 v0.12 插件提供 Compatibility 层(lib/fluent/compat/ 目录),保证旧插件可平滑迁移。

十一、把 CHANGELOG 当作升级排障手册:实践建议

结合 CHANGELOG.md 的阅读经验,给出可直接复用的操作建议:

  1. 升级前清单:先在目标版本及其相邻 patch 的Bug fix小节查找你正在使用的插件名(in_tailout_forwardin_httpparser_*等),确认是否有针对性的修复;特别注意"do not use this version"级别的警告条目(如 v1.16.8)。
  2. 安全评估:检索 CVE 与 security 关键词。v1.14.2(ReDoS)、v1.19.3(动态 endpoint 主机名校验、解压大小上限、monitor 信息默认隐藏)都是安全相关升级的直接理由。
  3. 行为变更识别:关注 Enhancement 中的"changed to / now / deprecated"表述,例如in_forward默认启用skip_invalid_eventin_sample默认复制样本数据、TLS 默认SSL_VERIFY_NONEin_monitor_agent默认隐藏敏感信息——这些默认值变化可能在升级后改变管道行为。
  4. 参数溯源:CHANGELOG 提到的每个参数(reuse_recordfollow_inodemessage_length_limitcompress zstd等)都可以在 lib/fluent/plugin/ 对应插件源码中找到config_param定义,在 example/ 下找到示例用法,在 test/plugin/ 下找到测试用例,三者互证可以完整还原一个特性的设计意图。
  5. 平台差异:Windows 相关条目(服务停止、--daemon、非 ASCII 路径、certstore)在 CHANGELOG 中出现频率极高,Windows 部署者应把这些条目单独归档跟踪。

十二、结语

从 v0.14 的架构重构到 v1.20 的 IPv6 URI 修复,CHANGELOG.md 完整记录了 Fluentd 十年的演进轨迹:插件 API 的稳定、缓冲与转发可靠性、TLS 与认证的安全基线、指标与可观测性的内建化、多 worker 与零停机运维,以及 zstd 等新压缩算法的持续引入。它既是升级决策的依据,也是理解 lib/fluent/ 源码的最佳索引——每一条变更都能在源码、示例配置与测试中找到落点。对于正在维护 Fluentd 管道的团队,把本仓库的 CHANGELOG.md 纳入每次升级评审的必读材料,是最低成本、最高收益的稳定性投资。

  • 日志分析
  • 可观测性
  • 后端

【免费下载链接】fluentd

Fluentd: Unified Logging Layer (project under CNCF)

项目地址:https://gitcode.com/gh_mirrors/fl/fluentd
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询