Debian环境下MongoDB日志管理技巧
日志的基础管理需从路径设置和级别调整入手。默认情况下,MongoDB日志存储在/var/log/mongodb/mongod.log(可通过ls /var/log/mongodb/确认)。修改配置需编辑/etc/mongod.conf文件,关键参数说明:
systemLog.destination:设为file(文件存储,推荐)或syslog(系统日志);systemLog.path:指定日志文件路径(如/var/log/mongodb/mongod.log);systemLog.logAppend:设为true(追加模式,避免重启覆盖日志);systemLog.verbosity:控制日志详细程度(0=仅警告/错误,1=默认,5=所有操作详情,值越大日志越详细)。sudo systemctl restart mongod。为防止日志文件过大占用磁盘空间,需通过logrotate工具定期轮转、压缩和清理日志。步骤如下:
sudo apt-get install logrotate;sudo nano /etc/logrotate.d/mongodb,添加以下内容(可根据需求调整):/var/log/mongodb/*.log {
daily # 每天轮转(也可设为weekly/monthly)
rotate 7 # 保留最近7个日志文件
compress # 使用gzip压缩旧日志(节省空间)
missingok # 若日志文件丢失,不报错
notifempty # 若日志为空,不轮转
create 0640 mongodb mongodb # 新日志文件权限(属主:mongodb,属组:mongodb)
sharedscripts # 所有日志轮转完成后统一执行postrotate
postrotate
/bin/kill -SIGUSR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null || echo 0)
endscript
}
其中,postrotate脚本通过SIGUSR1信号通知MongoDB进程重新打开日志文件,避免日志中断。若需立即轮转日志(如日志文件即将占满磁盘),可通过MongoDB Shell执行命令:
use admin
db.runCommand({ logRotate: 1 })
此命令会强制MongoDB关闭当前日志文件并创建新文件,无需重启服务。
tail命令实时查看日志末尾内容(如sudo tail -f /var/log/mongodb/mongod.log);grep过滤关键字(如错误信息sudo grep "error" /var/log/mongodb/mongod.log);jq工具提取字段(如sudo cat /var/log/mongodb/mongod.log | jq '.msg')。du命令检查日志目录大小(如sudo du -sh /var/log/mongodb/),避免占用过多磁盘空间;cron定时任务定期删除超过一定时间的日志(如每月1号删除30天前的日志),示例脚本:#!/bin/bash
find /var/log/mongodb/ -name "*.log.*" -mtime +30 -exec rm -f {} \;
将脚本保存为/etc/cron.monthly/clean_mongodb_logs,并赋予执行权限:sudo chmod +x /etc/cron.monthly/clean_mongodb_logs。