1. 配置日志路径与级别
MongoDB在CentOS上的日志配置主要通过/etc/mongod.conf文件完成。关键参数包括:
/var/log/mongodb/mongod.log),确保目录存在且有写入权限;true(默认),重启后日志会追加到现有文件,避免覆盖历史记录;systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
verbosity: 1
修改后需重启MongoDB服务使配置生效:sudo systemctl restart mongod。
2. 日志轮转管理
为防止日志文件过大占用磁盘空间,需通过logrotate工具实现自动轮转。创建或编辑/etc/logrotate.d/mongodb文件,添加以下规则:
/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
missingok # 若日志文件不存在也不报错
notifempty # 日志为空时不轮转
sharedscripts # 所有日志处理完再执行脚本
copytruncate # 复制原日志后清空,避免重启服务
dateext # 添加日期后缀(如mongod.log-20251015)
size 200M # 单个日志文件超过200MB时轮转
postrotate
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock) # 通知MongoDB重新打开日志文件
endscript
}
确保logrotate定时任务启用(默认每天执行),无需手动配置。
3. 实时查看与过滤日志
tail -f命令实时查看日志更新,例如:tail -f /var/log/mongodb/mongod.log
grep命令筛选特定关键字(如错误error、慢查询slow),例如:grep "error" /var/log/mongodb/mongod.log # 查找错误日志
grep "slow" /var/log/mongodb/mongod.log # 查找慢查询日志
less命令分页浏览日志(支持上下翻页),例如:less /var/log/mongodb/mongod.log
按q退出分页模式。4. 日志分析与优化
db.adminCommand命令查看慢日志(默认阈值100ms),例如:// 查看慢日志配置
db.adminCommand({getParameter: 1, slowMS: 100});
// 获取最近慢日志(按时间倒序)
db.adminCommand({getLog: "slow"}).slice(-10); // 查看最后10条慢日志
5. 日志清理与归档
cat /dev/null > /var/log/mongodb/mongod.log
find命令删除指定天数前的日志文件(如30天前),例如:find /var/log/mongodb/ -name "*.log" -mtime +30 -type f -delete
import os
import shutil
from datetime import datetime
LOG_DIR = '/var/log/mongodb/'
ARCHIVE_DIR = '/var/log/mongodb/archive/'
if not os.path.exists(ARCHIVE_DIR):
os.makedirs(ARCHIVE_DIR)
today = datetime.now().strftime('%Y-%m-%d')
log_file = f"{LOG_DIR}mongod.log"
archive_file = f"{ARCHIVE_DIR}mongod_{today}.log"
shutil.move(log_file, archive_file)
print(f"日志已归档至 {archive_file}")
通过cron定时任务(如每天凌晨1点执行)运行脚本,实现自动化归档。6. 高级技巧:集中日志管理(可选)
对于分布式环境或多节点MongoDB集群,可使用Graylog等集中日志管理工具,将MongoDB日志发送到Graylog服务器,实现日志的聚合、搜索、告警和审计。安装Graylog需配置Java、Elasticsearch和MongoDB,具体步骤参考Graylog官方文档。