Debian系统中MongoDB日志管理技巧
MongoDB的日志配置通过/etc/mongod.conf文件完成,核心参数包括:
systemLog.path为具体文件路径(如/var/log/mongodb/mongod.log),指定日志存储位置;systemLog.logAppend设为true,确保MongoDB重启后日志追加到现有文件,而非覆盖;systemLog.verbosity控制详细程度(0-5级,0仅记录警告/错误,5记录所有操作细节),默认为0(仅关键信息)。sudo systemctl restart mongod。使用logrotate工具实现日志自动轮转,步骤如下:
sudo apt-get install logrotate;sudo nano /etc/logrotate.d/mongodb,添加以下内容:/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(gzip)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
create 0640 mongodb adm # 新日志文件权限(属主mongodb,属组adm)
postrotate # 轮转后执行的命令
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
endscript
}
该配置确保日志每日切割、保留7天、压缩存储,并通过SIGUSR1信号通知MongoDB进程切换至新日志文件。tail命令实时查看最新日志(如sudo tail -f /var/log/mongodb/mongod.log);grep筛选特定关键字(如错误信息sudo grep "error" /var/log/mongodb/mongod.log);jq工具解析JSON格式日志(如提取msg字段sudo cat /var/log/mongodb/mongod.log | jq '.msg'),便于快速定位问题。无需等待自动轮转时,可通过MongoDB Shell手动执行:
use admin
db.runCommand({ logRotate: 1 })
该命令会立即切割当前日志文件,生成新的mongod.log,并自动压缩旧日志。
/var/log/mongodb/archive/),并添加时间戳(如mongod_2025-11-01.log),示例代码:import os
import shutil
from datetime import datetime
LOG_DIR = '/var/log/mongodb/'
ARCHIVE_DIR = '/var/log/mongodb/archive/'
LOG_FILE = os.path.join(LOG_DIR, 'mongod.log')
if not os.path.exists(ARCHIVE_DIR):
os.makedirs(ARCHIVE_DIR)
if os.path.exists(LOG_FILE):
today = datetime.now().strftime('%Y-%m-%d')
archive_file = os.path.join(ARCHIVE_DIR, f'mongod_{today}.log')
shutil.move(LOG_FILE, archive_file)
print(f"日志已归档至 {archive_file}")
os.remove(file_path)),避免磁盘空间耗尽。