Filebeat 采集不到数据,通常不是单一原因,而是输入配置、路径、权限、输出或状态文件等某一环节出了问题。下面按最常见 → 较少见的顺序给出排查清单,基本能覆盖 90% 的场景。
ps -ef | grep filebeat
# 或
systemctl status filebeat
如果没运行,当然采集不到。
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
常见错误:
/var/log/nginx/~ 或相对路径(不建议)✅ 验证路径是否存在:
ls /var/log/nginx/*.log
Filebeat 只采集新增内容(类似 tail -f)
echo "test log" >> /var/log/nginx/access.log
如果你只是查看旧文件,而没有新写入,Filebeat 默认不会重新采集。
filebeat -e -d "*"
重点看有没有:
harvester startedNo files found for pathsPermission deniedlogging.level: debug
logging.to_files: true
日志位置:
/var/log/filebeat/
enabled: true # 必须是 true
正确写法:
filebeat.inputs:
- type: log
❌ 错误示例:
- input_type: log # 已废弃
exclude_files: ['.gz$']
include_lines: ['ERROR']
✅ 调试建议:
ls -l /var/log/nginx/access.log
如果 Filebeat 以 filebeat 用户运行:
sudo -u filebeat cat /var/log/nginx/access.log
✅ 解决方案:
chmod 644 /var/log/nginx/*.log
或
chown filebeat:filebeat /var/log/nginx
Filebeat 用 registry 记录采集位置:
/var/lib/filebeat/registry/
✅ 清空 registry(测试环境):
systemctl stop filebeat
rm -rf /var/lib/filebeat/registry
systemctl start filebeat
⚠️ 生产环境慎用
output.elasticsearch:
hosts: ["http://localhost:9200"]
或
output.logstash:
hosts: ["localhost:5044"]
curl http://localhost:9200
Elasticsearch 侧:
volumeMounts:
- mountPath: /var/log/nginx
✅ 宿主机路径是否一致?
容器日志在:
/var/log/pods/*
✅ 记得用:
paths:
- /var/log/pods/*/*.log
✅ Filebeat 正在运行
✅ paths 有真实文件
✅ 文件有新内容
✅ enabled: true
✅ 权限正常
✅ registry 没卡死
✅ 输出地址可达
✅ 调试日志无报错
你可以直接贴出:
filebeat.yml 的 filebeat.inputs 和 output 部分我可以直接帮你指出是哪一行导致采集不到。