Debian系统MongoDB日志配置技巧
MongoDB的日志核心配置位于/etc/mongod.conf文件的systemLog部分,需重点设置三项参数:
path指定日志文件位置(默认/var/log/mongodb/mongod.log),建议使用绝对路径;logAppend: true,确保MongoDB重启后日志不会被覆盖,而是追加到现有文件末尾;verbosity调整详细程度,取值范围0-5(0=仅致命错误,1=错误+启动/关闭信息,2=一般信息(默认),3=调试信息,4=详细调试信息,5=最详细跟踪)。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-20251029)
size 200M # 单个日志超过200MB时轮转
postrotate # 轮转后执行的命令
/bin/kill -SIGUSR1 `cat /var/log/mongodb/mongod.lock` 2>/dev/null || true
endscript
}
此配置可自动管理日志文件大小和数量,防止占用过多磁盘空间。
use admin; db.setLogLevel(1);(1=一般信息,可根据需求调整为0-5)。/etc/mongod.conf中的verbosity参数,重启服务后生效。tail -f /var/log/mongodb/mongod.log查看实时日志,确认级别是否生效。tail -f /var/log/mongodb/mongod.log实时查看最新日志;less /var/log/mongodb/mongod.log分页查看历史日志。grep筛选特定信息,如grep "error" /var/log/mongodb/mongod.log查找错误日志,grep "slow query" /var/log/mongodb/mongod.log查找慢查询。jq工具提取字段,如sudo cat /var/log/mongodb/mongod.log | jq '.msg'提取日志消息主体,sudo cat /var/log/mongodb/mongod.log | jq '.attr.operation'提取操作类型。import os
import shutil
from datetime import datetime
LOG_DIR = '/var/log/mongodb/'
ARCHIVE_DIR = '/var/log/mongodb/archive/'
os.makedirs(ARCHIVE_DIR, exist_ok=True)
today = datetime.now().strftime('%Y-%m-%d')
log_file = f"{LOG_DIR}mongod.log"
archive_file = f"{ARCHIVE_DIR}mongod_{today}.log.gz"
if os.path.exists(log_file):
shutil.move(log_file, archive_file)
print(f"日志已归档至 {archive_file}")
find命令定期删除30天前的归档日志,例如:find /var/log/mongodb/archive/ -name "mongod_*.log.gz" -mtime +30 -delete
可将此命令添加到crontab中,每天凌晨执行。logrotate配置中添加dateext参数,生成带日期的日志文件(如mongod.log-20251029)。syslog或fluentd等工具实现集中管理,便于大规模集群的日志分析。