Ubuntu默認使用systemd管理服務,可通過自定義service單元文件直接限制Filebeat的CPU和內存使用。
/lib/systemd/system/filebeat.service或/etc/systemd/system/filebeat.service)。filebeat.service.d.conf(如/etc/systemd/system/filebeat.service.d/conf)。[Service]
CPUQuota=50% # 限制CPU使用率為50%
MemoryLimit=512M # 限制內存使用為512MB
sudo systemctl daemon-reload
sudo systemctl restart filebeat
cgroups是Linux內核原生資源管理工具,可實現更細粒度的CPU、內存限制。
sudo apt-get update && sudo apt-get install cgroup-tools
sudo cgcreate -g cpu,memory:/filebeat
echo 25000 | sudo tee /sys/fs/cgroup/cpu/filebeat/cpu.cfs_quota_us # 25% of 100000us (1核=100000us)
echo 100000 | sudo tee /sys/fs/cgroup/cpu/filebeat/cpu.cfs_period_us # 1核=100000us
echo 536870912 | sudo tee /sys/fs/cgroup/memory/filebeat/memory.limit_in_bytes # 512MB=536870912字節
pgrep filebeat
echo <PID> | sudo tee /sys/fs/cgroup/cpu/filebeat/tasks
echo <PID> | sudo tee /sys/fs/cgroup/memory/filebeat/tasks
通過修改filebeat.yml配置文件,減少Filebeat對資源的消耗:
harvester_limit: 512 # 限制同時運行的harvester數量(默認無限制)
queue.type: persisted # 使用持久化隊列(避免內存溢出)
queue.mem.events: 2048 # 內存隊列最大事件數(默認4096,根據內存調整)
queue.mem.flush.min_events: 1024 # 觸發批量發送的最小事件數
queue.mem.flush.timeout: 1s # 批量發送超時時間
output.elasticsearch:
bulk_max_size: 512 # 每次批量發送的最大文檔數(默認50,根據網絡調整)
compression: true # 啟用壓縮(減少網絡傳輸量)
exclude_lines或include_lines過濾無關日志,減少處理量:filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
exclude_lines: ["DEBUG", "TRACE"] # 排除DEBUG和TRACE級別日志
processors配置以減少CPU消耗。top、htop或Filebeat的/status接口(需開啟monitoring)監控資源占用,確保限制有效。