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

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

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

in_tailpath 里写通配符即可监控整个目录:/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 让新发现的文件从头读(默认从尾部);
  4. 排除文件exclude_path ["/var/log/app/*.gz"] 排除压缩归档。

观测云对照

观测云 DataKit 的日志采集同样支持目录通配(含递归)、自动追踪轮转、offset 持久化,且在控制台可视化配置、实时查看采集速率;日志进观测云后可用 Pipeline 做结构化解析与脱敏,替代 Fluentd 的 filter 链。

常见问题(FAQ)

Q:目录里文件很多会撑爆吗? 每个文件一个 harvester,数千文件时注意文件描述符限制(ulimit -n)与内存。

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

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台