Ubuntu下MongoDB日志管理的实现方法
日志管理的核心是定位配置文件(/etc/mongod.conf),通过修改systemLog部分参数实现:
path为自定义路径(如/var/log/mongodb/mongod.log),确保目录存在且MongoDB用户(mongodb)有写入权限;logAppend: true保证新日志追加到文件末尾,而非覆盖;verbosity(或logLevel)控制详细程度,范围0-5(0=仅错误,5=调试信息),默认0即可满足生产需求。sudo systemctl restart mongod)使配置生效。为避免日志文件过大占用磁盘空间,需使用logrotate工具实现自动轮转:
/etc/logrotate.d/下新建mongodb文件,内容示例如下:/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留7个历史日志
compress # 压缩旧日志(gzip)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
sharedscripts # 多个服务共享脚本
copytruncate # 复制原日志后清空(避免重启服务)
dateext # 添加日期后缀(如mongod.log-20250927)
postrotate
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock) 2>/dev/null || true
endscript
}
sudo logrotate -vf /etc/logrotate.d/mongodb),确认日志按预期分割、压缩。sudo tail -f /var/log/mongodb/mongod.log(按Ctrl+C停止);sudo grep -i "error" /var/log/mongodb/mongod.log(查找错误日志);sudo du -sh /var/log/mongodb/mongod.log*(监控磁盘占用)。db.getLogComponents()(查看当前日志组件配置);db.setLogLevel(2, "query")(将查询日志级别设为2,即警告及以上);db.adminCommand({getLog: 1})(返回所有日志条目,JSON格式)。logrotate的rotate参数保留指定天数/数量的日志(如rotate 30保留30天);sudo rm /var/log/mongodb/mongod.log.202509*(删除指定前缀的旧日志);tar压缩备份(sudo tar -czvf mongodb_logs_$(date +%F).tar.gz /var/log/mongodb/),或通过mongodump备份特定数据库日志(需提前配置)。cron定时任务(如每天凌晨检查日志大小),超过阈值则发送邮件告警;awk/sed统计错误日志频率(如sudo awk '/ERROR/{count++} END{print count}' /var/log/mongodb/mongod.log),快速定位高频问题。