在 CentOS 上 Filebeat 丢日志 是常见问题,通常不是 Filebeat 本身“坏掉”,而是配置、系统资源或采集方式不匹配导致的。下面按最常见原因 → 排查方式 → 解决办法给你系统总结。
现象
logrotate 重命名 / 删除典型场景
app.log → app.log.1
解决
logrotate 的 copytruncate 或filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
close_inactive: 5m
clean_inactive: 72h
ignore_older: 24h
✅ 推荐:不要依赖 inode,使用通配路径 + close_renamed
现象
解决
scan_frequency: 1s
或避免采集极短生命周期文件。
位置
/var/lib/filebeat/registry/
问题
排查
ls -l /var/lib/filebeat/registry
解决
chown -R filebeat:filebeat /var/lib/filebeat
现象
排查
filebeat test output
journalctl -u filebeat
解决
queue.mem:
events: 4096
flush.min_events: 512
queue.disk:
path: /var/lib/filebeat/diskqueue
max_size: 10GB
CentOS 特有坑
现象
排查
getenforce
ls -Z /var/log/app/
解决
setsebool -P filebeat_read_logs on
或临时测试:
setenforce 0
现象
解决
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
问题
排查
cat /proc/sys/fs/file-max
ulimit -n
解决
max_procs: 4
# 1. 看日志
journalctl -u filebeat -f
# 2. 测试配置
filebeat test config
filebeat test output
# 3. 看 registry
ls -l /var/lib/filebeat/registry
# 4. 看文件权限
ls -l /var/log/xxx
# 5. 看是否 SELinux
getenforce
你可以贴出:
filebeat.yml 相关配置我可以直接帮你定位是哪一类丢日志,并给最小改动方案。