Ubuntu系统中,MongoDB的主配置文件默认位于/etc/mongod.conf,所有日志相关的设置均在此文件中完成。
在/etc/mongod.conf中,systemLog部分是日志管理的核心配置,主要参数如下:
file表示输出到文件(默认),stderr表示输出到标准错误;/var/log/mongodb/mongod.log(需确保目录存在且MongoDB用户有写入权限);true(避免重启服务时覆盖旧日志);reopen(配合logrotate工具使用时推荐)。为防止日志文件过大占用磁盘空间,需通过logrotate工具实现自动轮转。步骤如下:
sudo apt-get install logrotate
新建或编辑/etc/logrotate.d/mongodb文件,添加以下内容:
/var/log/mongodb/mongod.log {
daily # 每天轮转一次
missingok # 日志文件丢失时不报错
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(避免立即压缩影响性能)
notifempty # 日志为空时不轮转
create 0640 mongodb mongodb # 新日志文件权限及属主(需与MongoDB运行用户一致)
sharedscripts # 多个日志文件共享同一个postrotate脚本
postrotate # 轮转后执行的命令(通知MongoDB重新打开日志文件)
/bin/kill -SIGUSR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
endscript
}
注:
/var/lib/mongodb/mongod.lock是MongoDB的锁文件路径,用于获取进程ID;若路径不同,需根据实际情况调整。
手动触发轮转以验证配置是否正确:
sudo logrotate -vf /etc/logrotate.d/mongodb
tail -f命令实时查看最新日志内容;sudo tail -f /var/log/mongodb/mongod.log
grep命令过滤日志(如查找“error”相关日志);sudo grep -i "error" /var/log/mongodb/mongod.log
du命令监控日志文件占用空间;sudo du -sh /var/log/mongodb/mongod.log*
getLogComponents命令查看各组件的日志级别;mongo --eval 'db.getLogComponents()'
setLogLevel命令动态调整指定组件的日志详细程度(如将“query”组件的日志级别设为2);mongo --eval 'db.setLogLevel(2, "query")'
adminCommand命令导出所有日志;mongo --eval 'db.adminCommand({getLog: 1})'
通过logrotate的rotate参数控制保留的日志文件数量(如rotate 7保留7天),超出数量的旧日志会自动删除。
若需立即清理,可直接删除旧日志文件(注意:删除前确保日志已轮转):
sudo rm /var/log/mongodb/mongod.log.1.gz # 删除压缩的旧日志
sudo rm /var/log/mongodb/mongod.log # 删除当前日志(需重启MongoDB重新生成)
sudo systemctl restart mongod
重要日志可通过cp命令备份到其他存储介质(如外接硬盘、云存储):
sudo cp /var/log/mongodb/mongod.log /mnt/backup/mongodb_logs_$(date +%F).log
path路径是否存在,且MongoDB用户(通常为mongodb)是否有写入权限;sudo mkdir -p /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb
logAppend是否设为true(避免重启时覆盖日志)。verbosity调低(如设为1);verbosity调高(如设为3)。logrotate配置中的postrotate脚本是否正确(需获取MongoDB进程ID并发送SIGUSR1信号);postrotate脚本测试是否正常:/bin/kill -SIGUSR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true