Ubuntu系統解決Filebeat內存占用高問題的方法
harvester
配置控制單個文件的讀取資源,設置max_bytes
(如1MB)限制每個harvester處理的日志大??;啟用批量輸出,調整bulk_max_size
(如2048)提高每次發送的文檔數量,減少網絡請求次數。這些設置能有效降低單次處理的內存峰值。queue.type
設置為persisted
(磁盤隊列),避免內存隊列占用過多內存;調整queue.max_bytes
(如1GB)限制隊列最大內存使用,設置flush.min_events
(如2048)和flush.timeout
(如1s)控制隊列刷新頻率,平衡內存與數據可靠性。filestream
輸入類型(替代老舊的log
輸入),其采用更高效的文件讀取機制,能顯著降低內存占用。exclude_lines
(如排除DEBUG
日志)、include_lines
(如僅包含ERROR
日志)過濾無關日志;使用processors
中的drop_event
(如when.equals.log.level: INFO
)丟棄低價值事件,減少數據處理量。system
(系統日志)、http
(HTTP請求)等模塊,可在filebeat.yml
中設置enabled: false
,避免模塊初始化及后臺運行消耗內存。systemd
限制Filebeat的最大內存使用(避免進程崩潰)。編輯/etc/systemd/system/filebeat.service
,在[Service]
部分添加MemoryMax=2g
(最大2GB),然后執行systemctl daemon-reload
使配置生效。/etc/security/limits.conf
,添加* soft nofile 65536
和* hard nofile 65536
,提高單個進程可打開的文件數量。/etc/sysctl.conf
,設置vm.swappiness=1
(減少系統使用交換分區,優先使用物理內存)、net.core.somaxconn=65536
(增加TCP連接隊列長度),提升系統內存管理效率。logrotate
工具自動清理超過一定時間的日志文件(如保留7天),減少Filebeat需要讀取的日志量。示例配置:/var/log/*.log { daily rotate 7 compress missingok }
。metricbeat
監控Filebeat的memory_usage
(內存使用)、events_in
(接收事件數)、events_out
(發送事件數)等指標,識別內存瓶頸(如批量大小過大導致的堆積)。cron
設置定期重啟(如每周日凌晨3點):0 3 * * 0 systemctl restart filebeat
。