Fluentd 输出到文件时如何做日志轮转(Rotation)?
Fluentd 的 out_file 通过 time slice 按时间切片输出(如 path /var/log/agg/app.%Y%m%d.log)自然实现按天轮转;配合 buffer timekey 控制粒度。本文给出配置与压缩归档建议。
Fluentd 的 out_file 本身不做传统意义的轮转,而是靠时间切片路径实现等效效果:buffer 按时间分块,输出路径带时间占位符,每小时/每天一个文件——天然轮转,不需要 logrotate。
配置示例
<match app.**>
@type file
path /var/log/fluentd-agg/app.%Y-%m-%d.%H.log
<buffer time>
timekey 1h # 每小时一个文件
timekey_wait 10s
path /var/log/fluentd-buf/app
</buffer>
<format>
@type json
</format>
</match>
效果:app.2024-01-15.10.log、app.2024-01-15.11.log……按小时切片。改 timekey 1d + 路径 %Y-%m-%d 即按天轮转。
压缩与清理
- 输出端直接压缩:
<format>换out_file支持的 gzip 选项(或用compress gzip于 buffer); - 历史文件清理由 logrotate 或简单 cron
find /var/log/fluentd-agg -mtime +30 -delete负责。
观测云对照
日志若最终要检索分析,直接发观测云省去本地轮转管理:DataKit 上报后按存储策略自动管理生命周期。
常见问题(FAQ)
Q:timekey_wait 是什么? 等待迟到日志的宽限——时间块关闭前多等 10s 再写文件。
Q:能按大小轮转吗? out_file 不直接支持;按时间切片是官方推荐模式,大小控制用 buffer chunk_limit_size 间接影响。