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)监控资源占用,确保限制有效。