1. 配置日志路径与级别
在Debian系统中,MongoDB的日志配置主要通过/etc/mongod.conf文件完成。关键参数包括:
systemLog.path设置(默认为/var/log/mongodb/mongod.log),确保MongoDB进程对该路径有写入权限;systemLog.logAppend设为true,避免服务重启时覆盖旧日志;systemLog.verbosity控制详细程度(0-5级,0为最少日志,5为最详细),默认值为0(仅记录错误和警告)。sudo systemctl restart mongodb。2. 使用logrotate实现日志轮转
为防止日志文件过大占用磁盘空间,需通过logrotate工具定期轮转、压缩和归档日志。操作步骤如下:
sudo apt-get install logrotate;/etc/logrotate.d/mongodb,添加以下规则(可根据需求调整):/var/log/mongodb/mongod.log {
daily # 每天轮转(也可改为size 500M,达到500MB时轮转)
rotate 7 # 保留最近7个轮转文件
compress # 使用gzip压缩旧日志(节省空间)
missingok # 若日志文件丢失,不报错
notifempty # 若日志为空,不轮转
create 0640 mongodb mongodb # 创建新日志文件,权限0640,属主/属组为mongodb
postrotate # 轮转后执行的脚本
if [ -f /var/run/mongodb.pid ]; then
kill -SIGUSR1 `cat /var/run/mongodb.pid` # 发送信号通知mongod重新打开日志文件
fi
endscript
}
sudo logrotate -f /etc/logrotate.d/mongodb,验证日志是否按规则轮转。3. 手动管理日志的常用命令
tail -f /var/log/mongodb/mongod.log,实时跟踪最新日志输出;grep命令筛选特定内容(如错误日志),例如grep "error" /var/log/mongodb/mongod.log;jq工具解析(需安装:sudo apt-get install jq),例如cat /var/log/mongodb/mongod.log | jq '.',提升可读性;use admin; db.runCommand({ logRotate: 1 }),无需重启服务即可切换日志文件。4. 监控与自动化维护
du -sh /var/log/mongodb/mongod.log查看当前日志文件大小,避免单个文件过大;#!/bin/bash
LOG_DIR="/var/log/mongodb"
ARCHIVE_DIR="$LOG_DIR/archive"
mkdir -p "$ARCHIVE_DIR"
# 归档当天日志
mv "$LOG_DIR/mongod.log" "$ARCHIVE_DIR/mongod_$(date +%Y-%m-%d).log"
# 重启mongod以创建新日志文件
systemctl restart mongodb
# 删除30天前的归档日志
find "$ARCHIVE_DIR" -type f -name "mongod_*.log" -mtime +30 -delete
将脚本添加到crontab中(crontab -e),设置每天凌晨1点执行:0 1 * * * /path/to/script.sh。5. 高级技巧:调整组件日志级别
若需更细粒度的日志控制(如仅记录查询日志),可通过MongoDB Shell调整组件日志级别:
db.getLogComponents(),返回各组件(如query、replication)的当前级别;db.setLogLevel(level, component),例如将查询组件日志级别设为1(仅记录警告及以上):db.setLogLevel(1, "query");db.setLogLevel(1, "global"),调整所有组件的默认日志级别。