阅读量:5
1. 定位MongoDB日志文件
在Debian系统中,MongoDB的默认日志文件路径为/var/log/mongodb/mongod.log。若配置文件(/etc/mongod.conf)中修改了systemLog.path参数,则需以配置文件中的路径为准。
2. 使用命令行工具查看日志
- 查看完整日志:使用
cat命令查看日志文件全部内容(适用于小文件):
sudo cat /var/log/mongodb/mongod.log - 实时追踪日志:使用
tail -f命令实时显示日志文件的新增内容(常用于监控实时日志):
sudo tail -f /var/log/mongodb/mongod.log - 搜索特定关键词:使用
grep命令筛选包含指定关键词的日志条目(如“error”“query”):
sudo grep "error" /var/log/mongodb/mongod.log(筛选错误日志);
sudo grep "query" /var/log/mongodb/mongod.log(筛选查询日志)。
3. 使用MongoDB Shell管理日志
- 查看日志组件配置:连接MongoDB Shell后,使用
db.getLogComponents()命令查看当前日志组件的详细配置(如各组件的日志级别):
mongo→db.getLogComponents() - 获取特定组件日志:通过
db.adminCommand()命令获取指定组件的日志(如“query”组件的慢查询日志):
db.adminCommand({ getLog: "query" }) - 手动触发日志轮转:在Shell中执行
logRotate命令,强制MongoDB重新打开日志文件(配合logrotate工具使用):
use admin→db.runCommand({ logRotate: 1 })。
4. 使用命令行工具分析日志
- 格式化JSON日志:若日志为JSON格式,使用
jq工具提取特定字段(如msg字段),提升可读性:
sudo cat /var/log/mongodb/mongod.log | jq '.msg' - 筛选慢查询日志:结合
grep和awk筛选慢查询(假设慢查询阈值为100ms,日志中包含“durationMillis”字段):
sudo grep "durationMillis" /var/log/mongodb/mongod.log | awk -F'"durationMillis":' '{print $2}' | awk '$1 > 100' - 统计错误日志数量:使用
grep -c统计错误日志的条目数:
sudo grep -c "error" /var/log/mongodb/mongod.log。
5. 使用第三方工具分析日志
- mtools:开源工具集(含
mloginfo、mlogfilter、mplotqueries),用于处理和可视化MongoDB日志。- 安装:
sudo pip3 install mtools; - 查看日志统计信息:
mloginfo /var/log/mongodb/mongod.log; - 筛选指定时间的慢查询:
mlogfilter /var/log/mongodb/mongod.log --from "2025-10-01" --to "2025-10-31" --slow 100; - 生成查询时间分布图:
mplotqueries /var/log/mongodb/mongod.log --group duration --output-file query_duration.png。
- 安装:
- ELK Stack(Elasticsearch+Logstash+Kibana):
- Logstash解析MongoDB日志(需配置
logstash.conf文件,匹配日志格式); - Elasticsearch存储解析后的日志;
- Kibana创建可视化 dashboard(如查询频率、错误趋势、慢查询分布等),实现日志的集中管理和分析。
- Logstash解析MongoDB日志(需配置
6. 配置日志轮转避免文件过大
使用logrotate工具定期切割、压缩日志文件,防止mongod.log占用过多磁盘空间。
- 创建或编辑
/etc/logrotate.d/mongodb配置文件,添加以下内容:/var/log/mongodb/mongod.log { daily # 每天轮转一次 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志(使用gzip) missingok # 若日志文件不存在,不报错 notifempty # 若日志为空,不轮转 sharedscripts # 多个服务共享轮转脚本 copytruncate # 复制日志文件后清空原文件(避免重启mongod) dateext # 添加日期后缀(如mongod.log-20251031) postrotate # 轮转后执行的命令 /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock) 2>/dev/null || true endscript } - 手动触发轮转测试:
sudo logrotate -f /etc/logrotate.d/mongodb。
7. 优化日志配置提升分析效率
编辑/etc/mongod.conf文件,调整日志参数以平衡日志详细程度和存储开销:
- 设置日志级别:
verbosity参数控制日志详细程度(0=仅错误,1=一般信息,默认,5=调试信息):
systemLog: verbosity: 1 - 指定日志路径与追加模式:
destination设为file(文件输出),path设为日志文件路径,logAppend设为true(重启后追加日志):
systemLog: destination: file path: /var/log/mongodb/mongod.log logAppend: true - 调整慢查询阈值:
operationProfiling.slowOpThresholdMs参数设置慢查询的时间阈值(单位:毫秒,默认100ms):
operationProfiling: slowOpThresholdMs: 100 mode: slowOp(仅记录慢查询)。