debian

Debian系统MongoDB的日志管理技巧

小樊
54
2025-10-17 04:39:54
栏目: 云计算

Debian系统MongoDB日志管理技巧

1. 配置日志路径与级别

日志配置的核心是通过MongoDB配置文件(/etc/mongod.conf)调整路径和详细程度。关键参数说明:

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  verbosity: 1

修改后需重启MongoDB服务使配置生效:sudo systemctl restart mongod

2. 日志轮转管理

日志轮转可防止日志文件过大占用磁盘空间,常用方法有两种:

(1)使用logrotate工具(推荐)

logrotate是Linux系统自带的日志管理工具,需创建自定义配置文件(/etc/logrotate.d/mongodb),内容示例如下:

/var/log/mongodb/mongod.log {
    daily                # 每天轮转一次(可改为weekly/monthly)
    missingok            # 若日志文件丢失,不报错继续执行
    rotate 7             # 保留最近7个轮转日志文件
    compress             # 使用gzip压缩旧日志(节省空间)
    notifempty           # 若日志为空,不进行轮转
    create 0640 mongodb adm  # 创建新日志文件,权限0640,属主mongodb、属组adm
    sharedscripts        # 所有日志轮转完成后执行postrotate脚本
    postrotate           # 轮转后发送SIGUSR1信号,通知mongod重新打开日志文件
        /bin/kill -SIGUSR1 `cat /var/log/mongodb/mongod.lock` 2>/dev/null || true
    endscript
}

配置完成后,logrotate会根据/etc/logrotate.conf中的daily设置自动执行(或手动运行sudo logrotate -vf /etc/logrotate.d/mongodb测试)。

(2)手动触发日志轮转

若不想依赖logrotate,可通过以下两种方式手动轮转:

3. 日志查看与分析

日常运维中,需快速定位问题或监控数据库状态,常用命令:

4. 日志归档与清理

长期运行的MongoDB会产生大量日志,需定期归档旧日志以释放空间:

(1)自动归档脚本

编写Shell脚本(如/usr/local/bin/archive_mongodb_logs.sh),实现日志归档与清理:

#!/bin/bash
LOG_DIR="/var/log/mongodb"
ARCHIVE_DIR="$LOG_DIR/archive"
CURRENT_DATE=$(date +%Y-%m-%d)

# 创建归档目录(若不存在)
mkdir -p "$ARCHIVE_DIR"

# 归档当前日志(移动并重命名)
if [ -f "$LOG_DIR/mongod.log" ]; then
    mv "$LOG_DIR/mongod.log" "$ARCHIVE_DIR/mongod_$CURRENT_DATE.log"
    # 重新创建空日志文件(避免服务中断)
    touch "$LOG_DIR/mongod.log"
    chown mongodb:mongodb "$LOG_DIR/mongod.log"
fi

# 清理30天前的归档日志
find "$ARCHIVE_DIR" -type f -name "mongod_*.log" -mtime +30 -exec rm -f {} \;

添加执行权限并设置crontab每日执行:

sudo chmod +x /usr/local/bin/archive_mongodb_logs.sh
echo "0 0 * * * /usr/local/bin/archive_mongodb_logs.sh" | sudo tee /etc/cron.daily/archive_mongodb_logs

(2)手动清理旧日志

若无需归档,可直接删除超过一定时间的日志文件(如30天前):

sudo find /var/log/mongodb -name "*.log.*" -mtime +30 -exec rm -f {} \;

操作前建议备份重要日志,避免误删。

5. 高级技巧:调整日志组件级别

若需更细粒度的日志控制(如仅记录查询日志、忽略慢查询),可调整日志组件级别:

db.setLogLevel(0, "replication")

注意:修改组件级别后无需重启服务,立即生效。

0
看了该问题的人还看了