Filebeat在Ubuntu上的日志輪轉策略
Filebeat本身不直接處理日志文件的輪轉(如分割、壓縮),其設計定位是高效收集、轉發日志,日志輪轉通常由操作系統工具(如logrotate
)或系統日志服務(如rsyslog
/syslog-ng
)完成。以下是Ubuntu系統上配置Filebeat日志輪轉的常見方法及詳細步驟:
logrotate
是Ubuntu系統自帶的日志管理工具,支持按時間/大小輪轉、壓縮、刪除舊日志等功能,與Filebeat配合可實現完善的日志生命周期管理。
Ubuntu系統通常預裝logrotate
,可通過以下命令確認:
dpkg -l | grep logrotate
若未安裝,執行:
sudo apt update && sudo apt install logrotate
在/etc/logrotate.d/
目錄下創建filebeat
配置文件(如/etc/logrotate.d/filebeat
),內容如下:
/var/log/filebeat/*.log {
daily # 每天輪轉一次(可選:weekly/monthly)
missingok # 若日志文件不存在,不報錯
rotate 7 # 保留最近7個輪轉文件(可根據存儲空間調整)
compress # 使用gzip壓縮舊日志(節省空間)
delaycompress # 延遲壓縮(如第8個文件才壓縮第1個,避免壓縮當天日志)
notifempty # 若日志為空,不進行輪轉
create 640 root adm # 輪轉后創建新文件,權限640,屬主root,屬組adm
sharedscripts # 所有日志輪轉完成后統一執行postrotate腳本
postrotate # 輪轉后通知Filebeat重新打開日志文件(避免丟失日志)
if [ -f /var/run/filebeat/filebeat.pid ]; then
kill -USR1 $(cat /var/run/filebeat/filebeat.pid)
fi
endscript
}
配置說明:
daily
:輪轉頻率(可根據需求改為weekly
/monthly
);rotate 7
:保留7個舊日志文件(避免無限增長);compress
+ delaycompress
:平衡壓縮效率與日志可用性;postrotate
:通過kill -USR1
向Filebeat進程發送信號,使其釋放舊日志文件的句柄,確保后續日志能正常寫入新文件。手動執行以下命令,驗證配置是否正確:
sudo logrotate -vf /etc/logrotate.d/filebeat
-v
:顯示詳細執行過程;-f
:強制立即輪轉(而非等待定時任務)。Ubuntu的logrotate
默認由cron.daily
每日執行(路徑:/etc/cron.daily/logrotate
),無需額外配置??赏ㄟ^以下命令查看cron任務:
cat /etc/cron.daily/logrotate
確認包含logrotate /etc/logrotate.conf
語句(/etc/logrotate.conf
是logrotate的主配置文件,會加載/etc/logrotate.d/
下的子配置)。
若需直接控制Filebeat自身日志(如/var/log/filebeat/filebeat.log
)的輪轉,可通過修改Filebeat配置文件(/etc/filebeat/filebeat.yml
)實現,但不推薦用于收集的外部日志(僅適用于Filebeat自身日志)。
在filebeat.yml
中添加logging.file
部分,示例如下:
logging.level: info # 日志級別(info/debug/warning/error)
logging.to_files: true # 啟用文件日志(默認true)
logging.files:
path: /var/log/filebeat # 日志文件路徑
name: filebeat.log # 日志文件名
keepfiles: 7 # 保留最近7個日志文件
permissions: "640" # 文件權限
rotation.period: 24h # 輪轉周期(24小時)
rotation.max_size: 100MB # 單個日志文件最大大?。蛇x,觸發輪轉的條件之一)
說明:
/var/log/syslog
)的輪轉。修改配置后,重啟Filebeat使生效:
sudo systemctl restart filebeat
若系統使用systemd
(Ubuntu 16.04及以上默認使用),可通過journalctl
集中管理Filebeat日志,無需單獨配置輪轉。但需調整Filebeat的服務配置,將日志輸出到journald
:
sudo mkdir -p /etc/systemd/system/filebeat.service.d/
sudo nano /etc/systemd/system/filebeat.service.d/override.conf
添加以下內容:
[Service]
StandardOutput=journal+console
StandardError=journal+console
SyslogIdentifier=filebeat
保存后,重新加載systemd配置并重啟Filebeat:
sudo systemctl daemon-reload
sudo systemctl restart filebeat
此時,Filebeat日志可通過journalctl
查看:
journalctl -u filebeat -f # 實時查看Filebeat日志
/var/log/filebeat/
目錄存在,且Filebeat進程有權限寫入(通常屬主為root
,屬組為adm
);logrotate
配置中的paths
(如/var/log/filebeat/*.log
)需與Filebeat配置中的filebeat.inputs.paths
一致,避免漏輪轉;daily
或weekly
);