在 Ubuntu 上运行 Filebeat 时,如果你希望限制其 CPU、内存、I/O 等资源使用,可以从 系统级(systemd / cgroup) 和 Filebeat 自身配置 两个层面来做。下面按常用方式说明。
Ubuntu 上 Filebeat 通常以 systemd 服务运行(filebeat.service)。
systemctl status filebeat
sudo mkdir -p /etc/systemd/system/filebeat.service.d
sudo nano /etc/systemd/system/filebeat.service.d/limits.conf
示例内容(按需修改):
[Service]
# CPU 限制(相当于 50% 单核)
CPUQuota=50%
# 内存限制
MemoryLimit=512M
MemoryMax=512M
# IO 限制(写带宽,示例 10MB/s)
IOWriteBandwidthMax=/ 10M
# 进程优先级
Nice=10
sudo systemctl daemon-reload
sudo systemctl restart filebeat
systemctl show filebeat -p CPUQuotaPerSecUSec
systemctl show filebeat -p MemoryLimit
/etc/filebeat/filebeat.yml
queue.mem:
events: 2048 # 队列事件数
flush.min_events: 512
flush.timeout: 5s
output.elasticsearch:
bulk_max_size: 512 # 每次发送事件数
filebeat.inputs:
- type: log
scan_frequency: 10s # 默认 10s,可调大
harvester_buffer_size: 128KiB
filebeat.registry:
clean_inactive: 72h
max_procs: 2 # 限制 Go 运行时使用的 CPU 核心数
max_procs可显著限制 CPU 使用
exclude_files: ['.gz$', '.zip$']
ignore_older: 24h
如果你不是用 systemd,可以手动加 cgroup:
cgcreate -g cpu,memory:/filebeat
cgset -r cpu.cfs_quota_us=50000 filebeat
cgset -r memory.limit_in_bytes=536870912 filebeat
cgexec -g cpu,memory:/filebeat /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
top -p $(pgrep filebeat)
systemd-cgtop
CPUQuota=50% + MemoryMax=512Mmax_procs: 2 + bulk_max_size 限制ignore_older + exclude_files如果你能说明 CPU / 内存 / 磁盘 IO 哪方面最紧张,我可以给你更精准的配置示例。