如何用 Fluentd 监控(采集)整个目录的日志?

Fluentd 用 in_tail 配合通配符路径(/var/log/app/*.log)即可监控整个目录,含子目录用 ** 递归。本文给出配置示例、pos_file 作用、logrotate 轮转处理与多文件标签区分技巧。

最佳实践
如何用 Fluentd 监控(采集)整个目录的日志?封面

在 in_tail 的 path 里写通配符即可监控整个目录:/var/log/app/*.log;需要递归子目录用 /var/log/app/**/*.log。每个文件会作为独立的输入被持续追踪。

基本配置

<source>
  @type tail
  path /var/log/app/*.log
  pos_file /var/log/fluentd/app.pos
  tag app.*
  <parse>
    @type none
  </parse>
</source>
  • path 支持 *(单层)与 **(递归);
  • pos_file 记录每个文件的读取偏移——强烈建议配置且目录可写;不配置时重启可能跳过或重复数据,取决于读取策略;
  • tag app.* 中的 * 会把文件路径带入 tag,方便后续按文件分流。

关键细节

  1. 新文件发现:refresh_interval 60s 控制目录扫描频率,这是扫描间隔,不保证新文件严格在 1 分钟内完成发现与读取;
  2. 日志轮转:logrotate 轮转后,用 follow_inodes true 跟踪 inode 可减少轮转重复读取,仍需验证轮转方式和缓冲,不保证零丢失;
  3. 老文件:read_from_head true 控制启动时无位置记录文件的读取起点;自 Fluentd 1.14.3 起,运行中新发现的文件即使为 false 也从头读;
  4. 排除文件:exclude_path ["/var/log/app/*.gz"] 排除压缩归档。

常见问题(FAQ)

Q:目录里文件很多会撑爆吗? in_tail 会维护文件监视与读取状态(harvester 是 Filebeat 术语),数千文件时注意文件描述符限制(ulimit -n)与内存。

Q:能按文件名分到不同索引吗? 用 tag app.* 后在 match 里按 tag 后缀分流到不同输出。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台