MongoDB的日志配置主要通过**/etc/mongod.conf**(主流Linux发行版的默认路径)实现,部分旧版本可能使用/etc/mongodb.conf。可通过mongod --config命令确认配置文件路径。
在配置文件的systemLog部分设置日志路径和输出方式:
systemLog:
destination: file # 输出到文件(可选:stderr 输出到标准错误)
path: /var/log/mongodb/mongod.log # 日志文件路径
logAppend: true # 追加模式(避免重启时覆盖旧日志)
destination:设为file表示写入文件,stderr表示输出到终端(调试用);logAppend:建议开启,确保日志连续性。通过verbosity参数控制日志详细程度(数值越大,日志越详细):
systemLog:
verbosity: 1 # 默认级别(0-4)
为防止日志文件过大占用磁盘空间,需通过logrotate工具实现自动轮转。
主流Linux发行版默认安装,未安装时可通过以下命令安装:
sudo apt-get install logrotate;sudo yum install logrotate。编辑/etc/logrotate.d/mongodb文件,添加以下内容(针对MongoDB日志的定制策略):
/var/log/mongodb/mongod.log {
daily # 每天轮转一次(可选:weekly/monthly)
rotate 7 # 保留最近7个轮转日志文件
compress # 使用gzip压缩旧日志(节省空间)
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不轮转
create 640 mongodb adm # 新日志文件权限(属主:mongodb,属组:adm)
sharedscripts # 所有日志轮转完成后执行postrotate脚本
postrotate
/bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid 2>/dev/null) 2>/dev/null || true
endscript
}
postrotate脚本:向MongoDB进程发送SIGUSR1信号,触发其关闭当前日志文件并创建新文件;dateext(可选):在轮转日志文件名中添加日期(如mongod.log-20251014),便于归档。若需立即轮转日志,可使用以下命令:
sudo logrotate -vf /etc/logrotate.d/mongodb
-v:显示详细过程;-f:强制轮转(即使未到轮转时间)。使用tail命令实时追踪日志文件变化(适用于排查实时问题):
tail -f /var/log/mongodb/mongod.log
-f:持续输出新增日志内容;grep筛选关键信息(如错误日志):tail -f /var/log/mongodb/mongod.log | grep "ERROR"。head -n 20 /var/log/mongodb/mongod.log(查看前20行);less /var/log/mongodb/mongod.log(支持上下翻页、搜索)。sudo pip3 install mtools # 安装
mlogfilter mongod.log --from "2025-10-01" --slow 60000 | tail -n3 # 筛选2025-10-01后的慢查询(阈值60秒)
mplotqueries mongod.log --group namespace --output-file slow_queries.png # 生成命名空间查询分布图
jq '. | select(.attr.durationMillis >= 6000)' mongod.log # 筛选执行时间超过60秒的查询
// 获取所有日志组件(如system、accessControl)
db.getLogComponents();
// 获取最近的10条日志
db.adminCommand({ getLog: 1, verbosity: 1 }).log;
// 手动触发日志轮转
db.adminCommand({ logRotate: 1 });
```。
定期将日志文件备份到远程存储或专用归档目录(如/backup/mongodb/):
rsync -av /var/log/mongodb/mongod.log /backup/mongodb/ # 同步最新日志
tar -czvf /backup/mongodb/mongod_$(date +%F).tar.gz /var/log/mongodb/mongod.log # 压缩归档
限制日志文件的访问权限,仅允许授权用户(如mongodb用户、adm组)查看:
sudo chown mongodb:adm /var/log/mongodb/mongod.log # 修改属主和属组
sudo chmod 640 /var/log/mongodb/mongod.log # 设置权限(属主可读写,属组可读,其他用户无权限)
logrotate的rotate参数(如保留30天日志则设为rotate 30);verbosity: 1;