Ubuntu 上 MongoDB 日志分析实操指南
一 定位日志与快速查看
- 默认日志路径为:/var/log/mongodb/mongod.log;配置文件为:/etc/mongod.conf(如需确认路径,查看其中的 systemLog.path)。常用查看方式:实时跟踪用 tail -f /var/log/mongodb/mongod.log;分页查看用 less /var/log/mongodb/mongod.log;查看末尾 N 行用 tail -n 10 /var/log/mongodb/mongod.log。如为自定义安装,请以配置文件为准。
二 日志结构与关键级别
- 日志为文本行,典型字段包含:时间戳(精确到毫秒)、日志级别、组件标识、连接/线程标识、消息体。常见级别:F(Fatal 致命)、E(Error 错误)、W(Warning 警告)、I(Info 信息);常见组件:NETWORK、STORAGE、REPL、COMMAND 等。示例:
- 2023-08-20T14:35:22.483+0800 I NETWORK [conn125] end connection 192.168.1.15:54128
- 2023-08-20T15:12:33.891+0800 I COMMAND [conn142] command db.users … planSummary: COLLSCAN …
分析时优先关注 F/E 级事件,其次对 W 建立基线告警。
三 命令行快速分析命令
- 实时观察错误与致命告警:
- grep -E ‘E|F’ /var/log/mongodb/mongod.log | tail -f
- 按时间窗口筛选(示例:自某日某时起):
- grep -E ‘E|F’ /var/log/mongodb/mongod.log | awk ‘$1 > “2025-12-28T00:00”’
- 统计每小时错误量(按日志时间前缀统计):
- cat /var/log/mongodb/mongod.log | grep -oP ‘\d{4}-\d{2}-\d{2}T\d{2}’ | sort | uniq -c
- 统计 Top N 来源 IP(连接结束事件):
- grep ‘end connection’ /var/log/mongodb/mongod.log | awk ‘{print $NF}’ | sort | uniq -c | sort -nr | head
- 查找全表扫描查询(COLLSCAN 特征):
- grep ‘planSummary: COLLSCAN’ /var/log/mongodb/mongod.log | head
- 检查日志增长速度(定位是否需调整轮转策略):
- du -sh /var/log/mongodb/mongod.log*
以上命令可组合管道,用于定位连接风暴、慢查询、错误突发等常见问题。
四 提升日志粒度与慢查询定位
- 动态提升日志详细度(无需重启,便于短时排障):
- 查看组件与级别:use admin; db.getLogComponents()
- 临时提高全局或组件日志级别:db.adminCommand({setParameter: 1, logLevel: 1})(数值越大越详细,生产谨慎)
- 慢查询定位与优化:
- 设置慢查询阈值(示例 100ms):db.adminCommand({setParameter: 1, slowMS: 100})
- 在日志中检索慢查询与执行计划特征(如 COLLSCAN、IXSCAN、keysExamined/docsExamined),据此添加合适索引并复核执行计划。
五 日志轮转与长期分析方案
- 使用 logrotate 做按日轮转、压缩与保留(避免磁盘被撑满):
- 新建配置:/etc/logrotate.d/mongodb
- 示例内容:
/var/log/mongodb/mongod.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 mongodb mongodb
postrotate
if [ -f /var/run/mongodb.pid ]; then
kill -SIGUSR1 $(cat /var/run/mongodb.pid)
fi
endscript
}
- 测试配置:logrotate -d /etc/logrotate.d/mongodb;确保权限正确:chown mongodb:mongodb /var/log/mongodb/mongod.log;必要时重启服务:systemctl restart mongod。
- 长期与集中化分析:
- 小规模可用 MongoDB Compass 做日志过滤与可视化;中大规模建议接入 ELK Stack(Elasticsearch+Logstash+Kibana) 或 Filebeat/ Fluentd 做采集与可视化仪表盘,便于追踪错误趋势、慢查询与连接异常。