Fluentd 输出到文件时如何做日志轮转(Rotation)?

Fluentd 的 out_file 通过 time slice 按时间切片输出(如 path /var/log/agg/app.%Y%m%d)自然实现按天轮转;配合 buffer timekey 控制粒度。本文给出配置与压缩归档建议。

最佳实践
Fluentd 输出到文件时如何做日志轮转(Rotation)?封面

Fluentd 的 out_file 本身不做传统意义的轮转,而是靠时间切片路径实现等效效果:buffer 按时间分块,输出路径带时间占位符,每小时/每天一组文件——天然轮转,不需要 logrotate。

配置示例

<match app.**>
  @type file
  path /var/log/fluentd-agg/app.%Y-%m-%d.%H
  append true
  <buffer time>
    timekey 1h                  # 每小时一个文件
    timekey_wait 10s
    timekey_use_utc true
    path /var/log/fluentd-buf/app
  </buffer>
  <format>
    @type json
  </format>
</match>

效果:app.2024-01-15.10.log、app.2024-01-15.11.log……按 UTC 小时切片,append true 将同一切片的 chunk 追加到同一文件;默认 append false 会产生带索引的分文件,默认后缀为 .log。改 timekey 1d + 路径 %Y-%m-%d 即按天轮转。

压缩与清理

  • 输出端直接压缩:在 <match> 的输出层设置 compress gzip;它与 buffer 压缩不是同一个层级;
  • 历史文件清理由 logrotate 或限定文件模式并先预览:find /var/log/fluentd-agg -maxdepth 1 -type f -name "app.*.log*" -mtime +30 -print,核对后再将 -print 换为 -delete 负责。

常见问题(FAQ)

Q:timekey_wait 是什么? 等待迟到日志的宽限——时间切片结束后等待 10s 再刷出;更晚到达的事件仍可能产生同一时间段的新 chunk,不能保证此后文件永不变化。

Q:能按大小轮转吗? out_file 不直接支持;按时间切片是官方推荐模式,chunk_limit_size 约束 buffer chunk,而非最终文件大小;append true 会继续追加,不能据此限制成品文件大小。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台