在 CentOS 上运行的 Filebeat 限流,通常从 采集速率、输出速率、系统资源 三个层面来做。下面按常见场景给你说明。
在 filebeat.yml 中配置:
output.elasticsearch:
hosts: ["http://localhost:9200"]
# 每秒最多发送 10 MB
bulk_max_size: 50
worker: 1
# 限流(bytes/sec)
# 注意:Filebeat 7.x 后使用 backoff
更直接的方式是限制 事件发送速率:
queue.mem:
events: 4096
flush.min_events: 1024
flush.timeout: 5s
如果你使用的是 Logstash 输出:
output.logstash:
hosts: ["localhost:5044"]
worker: 1
bulk_max_size: 50
Filebeat 原生不支持直接读取限速,但可以通过采集频率间接控制:
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
scan_frequency: 10s # 默认 10s,可调大
harvester_buffer_size: 16384
编辑 Filebeat 的 systemd 配置:
systemctl edit filebeat
添加:
[Service]
CPUQuota=20%
IOReadBandwidthMax=/var/log 5M
然后:
systemctl daemon-reload
systemctl restart filebeat
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
只影响 Filebeat 发往 ES/Logstash 的流量。
processors:
- drop_event:
when:
regexp:
message: "healthcheck"
或:
- sample:
rate: 10 # 只保留 10%
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
scan_frequency: 30s
queue.mem:
events: 2048
flush.timeout: 10s
output.elasticsearch:
hosts: ["http://es:9200"]
worker: 1
bulk_max_size: 20
| 方式 | 适用场景 |
|---|---|
| bulk_max_size / worker | 输出限流(最常用) |
| scan_frequency | 降低采集频率 |
| systemd CPUQuota | 限制 CPU |
| tc | 网络限流 |
| sample / drop | 减少数据量 |
如果你是 Filebeat → Logstash / ES / Kafka,可以告诉我具体架构,我可以给你更精确的限流配置。