Linux系统下MongoDB的默认日志文件路径为**/var/log/mongodb/mongod.log**。若路径有变更,可通过MongoDB配置文件(/etc/mongod.conf)中的systemLog.path参数确认或修改。
cat命令输出日志全部内容(适用于小文件);tail -f /var/log/mongodb/mongod.log实时显示新增日志(常用于监控实时操作或故障排查);less /var/log/mongodb/mongod.log分页浏览(支持上下滚动、搜索关键词,如/error快速定位错误信息);head -n 20 /var/log/mongodb/mongod.log查看日志前20行(快速了解日志头部信息)。使用mtools工具集(推荐):
mtools是一组开源命令行工具,专门用于处理MongoDB日志,支持日志过滤、统计、可视化等功能。
sudo pip3 install mtools(需Python 3环境);mlogfilter mongod.log --slow 60000 --from "2025-11-01T00:00:00" --to "2025-11-02T00:00:00"(筛选2025-11-01至02期间执行时间超过60秒的慢查询);mplotqueries mongod.log --group namespace --output-file query_trend.png(生成命名空间查询数量的趋势图,直观展示高频查询);mloginfo mongod.log(输出日志文件的基本统计信息,如日志时长、操作类型分布、慢查询占比等)。使用jq工具解析JSON日志:
MongoDB日志为JSON格式,可使用jq工具提取特定字段。例如,筛选执行时间超过6000毫秒的查询:jq '. | select(.attr.durationMillis >= 6000)' mongod.log。
MongoDB Shell内置命令:
db.getLogComponents()(显示当前各日志组件(如command、query)的详细程度);db.adminCommand({getLog: 1})(返回日志文件的内容,可通过管道重定向到文件保存);db.runCommand({logRotate: 1})(不重启服务即可切换日志文件,避免日志文件过大)。为避免日志文件占用过多磁盘空间,需配置日志轮转。常用logrotate工具,编辑/etc/logrotate.d/mongodb文件,添加以下配置:
/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(gzip格式)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
sharedscripts # 多个服务共享轮转脚本
copytruncate # 复制日志文件后清空原文件(避免重启MongoDB)
dateext # 添加日期后缀(如mongod.log-20251101)
size 200M # 单个日志文件超过200MB时轮转
postrotate # 轮转后执行的命令(通知MongoDB重新打开日志文件)
/bin/kill -SIGUSR1 `cat /var/log/mongodb/mongod.lock` 2>/dev/null || true
endscript
}
配置完成后,logrotate会自动按规则管理日志文件。
/etc/mongod.conf中的systemLog.verbosity参数(0-5级,0为仅错误,5为最详细),调整后重启MongoDB生效;-rw-r--r--),避免未授权访问敏感信息;logrotate或自定义脚本(如find /var/log/mongodb -name "mongod.log.*" -mtime +30 -exec rm {} \;),定期删除超过30天的旧日志。