Debian系统下MongoDB的主配置文件为/etc/mongod.conf,所有日志相关的参数均在此文件中设置。
在/etc/mongod.conf中,systemLog部分是日志配置的核心,关键参数如下:
file(文件,默认)、syslog(系统日志)或console(控制台);/var/log/mongodb/mongod.log);true为追加,false为重启后覆盖,默认true);编辑/etc/mongod.conf,找到systemLog部分,修改verbosity参数(例如设置为2,记录详细信息和慢查询):
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 2 # 调整为所需级别
修改完成后,重启MongoDB服务使配置生效:
sudo systemctl restart mongod
连接到MongoDB Shell:
mongo
执行setLogLevel命令设置全局日志级别(例如设置为1,记录一般信息+警告):
db.setLogLevel(1, "global")
注:临时设置会在MongoDB重启后失效,仅用于调试场景。
为避免日志文件过大占用磁盘空间,需使用logrotate工具实现自动轮转。
sudo apt-get install logrotate
创建/etc/logrotate.d/mongodb文件,添加以下内容(示例):
/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(gzip)
missingok # 若日志文件不存在也不报错
notifempty # 若日志为空则不轮转
create 0640 mongodb mongodb # 创建新日志文件,权限0640,属主属组为mongodb
sharedscripts # 所有日志轮转完成后执行postrotate脚本
copytruncate # 复制原日志文件后清空,避免重启mongod
postrotate
/bin/kill -SIGUSR1 `cat /var/log/mongodb/mongod.lock` 2>/dev/null || true
endscript
}
注:
copytruncate用于避免重启MongoDB服务,适用于无法修改配置文件的情况;若能重启服务,可将postrotate脚本替换为/bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid)(需根据实际PID文件路径调整)。
若需立即轮转日志,可使用以下命令:
# 使用logrotate工具
sudo logrotate -f /etc/logrotate.d/mongodb
# 或通过MongoDB Shell命令
use admin
db.runCommand({ logRotate: 1 })
sudo tail -f /var/log/mongodb/mongod.log
sudo tail -n 10 /var/log/mongodb/mongod.log
sudo grep "error" /var/log/mongodb/mongod.log
MongoDB日志默认以JSON格式存储,可使用jq工具提取特定字段(例如msg字段):
sudo cat /var/log/mongodb/mongod.log | jq '.msg'
注:若未安装
jq,可通过sudo apt-get install jq安装。
创建归档脚本/usr/local/bin/archive_mongodb_logs.sh,内容如下:
#!/bin/bash
LOG_DIR="/var/log/mongodb"
ARCHIVE_DIR="$LOG_DIR/archive"
DATE=$(date +%Y-%m-%d)
# 创建归档目录
if [ ! -d "$ARCHIVE_DIR" ]; then
mkdir -p "$ARCHIVE_DIR"
fi
# 归档当前日志文件
if [ -f "$LOG_DIR/mongod.log" ]; then
mv "$LOG_DIR/mongod.log" "$ARCHIVE_DIR/mongod_$DATE.log"
fi
# 清理30天前的归档日志
find "$ARCHIVE_DIR" -type f -name "mongod_*.log" -mtime +30 -exec rm -f {} \;
赋予执行权限:
sudo chmod +x /usr/local/bin/archive_mongodb_logs.sh
添加到crontab实现每天自动执行:
sudo crontab -e
添加以下内容(每天凌晨2点执行):
0 2 * * * /usr/local/bin/archive_mongodb_logs.sh
rotate值需根据磁盘空间调整,避免保留过多旧日志;