一、配置日志路径与级别
MongoDB在Linux上的日志管理首先需通过配置文件(通常为/etc/mongod.conf)设置日志的输出路径、级别及追加方式。关键参数如下:
file(文件存储);/var/log/mongodb/mongod.log(需确保目录存在且属主为mongodb用户);true,确保日志追加到现有文件而非覆盖;二、日志轮转配置
为防止日志文件过大占用磁盘空间,需通过logrotate工具实现自动化轮转。步骤如下:
sudo apt-get install logrotate;CentOS/RHEL:sudo yum install logrotate)。/etc/logrotate.d/mongodb,添加以下内容:/var/log/mongodb/mongod.log {
daily # 每天轮转
rotate 7 # 保留7个旧日志文件
compress # 压缩旧日志(gzip)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
create 640 mongodb mongodb # 新日志文件权限与所有者
sharedscripts # 所有日志轮转完成后执行postrotate
postrotate
/bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock) # 触发MongoDB重新打开日志文件
endscript
}
若需按大小轮转,可将daily替换为size 200M(当日志文件达到200MB时轮转),并添加dateext(保留日期后缀,如mongod.log-20251106)。三、日志查看与实时监控
tail -f命令追踪日志文件的实时更新,例如:tail -f /var/log/mongodb/mongod.log
可结合grep过滤关键信息(如错误日志:tail -f /var/log/mongodb/mongod.log | grep -i "error")。less分页查看(less /var/log/mongodb/mongod.log)或head查看前几行(head -n 20 /var/log/mongodb/mongod.log)。四、日志分析与诊断
db.getLogComponents())或获取所有日志(db.adminCommand({ getLog: 1 }));手动触发日志轮转可使用db.runCommand({ logRotate: 1 })。sudo pip3 install mtools;常用命令:mlogfilter(筛选慢查询)、mplotqueries(生成查询散点图)、mloginfo(日志统计)。grep "COMMAND" /var/log/mongodb/mongod.log | awk '/ms > 100/ {print $0}'。五、日志备份与归档
rsync或cp命令将日志复制到备份目录,例如:sudo rsync -av /var/log/mongodb/mongod.log /backup/mongodb/
import os
import shutil
from datetime import datetime
LOG_DIR = '/var/log/mongodb/'
ARCHIVE_DIR = '/var/log/mongodb/archive/'
def archive_logs():
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}")
def clean_old_logs():
files_in_archive = os.listdir(ARCHIVE_DIR)
for file in files_in_archive:
file_path = os.path.join(ARCHIVE_DIR, file)
if os.path.isfile(file_path):
if os.path.getmtime(file_path) < time.time() - 30 * 86400: # 30天前
os.remove(file_path)
print(f"已删除过期日志:{file_path}")
六、注意事项
/var/log/mongodb/)属主为mongodb用户(chown mongodb:mongodb /var/log/mongodb/),避免权限问题导致日志无法写入。df -h定期检查日志分区使用情况,设置阈值告警(如90%),防止磁盘满导致服务中断。verbosity为0,仅在调试时临时提高;开启logAppend避免日志覆盖;合理设置rotate参数(如保留7天或200MB),平衡日志保留需求与磁盘空间。