tail -f /var/log/mongodb/mongod.log命令实时追踪日志文件的新增内容,快速发现异常(如连接失败、查询超时等)。head -n 20 /var/log/mongodb/mongod.log查看日志开头20行(适用于快速检查近期启动信息),tail -n 50 /var/log/mongodb/mongod.log查看最后50行(查看最近的日志记录)。less /var/log/mongodb/mongod.log分页浏览日志,支持上下翻页(↑/↓)、搜索(/keyword)和退出(q),适合查看大型日志文件。jq可快速提取关键字段。例如,筛选持续时间超过60秒的慢查询:jq '. | select(.attr.durationMillis >= 60000)' mongod.log;提取特定命名空间的查询:jq '. | select(.attr.ns == "test.users")' mongod.log。mlogfilter:筛选指定时间范围或慢查询日志。例如,筛选2025-05-01至2025-05-02之间的慢查询(阈值60秒):mlogfilter mongod.log --from "2025-05-01" --to "2025-05-02" --slow 60000。mplotqueries:生成查询时间分布图,直观展示慢查询的频率和趋势。例如,按命名空间分组生成查询图:mplotqueries mongod.log --group namespace --output-file query_time.png。mloginfo:统计日志基本信息(如日志时长、事件数量、慢查询占比)。例如,mloginfo mongod.log可快速了解日志的整体情况。/etc/logrotate.d/mongodb文件配置日志轮转策略,例如每天轮转日志、保留7天、压缩旧日志:/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)
endscript
}
该配置表示:每天轮转一次日志,保留最近7天的压缩日志(*.gz),当日志文件大小超过200MB时立即轮转,轮转后发送SIGUSR1信号通知MongoDB重新打开日志文件。db.setProfilingLevel(1, 100)开启慢查询,阈值为100毫秒(即执行时间超过100毫秒的查询会被记录)。/etc/mongod.conf,添加operationProfiling部分:operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
重启MongoDB服务使配置生效:sudo systemctl restart mongod。system.profile集合中,使用db.system.profile.find().sort({$natural:-1})查看最新的慢查询记录(按时间倒序排列)。COLLSCAN关键字,说明查询未使用索引,需添加合适的索引(如db.collection.createIndex({"field": 1}))。keysExamined字段表示扫描的索引条目数,若远大于nreturned(返回的文档数),说明索引选择性差,需优化索引(如添加复合索引)。SORT关键字,说明查询需要内存排序,需在排序字段上添加索引(如db.collection.createIndex({"sort_field": 1}))。db.getLogComponents()查看当前各组件的日志详细程度(verbosity值越大,日志越详细)。db.setLogLevel(2)(2表示详细日志,包含更多诊断信息;0表示仅记录致命错误,1表示默认日志)。/etc/mongod.conf,调整systemLog.verbosity参数:systemLog:
verbosity: 1
重启MongoDB服务使配置生效。query、storage)调整日志级别,例如将query组件的日志级别设置为2(详细查询日志):db.setLogLevel(2, "query")。以上技巧覆盖了MongoDB在Linux环境下的日志查看、分析、优化和配置,可帮助快速定位性能瓶颈、排查异常问题。