要管理MongoDB日志,首先需修改其核心配置文件(通常位于/etc/mongod.conf
),調整日志輸出目標、路徑和詳細程度。關鍵配置項如下:
systemLog:
destination: file # 日志輸出到文件(可選:stderr 輸出到標準錯誤)
path: /var/log/mongodb/mongod.log # 日志文件路徑(需確保目錄存在且可寫)
logAppend: true # 追加模式(避免重啟時覆蓋舊日志)
verbosity: 0 # 日志級別(0=默認,1=信息,2=警告,3=錯誤,4=嚴重錯誤)
修改后,通過sudo systemctl restart mongod
重啟服務使配置生效。
使用Linux自帶的logrotate
工具自動管理日志輪轉,避免單個日志文件占用過多磁盤空間。步驟如下:
/etc/logrotate.d/mongodb
文件,添加以下配置:/var/log/mongodb/mongod.log {
daily # 每天輪轉一次(可選:weekly/monthly)
rotate 7 # 保留最近7份日志
compress # 壓縮舊日志(節省空間)
missingok # 若日志文件丟失,不報錯
notifempty # 日志為空時不輪轉
create 0640 mongodb mongodb # 新日志文件權限與所有者(需與mongod運行用戶一致)
sharedscripts # 所有日志輪轉完成后執行腳本
postrotate # 輪轉后發送信號通知mongod重新打開日志文件
if [ -f /var/run/mongodb.pid ]; then
kill -SIGUSR1 $(cat /var/run/mongodb.pid)
fi
endscript
}
該配置會每日切割日志,保留7天,并壓縮舊日志。tail -f /var/log/mongodb/mongod.log
命令,實時追蹤日志輸出(如查詢、連接等事件)。grep
命令提取關鍵信息,例如查看錯誤日志:grep "ERROR" /var/log/mongodb/mongod.log
。awk
統計錯誤日志數量:awk '/ERROR/{count++} END{print count}' /var/log/mongodb/mongod.log
。若需記錄執行時間超過閾值的查詢(用于性能分析),需啟用操作分析(Operation Profiling):
operationProfiling:
mode: slowOp # 模式:slowOp(僅記錄慢查詢)或 all(記錄所有查詢,生產環境慎用)
slowOpThresholdMs: 100 # 慢查詢閾值(單位:毫秒,默認100ms)
啟用后,慢查詢日志會寫入mongod.log
,可通過db.adminCommand({ getLog: "slowops" })
命令查看。
若需滿足安全合規要求(如記錄所有數據庫操作),可啟用審計日志:
security:
authorization: enabled # 需先開啟權限控制
auditLog:
destination: file # 審計日志輸出到文件
format: JSON # 日志格式(JSON/CSV)
path: /var/log/mongodb/audit.json # 審計日志路徑
filter: '{ "severity": { "$gte": 1 } }' # 過濾條件(如僅記錄嚴重及以上級別)
啟用后,所有數據庫操作(如查詢、插入、更新)都會被記錄到audit.json
中。
rsync
命令:rsync -av /var/log/mongodb/mongod.log /backup/mongodb/
rsync -av /var/log/mongodb/audit.json /backup/mongodb/
chown
和chmod
命令限制日志文件的訪問權限,確保僅授權用戶(如mongodb
用戶、adm
組)能查看:sudo chown mongodb:mongodb /var/log/mongodb/mongod.log
sudo chmod 0640 /var/log/mongodb/mongod.log
以上步驟覆蓋了Linux環境下MongoDB日志管理的核心需求,包括配置、輪轉、分析、安全及備份,可根據實際場景調整參數(如日志級別、輪轉周期、慢查詢閾值)。