MongoDB 在 Ubuntu 上的日志管理实操指南
一 定位与查看日志
- 默认日志路径通常为:/var/log/mongodb/mongod.log;配置文件为:/etc/mongod.conf。使用以下命令快速查看:
- 实时查看最新日志:sudo tail -f /var/log/mongodb/mongod.log
- 查看服务启动/停止记录:在服务日志中检索关键字(如“started”“stopped”“mongod”)或使用 journalctl:sudo journalctl -u mongod -f
- 确认配置中的日志路径:grep -n “systemLog.path” /etc/mongod.conf
- 若采用 systemd 管理,也可通过 sudo journalctl -u mongod 查看标准输出与错误输出。
二 配置日志输出与级别
- 编辑配置文件:sudo nano /etc/mongod.conf,在 systemLog 段落设置:
- 输出目的地:destination: file(或 stderr)
- 追加模式:logAppend: true
- 日志路径:path: /var/log/mongodb/mongod.log
- 全局日志详细度:verbosity: 0–5(数值越大越详细)
- 动态调节(无需重启):在 mongo shell 中执行 db.setLogLevel(2)。
- 组件级日志:db.getLogComponents() 查看组件,db.setLogLevel(1, “query”) 仅提升查询组件日志级别。
- 应用修改:sudo systemctl restart mongod。
三 日志轮转与清理
- 推荐方式一 systemd-journald(无侵入)
- 保持 mongod 使用 systemLog.destination: file,journald 负责服务日志的轮转与持久化;按需配置 journald 的 SystemMaxUse、MaxRetentionSec 等参数,避免磁盘被占满。
- 推荐方式二 logrotate(文件轮转)
- 方式三 信号轮转脚本(简单场景)
- 向 mongod 发送 SIGUSR1 触发日志切割:kill -SIGUSR1 $(cat /var/run/mongod.pid)
- 结合 find 删除 N 天前旧日志并加入 crontab 定时执行。
四 日志分析与慢查询定位
- 快速过滤错误与致命错误:
- grep -E ‘E|F’ /var/log/mongodb/mongod.log | tail -n 100
- 按时间窗口统计错误量(示例:统计每小时错误数)
- cat /var/log/mongodb/mongod.log | grep -oP ‘\d{4}-\d{2}-\d{2}T\d{2}’ | sort | uniq -c
- 慢查询与索引问题识别
- 在 mongo shell 启用慢查询阈值:db.setProfilingLevel(1, { slowms: 100 })
- 使用 mtools 分析慢查询:mlogfilter mongod.log --slow 100 --from “2025-12-20T00:00:00” | head
- 典型异常模式
- 连接风暴/文件描述符不足:W NETWORK “Too many open files”
- 全表扫描:I COMMAND … planSummary: COLLSCAN(建议建立合适索引)
五 运维注意事项
- 权限与属主:确保日志目录与文件可被 mongodb 用户写入,常见权限为 0640 mongodb:mongodb 或 0640 mongodb:adm。
- 避免日志无限增长:合理设置轮转周期与保留天数(如 daily + rotate 7),并监控磁盘使用率。
- 动态调级的风险:提高 verbosity 或组件日志级别会显著增加日志量,建议仅在排障期间临时提升并及时恢复。
- 变更生效方式:涉及配置文件修改需重启服务(sudo systemctl restart mongod);仅调整日志级别可用 db.setLogLevel() 动态生效。