Ubuntu 上 MongoDB 日志分析实操指南
一 准备与定位日志
sudo tail -n 100 /var/log/mongodb/mongod.logsudo tail -f /var/log/mongodb/mongod.logdb.getLogComponents()db.adminCommand({ getLog: 1 })二 命令行快速分析
grep -E 'E|F' /var/log/mongodb/mongod.log | awk '$1 > "2025-11-29T10:00" {print}'cat /var/log/mongodb/mongod.log | grep -oP '\d{4}-\d{2}-\d{2}T\d{2}' | sort | uniq -cI COMMAND ... planSummary: COLLSCAN ... docsExamined:500000(无索引导致全表扫描)db.users.createIndex({age: 1})db.setLogLevel(1)(排查完成后恢复为 0)三 使用 mtools 做深度分析
sudo pip3 install mtoolsmloginfo /var/log/mongodb/mongod.logmlogfilter /var/log/mongodb/mongod.log --from "2025-11-29T00:00:00" --to "+8h" --slow 100 | tail -n 20mplotqueries /var/log/mongodb/mongod.log --group namespace --output-file ns_scan.png四 配置与运维要点
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
operationProfiling:
slowOpThresholdMs: 100
mode: all
db.setLogLevel(1) 或使用 --setParameter slowMS=100 启动参数(版本支持时)sudo vim /etc/logrotate.d/mongodb/var/log/mongodb/mongod.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
copytruncate
dateext
size 200M
postrotate
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
endscript
}
db.getLogComponents()、db.setLogLevel(1)(排查完成后恢复为 0)五 典型异常模式与处置
W NETWORK [threadmongod] Too many open files (96% threshold)ulimit -n,在 /etc/security/limits.conf 提升 mongod 的 nofile(如 64000),并重启会话/服务生效E REPL [replication] heartbeat failed to secondary2:27017F STORAGE [WT-Thread] WiredTiger error: 31802db.serverStatus().storageEngine 核实引擎状态,必要时使用 mongod --repair 修复数据文件(先做好备份)