Linux环境下,MongoDB默认日志文件路径为**/var/log/mongodb/mongod.log**(部分自定义安装可能位于其他路径,可通过cat /etc/mongod.conf | grep logpath确认)。该文件记录了数据库启动、连接、查询、错误等全生命周期信息,是运维的“黑匣子”。
使用tail -f命令可实时追踪日志变化,快速定位近期问题:
tail -f /var/log/mongodb/mongod.log
若需持续监控,可将命令放入后台运行(tail -f /var/log/mongodb/mongod.log &)。
为避免日志文件无限增长占用磁盘空间,需配置自动轮转:
/etc/logrotate.d/mongodb,添加以下配置(每日轮转、保留7天、压缩旧日志):/var/log/mongodb/mongod.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 mongodb mongodb
sharedscripts
postrotate
/usr/bin/pkill -USR1 mongod
endscript
}
测试配置有效性:sudo logrotate -v /etc/logrotate.d/mongodb。grep/awk:快速提取关键信息,如查找所有错误日志:
grep -i "error" /var/log/mongodb/mongod.log
统计慢查询(执行时间>1秒)数量:
cat /var/log/mongodb/mongod.log | grep "query" | awk '/ms > 1000/ {print $0}' | wc -l
mtools(官方推荐):Python工具集,支持日志解析、可视化:
sudo pip3 install mtoolsmloginfo --slow /var/log/mongodb/mongod.log(输出最慢查询、平均耗时等统计)mplotqueries /var/log/mongodb/mongod.log --type scatter --output-file slow_queries.png(需安装matplotlib)。2025-01-01T12:34:56.789+0800 E NETWORK [listener] Connection timed outping <MongoDB服务器IP>);sudo firewall-cmd --add-port=27017/tcp --permanent);2025-01-01T12:34:56.789+0800 E QUERY [thread1] Error: not authorized on database to execute commandreadWrite权限)。db.grantRolesToUser("username", [{ role: "readWrite", db: "database" }]);db.getUser("username"))。2025-01-01T12:34:56.789+0800 E STORAGE [initandlisten] WiredTiger error: collection data file checksum doesn't matchmongod --repair修复数据库(需停机,备份数据后操作);2025-01-01T12:34:56.789+0800 I COMMAND [conn123] command database.collection command: find { ... } planSummary: COLLSCAN keysExamined:0 docsExamined:10000 ... executionTimeMillis:1500explain()分析查询计划(db.collection.find({条件}).explain("executionStats")),确认是否使用了索引;db.collection.createIndex({字段:1})),避免全表扫描。MongoDB日志级别通过systemLog.verbosity参数控制,范围0-5(0为最低,5为最高):
调整方法:
db.adminCommand({ setParameter: 1, logLevel: 2 });/etc/mongod.conf,添加:systemLog:
verbosity: 1
重启服务生效:sudo systemctl restart mongod。通过以上步骤,可有效管理Linux系统中的MongoDB日志,快速定位并解决常见问题,提升数据库运维效率。