Debian 上 MongoDB 日志的配置与分析
一 配置文件与路径
- 配置文件位置:/etc/mongod.conf。常用日志相关参数示例:
- systemLog.destination:输出目的地,常用 file 或 syslog
- systemLog.path:日志文件路径,默认 /var/log/mongodb/mongod.log
- systemLog.logAppend:true 追加写入
- systemLog.verbosity:全局日志详细度,数值越大越详细
- systemLog.component:按组件设置日志级别(如 command、network、query 等)
- 目录与权限:确保日志目录存在且属主为 mongodb:mongodb
- sudo mkdir -p /var/log/mongodb
- sudo chown mongodb:mongodb /var/log/mongodb
- 应用配置:修改后重启服务
- sudo systemctl restart mongod
- 验证:实时查看日志
- tail -f /var/log/mongodb/mongod.log
以上路径、参数与操作适用于 Debian 上的 MongoDB 部署。
二 日志轮转与保留策略
- 推荐使用 logrotate 管理日志轮转,创建 /etc/logrotate.d/mongodb:
- 权限建议:在 logrotate 中使用 create 指定属主属组,例如 create 640 mongodb mongodb,避免权限错误导致写入失败。
三 查看与基础分析
- 命令行快速查看:
- 实时跟踪:tail -f /var/log/mongodb/mongod.log
- 关键字检索:grep “ERROR” /var/log/mongodb/mongod.log
- 分页查看:less /var/log/mongodb/mongod.log
- MongoDB Shell 辅助:
- 查看组件与级别:db.getLogComponents()
- 获取某组件日志:db.adminCommand({ getLog: “componentName” })(如 “query”、“network”、“command”)
- 结构化日志分析:
- 若日志为 JSON 格式,可结合 jq 提取字段,例如:
- sudo cat /var/log/mongodb/mongod.log | jq ‘select(.msg | contains(“slow”)) | .ts,.msg’
以上方法覆盖日常排查中最常用的检索、过滤与结构化分析路径。
四 运行时调参与审计日志
- 动态调级(无需重启):
- 全局:db.setLogLevel(2)
- 指定组件:db.setLogLevel(1, “query”)
- 注意:过高的日志级别会显著增加日志量,建议按需短时开启。
- 慢查询日志(用于定位性能瓶颈):
- 审计日志(安全合规):
五 常见问题与快速排查
- 服务无法启动:
- 检查服务状态:systemctl status mongod
- 查看错误:tail -n50 /var/log/mongodb/mongod.log
- 核对配置路径、目录权限与 SELinux/AppArmor 限制(如有)。
- 连接被拒绝或超时:
- 确认监听地址与端口(netstat/ss),检查 防火墙 与安全组策略。
- 本地验证:mongo --host 127.0.0.1:27017
- 性能问题定位:
- 实时监控:mongostat、mongotop
- 查询分析:对问题语句使用 explain() 检查执行计划与索引命中
- 结合慢查询日志与日志检索定位高耗时操作与缺失索引
以上步骤覆盖连接、权限、配置与性能四大类常见故障的高效定位路径。