如何排查 Logstash File 输入插件不读文件的问题?

Logstash file 插件不采集日志?按本文清单排查:开启 debug 日志、检查路径权限、处理 sincedb 偏移文件、确认 start_position,并了解观测云 DataKit 更省心的替代方案。

最佳实践
如何排查 Logstash File 输入插件不读文件的问题?封面

排查主线:先用 --log.level debug 看插件到底在做什么,然后依次检查四件事——文件路径是否正确、Logstash 进程是否有读权限、sincedb 偏移文件是否过期、start_position 是否符合预期。这些是常见排查方向,不能用固定比例保证覆盖。

1. 开启 debug 日志

bin/logstash --log.level debug

debug 输出会显示 file 插件发现的文件、读取进度等信息,是定位问题的第一手资料。

2. 检查路径与权限

ls -l /path/to/your/log/file.log

确认配置里的 path 拼写无误、通配符能匹配到文件,并且 Logstash 运行用户对文件有读权限、对各父目录有搜索/执行权限。

3. 处理 sincedb 文件

file 插件通过 sincedb 文件记录每个文件的读取偏移。tail 模式检测到截断时会调整读取位置,偏移大于文件大小不等于永远无法读取;需结合文件身份、轮转和 sincedb 状态判断。排查办法:

  • 测试时设置 sincedb_path => "/dev/null",不保留跨重启的状态,但当前进程仍维护偏移,首次从头还需 start_position beginning;
  • 不要例行删除全局 sincedb;如需重放,先隔离测试输入、备份状态并评估重复数据。

4. 检查 start_position

file {
  path => "/path/to/your/log/file.log"
  start_position => "beginning"
}

start_position 默认值是 end(只读新增内容),对已有历史内容的文件会表现为"什么都不采"。它只影响没有已知 sincedb 位置的首次读取;已有状态时仅改为 beginning 不会重放。

常见问题(FAQ)

Q:sincedb 文件在哪?
A:默认在 Logstash 的 data 目录(path.data)下的 plugins/inputs/file/ 里,文件名以 .sincedb_ 开头;也可用 sincedb_path 显式指定。

Q:日志轮转后 Logstash 还在读旧文件?
A:file 插件按 inode 跟踪文件。file_completed_action 用于 read 模式,不是通用 tail 轮转开关;close_older/ignore_older 也不能替代正确的路径与轮转模式设置,需用实际轮转样本验证。

Q:通配符路径能递归吗?
A:可以,用 ** 匹配多级目录,如 /var/log/**/*.log。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台