温馨提示×

centos filebeat怎么限流

小樊
41
2026-09-15 01:39:53
栏目: 智能运维

在 CentOS 上运行的 Filebeat 限流,通常从 采集速率、输出速率、系统资源 三个层面来做。下面按常见场景给你说明。


一、Filebeat 自身限流(推荐)

1️⃣ 限制输出速率(最常用)

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

2️⃣ 限制文件读取速率(Filebeat 7+)

Filebeat 原生不支持直接读取限速,但可以通过采集频率间接控制:

filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
  scan_frequency: 10s   # 默认 10s,可调大
  harvester_buffer_size: 16384

二、使用 Systemd 限制资源(CentOS 7/8)

1️⃣ 限制 CPU / IO

编辑 Filebeat 的 systemd 配置:

systemctl edit filebeat

添加:

[Service]
CPUQuota=20%
IOReadBandwidthMax=/var/log 5M

然后:

systemctl daemon-reload
systemctl restart filebeat

三、使用 tc / cgroups 做网络限流(进阶)

1️⃣ 网络出口限速(例如 1 Mbps)

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,可以告诉我具体架构,我可以给你更精确的限流配置。

0