在Ubuntu上分析MongoDB日志前,需先明确日志的存储位置和级别设置,这是后续分析的前提。
MongoDB的默认日志文件路径为/var/log/mongodb/mongod.log,可通过以下命令确认:
ls /var/log/mongodb
若路径被修改,需检查配置文件/etc/mongod.conf中的systemLog.path参数。
MongoDB日志级别控制着日志的详细程度,范围从0(最少信息)到5(最详细信息),默认值为0(仅记录错误和基本操作)。
/etc/mongod.conf,调整systemLog.verbosity参数(如verbosity: 1),重启服务生效:sudo systemctl restart mongod
1):db.adminCommand({ setParameter: 1, logLevel: 1 })
query、storage)设置更细粒度的日志级别(如query组件设置为2,记录更详细的查询信息):db.adminCommand({
setParameter: 1,
logComponentVerbosity: {
verbosity: 1,
query: { verbosity: 2 }
}
})
为避免日志文件过大占用磁盘空间,需配置自动轮转。推荐使用Ubuntu的logrotate工具:
编辑/etc/logrotate.d/mongodb文件,添加以下配置(每天轮转、保留7天、压缩旧日志):
/var/log/mongodb/mongod.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
/bin/kill -USR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
endscript
}
测试配置有效性:
sudo logrotate -v /etc/logrotate.d/mongodb
使用tail -f命令实时追踪日志文件的新增内容(需sudo权限):
sudo tail -f /var/log/mongodb/mongod.log
按Ctrl+C停止实时查看。
使用grep命令过滤关键词(如“error”“slow”),快速定位问题日志:
# 搜索错误日志
sudo grep -i "error" /var/log/mongodb/mongod.log
# 搜索慢查询日志(需结合日志级别设置)
sudo grep "COMMAND" /var/log/mongodb/mongod.log | awk '/ms > 100/ {print $0}'
通过ls命令查看/var/log/mongodb目录下的日志文件(如mongod.log、mongod.log.1.gz等):
ls /var/log/mongodb
若系统使用systemd,可通过journalctl命令查看MongoDB服务的日志(实时更新):
sudo journalctl -u mongod -f
适合快速提取关键信息,如提取所有错误日志、慢查询日志(执行时间超过100ms):
# 提取错误日志
sudo grep -i "error" /var/log/mongodb/mongod.log
# 提取慢查询日志(需开启慢查询记录,设置--slowms参数)
sudo grep "COMMAND" /var/log/mongodb/mongod.log | awk '/ms > 100/ {print $0}'
mtools是一组Python工具,用于解析、分析和可视化MongoDB日志,适合复杂日志分析。
sudo pip3 install mtools
mloginfo工具统计慢查询信息(如最慢查询、平均执行时间):mloginfo --slow /var/log/mongodb/mongod.log
mplotqueries工具生成查询执行时间的散点图(需安装matplotlib):mplotqueries /var/log/mongodb/mongod.log --type scatter
ELK(Elasticsearch+Logstash+Kibana)适合大规模日志收集、存储和可视化,流程如下:
input插件读取mongod.log文件,filter插件解析日志格式(如JSON),output插件将日志发送到Elasticsearch。MongoDB Compass是MongoDB官方提供的图形化管理工具,支持直接连接MongoDB服务器,查看系统日志(System Logs)和慢查询日志(Slow Queries),并提供可视化的查询分析和性能优化建议。
使用grep命令过滤“error”关键词,快速定位数据库错误:
sudo grep -i "error" /var/log/mongodb/mongod.log
若查询执行时间过长,需开启慢查询记录(修改/etc/mongod.conf,设置operationProfiling.slowOpThresholdMs参数,如slowOpThresholdMs: 100),然后通过mloginfo或grep命令分析慢查询日志。
通过grep命令统计当前连接数,判断是否超出数据库的最大连接数限制:
sudo grep "connection accepted" /var/log/mongodb/mongod.log | wc -l