Fluentd 提示 "log unreadable, it is excluded" 怎么办?
该提示表示 Fluentd 读取日志文件失败,文件被暂时跳过。常见原因:权限不足、文件损坏、轮转冲突、路径通配符问题。本文给出逐项排查与修复方法。
这行提示的含义:Fluentd 打不开或读不了这个日志文件,本轮先跳过、下轮再试。按"权限 → 文件状态 → 轮转 → 路径"四步排查。
排查清单
1. 权限(最常见)
ls -l /path/to/file.log
namei -l /path/to/file.log # 检查每一级目录权限
Fluentd 运行用户(如 td-agent)需要对文件有读权限、对路径中每一级目录有执行权限:
# 只向采集用户开放读取,不对所有本地用户开放
setfacl -m u:td-agent:r /path/to/file.log
# 或把 fluentd 用户加入属组
usermod -aG appgroup td-agent
2. 文件状态:以采集进程用户确认文件存在且可读,并检查 ACL、SELinux/AppArmor 和挂载状态。损坏或编码问题应另查解析错误,不能仅凭 unreadable 权限警告推断。
3. 日志轮转冲突:logrotate 正在压缩/移动文件的瞬间撞上读取;确保 Fluentd 配置了 follow_inodes 或轮转后新文件权限正确(logrotate 的 create 模式要带上可读权限)。
4. 路径问题:path 通配符匹配到了不该读的文件(如压缩包、临时文件)——用 exclude_path 排除 *.gz、*.tmp。
常见问题(FAQ)
Q:跳过的文件之后会自动重试吗? 会——"would be examined next time" 即下一轮扫描再试。
Q:修复权限后需要重启吗? 修复文件权限后通常可在后续扫描重试;若修改了用户附加组,需重新启动相应进程才能取得新组身份。