在 CentOS 上 Filebeat 没有日志输出,常见原因可以分成 配置问题、权限问题、采集路径问题、服务状态问题、输出目标问题 几类。下面按排查顺序给你一个实用清单。
systemctl status filebeat
或
ps -ef | grep filebeat
如果没运行:
systemctl start filebeat
systemctl enable filebeat
Filebeat 自己的日志默认在:
/var/log/filebeat/filebeat
或
journalctl -u filebeat -f
重点看有没有:
No files found for prospectorpermission deniedconnection refusedsetup.template failedfilebeat.yml 配置(最常见问题)filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
常见问题:
enabled: true*.log 但文件是 access.log.1)验证文件是否存在:
ls -l /var/log/nginx/*.log
必须至少有一个 output,例如:
output.elasticsearch:
hosts: ["http://localhost:9200"]
或
output.logstash:
hosts: ["localhost:5044"]
如果只配了 input 没配 output,Filebeat 不会报错但也不发日志。
Filebeat 默认以 filebeat 用户运行:
ps -o user= -p $(pgrep filebeat)
如果日志文件不可读:
ls -l /var/log/xxx.log
解决:
chmod 644 /var/log/xxx.log
或加入组:
usermod -aG adm filebeat
查看 SELinux:
getenforce
如果是 Enforcing,可能阻止读取日志:
临时验证:
setenforce 0
如果这样就有日志了,说明是 SELinux 问题。
解决方式(推荐):
setsebool -P filebeat_read_logs on
或添加策略(高级)。
Filebeat 只采集新增内容:
echo "test log" >> /var/log/xxx.log
Filebeat 记录读取位置:
/var/lib/filebeat/registry
如果位置异常,可清空(⚠ 会重新采集):
systemctl stop filebeat
rm -rf /var/lib/filebeat/registry
systemctl start filebeat
filebeat test config
filebeat test output
✅ input 路径不对
✅ 没开 enabled: true
✅ 没配 output
✅ SELinux 拦截
✅ 文件无读权限
✅ 日志文件没新内容
如果你愿意,可以把 filebeat.yml(脱敏) + journalctl 报错 发出来,我可以直接帮你定位是哪一条。