在 Debian 上部署 Filebeat 时,性能调优主要围绕采集效率、资源占用、网络吞吐和后端压力几个方面。下面按“常见且实用”的方式给你梳理。
harvester 相关参数filebeat.inputs:
- type: log
paths:
- /var/log/*.log
# 每个文件最大并发读取数
harvester_limit: 512
# 扫描新文件间隔
scan_frequency: 10s
# 忽略超过该大小的文件(可选)
ignore_older: 24h
harvester_limit:控制同时打开的文件数,太大吃 FD,太小采集慢scan_frequency:太快会增加 CPU,太慢有延迟output.elasticsearch:
hosts: ["http://es:9200"]
bulk_max_size: 2048
worker: 4
queue.mem:
events: 8192
flush.min_events: 2048
flush.timeout: 1s
说明:
bulk_max_size:一次发多少条(默认 50,太小)worker:并发发往 ES / Logstash 的线程数queue.mem:内存队列,防丢数据 & 抗突发✅ 一般建议:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "ecs.version"]
或关闭默认字段:
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
减少 CPU 和传输体积。
filestream(推荐)Filebeat 7.14+ 推荐:
filebeat.inputs:
- type: filestream
paths:
- /var/log/*.log
优点:
如果日志有 stack trace:
multiline.type: pattern
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
⚠️ 正则太复杂会拖慢性能。
ulimit -n
建议 ≥ 65535
修改:
/etc/security/limits.conf
filebeat soft nofile 65535
filebeat hard nofile 65535
默认:
/var/lib/filebeat/registry
systemctl edit filebeat
[Service]
TimeoutStartSec=0
Nice=0
IOSchedulingClass=best-effort
output.logstash:
hosts: ["logstash:5044"]
loadbalance: true
worker: 4
bulk_max_size: 2048
Logstash 端也要调:
output.elasticsearch:
compression_level: 3
减少网络带宽。
monitoring.enabled: true
monitoring.elasticsearch:
hosts: ["http://es:9200"]
重点看:
filebeat.harvesterfilebeat.eventsqueue.fill| 现象 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 正则复杂 / 文件太多 | 简化 multiline |
| 采集慢 | bulk 太小 | 提高 bulk_max_size |
| 丢日志 | 队列太小 | 增大 queue.mem |
| FD 耗尽 | 文件数多 | 提高 nofile |
| 延迟大 | scan 太慢 | 降低 scan_frequency |
filebeat.inputs:
- type: filestream
paths:
- /var/log/*.log
harvester_limit: 256
queue.mem:
events: 8192
flush.min_events: 2048
flush.timeout: 1s
output.elasticsearch:
hosts: ["http://es:9200"]
worker: 4
bulk_max_size: 2048
compression_level: 3
如果你愿意,可以告诉我:
我可以直接帮你给一份可落地配置。