MongoDB作为NoSQL数据库,其日志是排查故障、监控性能的核心工具。在Linux环境中,通过合理配置日志路径、级别、轮转及分析,可实现高效的日志管理。以下是具体实践步骤:
MongoDB的日志配置主要通过/etc/mongod.conf
文件完成(部分旧版本可能使用/etc/mongodb.conf
)。需修改systemLog
部分,关键参数说明如下:
file
(文件)或syslog
(系统日志);/var/log/mongodb/mongod.log
);true
(避免重启时覆盖旧日志);示例配置:
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 1 # 生产环境建议设为1(平衡信息量与性能)
修改后需重启MongoDB服务使配置生效:
sudo systemctl restart mongod
日志文件长期运行会占用大量磁盘空间,需通过logrotate
工具实现自动轮转。创建/etc/logrotate.d/mongodb
配置文件,内容如下:
/var/log/mongodb/mongod.log {
daily # 每日轮转
rotate 7 # 保留7份历史日志
compress # 压缩旧日志(节省空间)
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不轮转
create 0640 mongodb mongodb # 新日志文件权限(属主:mongodb,属组:mongodb)
postrotate # 轮转后执行的命令(通知MongoDB重新打开日志文件)
if [ -f /var/run/mongodb.pid ]; then
kill -SIGUSR1 $(cat /var/run/mongodb.pid)
fi
endscript
}
配置完成后,logrotate
会按计划自动执行(通常每日一次)。也可手动触发测试:
sudo logrotate -vf /etc/logrotate.d/mongodb
cat /var/log/mongodb/mongod.log
(适合小文件);less /var/log/mongodb/mongod.log
(按空格
翻页,G
跳转末尾);tail -f /var/log/mongodb/mongod.log
(实时显示新增日志,适合故障排查)。进入mongo
shell,可使用以下命令:
cat("/var/log/mongodb/mongod.log")
;db.getLogComponents()
(查看各模块日志级别);db.adminCommand({getLog: 1})
。日志级别决定了日志的输出内容,可根据需求调整:
编辑/etc/mongod.conf
,修改systemLog.verbosity
参数(0-5),重启服务生效。
启动MongoDB时通过--logLevel
参数指定级别(覆盖配置文件):
mongod --config /etc/mongod.conf --logLevel 2
通过mongo
shell执行:
// 设置全局日志级别
db.adminCommand({setParameter: 1, logLevel: 2});
// 设置特定模块日志级别(如查询优化器)
db.setLogLevel(3, "query");
使用grep
、awk
等工具筛选关键信息:
grep "ERROR" /var/log/mongodb/mongod.log
;awk '/Slow query/{count++} END{print count}' /var/log/mongodb/mongod.log
。对于大规模集群,可使用ELK(Elasticsearch+Logstash+Kibana)实现日志的集中采集、清洗与可视化:
tar -czvf /backup/mongod_$(date +%Y%m%d).log.tar.gz /var/log/mongodb/mongod.log
logrotate
的maxage
参数(如maxage 30
)删除30天前的日志。chown mongodb:mongodb /var/log/mongodb/mongod.log
chmod 640 /var/log/mongodb/mongod.log
logrotate
的postrotate
脚本或sed
命令过滤后再存储。通过以上实践,可实现MongoDB日志的规范化管理,提升数据库的可维护性与故障排查效率。