在 CentOS 上 Filebeat 收不到日志 是很常见的问题,通常不是“filebeat 本身坏了”,而是配置、权限、路径或服务状态某一环不对。下面按最常见原因 → 排查方法 → 解决办法给你一个系统排查清单。
systemctl status filebeat
或
ps -ef | grep filebeat
✅ 正常应看到 filebeat 进程
❌ 如果没跑:
systemctl start filebeat
systemctl enable filebeat
filebeat.yml 中的 pathsfilebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
常见错误:
/var/logs/xxx)✅ 验证:
ls -l /var/log/nginx/*.log
CentOS 默认 filebeat 用户是 filebeat
id filebeat
检查日志权限:
ls -l /var/log/xxx/xxx.log
如果看到:
-rw------- root root
❌ filebeat 读不了
✅ 解决方式(任选):
chmod 644 /var/log/xxx.log
# 或
setfacl -m u:filebeat:r /var/log/xxx.log
CentOS 默认开启 SELinux,经常导致 Filebeat 无法读取日志。
getenforce
如果是 Enforcing:
setenforce 0
再观察 filebeat 是否收到日志。
✅ 如果生效,说明是 SELinux 问题
setsebool -P filebeat_read_logs on
或修改日志文件 context:
semanage fcontext -a -t var_log_t "/var/log/xxx(/.*)?"
restorecon -Rv /var/log/xxx
journalctl -u filebeat -f
或
tail -f /var/log/filebeat/filebeat
常见错误:
Filebeat 有 registry 记录已读位置
如果你:
可能导致“以为没新内容”
systemctl stop filebeat
rm -rf /var/lib/filebeat/registry
systemctl start filebeat
filebeat.inputs:
- type: log
enabled: false # ❌ 这样收不到
必须是:
enabled: true
你可以贴出:
filebeat.yml(重点 paths + output)systemctl status filebeatjournalctl -u filebeat | tail -50我可以直接告诉你是哪一步卡住了。