在 CentOS 上部署 Filebeat 出现“丢数据”的原因,通常不是 Filebeat 本身 bug,而是配置、系统资源、下游(Elasticsearch/Logstash/Kafka)或文件采集机制导致的。下面按常见原因 → 表现 → 解决办法系统说明。
现象
logrotate 重命名 / 删除原因
close_inactive / close_timeout 设置不合理copytruncate 或立即 rm解决
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
close_inactive: 1m
clean_removed: false
logrotate 建议:
copytruncate
notifempty
现象
原因
解决
kill -9systemctl stop filebeat
registry 路径:
/var/lib/filebeat/registry
常见下游
表现
查看
journalctl -u filebeat -f
解决
queue.mem:
events: 4096
flush.min_events: 512
ignore_older: 24h
超过时间的文件直接跳过。
解决
如 Java stacktrace:
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
否则异常日志被当新事件,容易误判。
exclude_files: ['.gz$']
可能把正在写的文件排除。
现象
解决
/var/lib/docker/containers/*/*.log
container inputulimit -n
默认可能只有 1024
解决
/etc/security/limits.conf
filebeat soft nofile 65535
filebeat hard nofile 65535
/var/lib/filebeat 满解决
df -h
filebeat test output
cat /var/lib/filebeat/registry/filebeat/log.json | jq
logging.level: debug
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
ignore_older: 12h
close_inactive: 5m
clean_removed: false
queue.mem:
events: 8192
output.elasticsearch:
hosts: ["http://es:9200"]
CentOS 上 Filebeat “丢数据”90% 不是bug,而是:文件轮转 + 配置不当 + 下游阻塞。
如果你愿意,可以贴:
filebeat.yml我可以帮你精确指出是哪一条在丢数据。