阅读量:4
Debian系统中MongoDB日志管理技巧
1. 配置日志路径与级别
MongoDB的日志配置通过/etc/mongod.conf文件完成,核心参数包括:
- 日志路径:设置
systemLog.path为具体文件路径(如/var/log/mongodb/mongod.log),指定日志存储位置; - 日志追加:
systemLog.logAppend设为true,确保MongoDB重启后日志追加到现有文件,而非覆盖; - 日志级别:
systemLog.verbosity控制详细程度(0-5级,0仅记录警告/错误,5记录所有操作细节),默认为0(仅关键信息)。
修改配置后,需重启MongoDB服务使更改生效:sudo systemctl restart mongod。
2. 日志轮转设置(避免日志膨胀)
使用logrotate工具实现日志自动轮转,步骤如下:
- 安装logrotate(若未安装):
sudo apt-get install logrotate; - 创建MongoDB专用配置文件:
sudo nano /etc/logrotate.d/mongodb,添加以下内容:
该配置确保日志每日切割、保留7天、压缩存储,并通过/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 }SIGUSR1信号通知MongoDB进程切换至新日志文件。
3. 日志查看与分析
- 基础查看:使用
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'),便于快速定位问题。
4. 手动触发日志轮转
无需等待自动轮转时,可通过MongoDB Shell手动执行:
use admin
db.runCommand({ logRotate: 1 })
该命令会立即切割当前日志文件,生成新的mongod.log,并自动压缩旧日志。
5. 日志归档与清理
- 自动归档脚本:编写Shell脚本定期将当前日志移动至归档目录(如
/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}") - 清理旧日志:在归档脚本中添加逻辑,删除超过30天的归档日志(如
os.remove(file_path)),避免磁盘空间耗尽。