Ubuntu 上 MongoDB 日志管理实用技巧
一 日志位置与快速查看
tail -f /var/log/mongodb/mongod.loggrep -E 'E|F' /var/log/mongodb/mongod.loggrep -E 'E|F' /var/log/mongodb/mongod.log | awk '$1 > "2025-08-20T14:00"'二 日志轮转的三种方式
db.adminCommand({ logRotate: "server" })(可单独轮转审计日志:{ logRotate: "audit" })kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock)(按实际 lock 文件路径调整)systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
logRotate: reopen
/var/log/mongodb/mongod.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
if pgrep mongod >/dev/null; then
systemctl kill --signal=SIGUSR1 mongod 2>/dev/null || \
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock 2>/dev/null)
fi
endscript
}
copytruncate 替代 postrotate 发送信号的逻辑,适合无法使用信号的环境。三 日志级别与组件控制
db.setLogLevel(1)(数值越大越详细,便于临时排障)db.getLogComponents()(按需开启更细粒度的组件日志,减少噪声)mongod --setParameter slowMS=100(将阈值设为 100ms,配合应用侧抓取长耗时操作)四 常见异常模式与定位要点
W NETWORK [threadmongod] Too many open files (96% threshold)ulimit -n,在 /etc/security/limits.conf 为 mongod 提升上限(如 soft/hard 至 64000)COLLSCAN、keysExamined:0、docsExamined 很大db.users.createIndex({age:1})),并优化查询条件E REPL [replication] heartbeat failed to secondary2:27017F STORAGE [WT-Thread] WiredTiger error: 31802db.serverStatus().storageEngine 核验引擎状态,必要时执行修复流程(如 --repair,务必先做好完整备份)五 分析与归档工具链
mlogfilter ... --slow 60000、mplotqueries ...jq '. | select(.attr.durationMillis >= 6000)' replsvr.logfind ... -mtime +N -delete 或 logrotate 的 rotate N 策略自动清理