- 日志分析
- 可观测性
- 后端
【免费下载链接】fluentd
Fluentd: Unified Logging Layer (project under CNCF)
本文以仓库根目录的 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_http、in_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 压缩支持:
buffer:compress选项新增zstd取值;out_file:compress选项新增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_file的symlink_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_forward的establish_connection增加超时防止死循环;in_tail修复 glob 匹配到无读权限文件时的报错;plugin_helper/http_server修复 POST 请求 body 未关闭导致的 socket 泄漏;config 修复config_include_dir重复加载;并为 Ruby 4.0 补齐ostruct、win32-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 下--daemon的NoMethodError、--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现在只接受Hash或Hash数组,并保证返回Hash; - Ruby 最低版本要求再次提高。
3. v1.16.x:输入侧加固
v1.16 系列修复密集且跨度长(v1.16.0 至 v1.16.10):
- v1.16.0:
in_tcp新增send_keepalive_packet;buffer 支持备份损坏的 file chunk;flush_at_shutdown true恢复 buffer 时输出告警。 - v1.16.1:
in_tcp新增message_length_limit丢弃超大输入;修复compress与已压缩 MessagePack 的冲突。 - v1.16.2:集中修复
in_tail在follow_inodes下的旋转(rotation)问题(新 watcher 误脱离、重复读取等);MessagePackFactory 重置本地 unpacker 防止损坏数据污染后续接收。 - v1.16.4:
write_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_metrics、enable_size_metrics(输入侧指标/大小指标),并配套--enable-input-metrics、--enable-size-metrics命令行选项;由于 CPU 开销,默认关闭。 - 新增保留字
@ROOT用于获取根 router——不兼容变更,标签名不得再使用@ROOT。 in_syslog新增send_keepalive_packet;in_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.0:
in_tail新增follow_inode,支持带通配符场景下的日志旋转跟随;Windows 用 win32 events 替代 Unix 信号。 - v1.12.2:
out_copy新增ignore_if_prev_success;支持多种时间戳格式;formatter_ltsv可抑制输出中的分隔符。 - v1.12.3 / v1.12.4:修复
parser_csv/parser_syslog的parser_type命名冲突、in_tail旋转处理失败等问题。 - v1.13.1 / v1.13.2:
out_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_delimiter、pos_file_compaction_interval(pos 文件自动压缩)等参数。
3. v1.10–v1.11:解析与注入增强
- v1.10.0:新增 SRV 记录服务发现(
sd_srv);cert_verifierTLS 参数。 - v1.11.0:
in_unix迁移到 v1 API;parser_syslog新增 RFC5424 parser。 - v1.11.2:
in_dummy更名为in_sample(dummy保留为别名,源码 lib/fluent/plugin/in_sample.rb 中两个注册名同时存在);filter/match 指令支持正则。 - v1.11.3:
in_exec新增connect_mode读取 stderr;log 新增ignore_same_log_interval;parser_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.2:
in_tcp支持<security>限制访问。
八、v1.4–v1.7:TLS 传输与 keepalive 网络栈
从 v1.4 到 v1.7,Fluentd 的传输层围绕TLS 与连接复用持续加固:
- v1.4.0:支持
<worker N-M>语法(多进程区间写法);<secondary>与retry_forever可协同工作;out_file的symlink_path支持占位符。 - v1.4.1:
tls_client_private_key_passphrase标记为 secret;parser_regexp校验命名捕获组。 - v1.5.0:
out_forward支持keepalive;in_http、in_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.4:
in_syslog用severity_key替代priority_key;in_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 支持
hostname、worker_id快捷变量;record_accessor helper 支持嵌套字段删除;证书生成命令从 secure-forward 移植。 - v1.1.1–v1.1.3:
in_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.0:
in_syslog支持 octet-counting 帧;queued_chunks_limit_size缺省时取flush_thread_count。 - v1.3.1:
out_forward证书参数名分离、verify_connection_at_startup。 - v1.3.2:
out_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 的阅读经验,给出可直接复用的操作建议:
- 升级前清单:先在目标版本及其相邻 patch 的
Bug fix小节查找你正在使用的插件名(in_tail、out_forward、in_http、parser_*等),确认是否有针对性的修复;特别注意"do not use this version"级别的警告条目(如 v1.16.8)。 - 安全评估:检索 CVE 与 security 关键词。v1.14.2(ReDoS)、v1.19.3(动态 endpoint 主机名校验、解压大小上限、monitor 信息默认隐藏)都是安全相关升级的直接理由。
- 行为变更识别:关注 Enhancement 中的"changed to / now / deprecated"表述,例如
in_forward默认启用skip_invalid_event、in_sample默认复制样本数据、TLS 默认SSL_VERIFY_NONE、in_monitor_agent默认隐藏敏感信息——这些默认值变化可能在升级后改变管道行为。 - 参数溯源:CHANGELOG 提到的每个参数(
reuse_record、follow_inode、message_length_limit、compress zstd等)都可以在 lib/fluent/plugin/ 对应插件源码中找到config_param定义,在 example/ 下找到示例用法,在 test/plugin/ 下找到测试用例,三者互证可以完整还原一个特性的设计意图。 - 平台差异: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)
相关推荐
Teleport 版本演进全解读:从 v19 到 v11 的核心特性与升级避坑指南
Teleport 版本演进全解读:从 v19 到 v11 的核心特性与升级避坑指南 Teleport 的 CHANGELOG.md https://link.g
网络安全认证鉴权运维后端读懂 Alamofire 的 CHANGELOG.md:从 5.0 架构重写到 5.12 并发修复的演进全景与升级指南
读懂 Alamofire 的 CHANGELOG.md:从 5.0 架构重写到 5.12 并发修复的演进全景与升级指南 本文以仓库根目录的 CHANGELOG.
网络通信后端clickhouse-operator 版本演进深度解读:从 0.6 到 0.20 的核心特性、安全加固与升级指南
clickhouse operator 版本演进深度解读:从 0.6 到 0.20 的核心特性、安全加固与升级指南 本文基于 Altinity clickhou
云原生容器编排后端运维可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考