首页主机资讯Ubuntu中MongoDB如何进行日志管理

Ubuntu中MongoDB如何进行日志管理

时间2026-01-20 02:06:05发布访客分类主机资讯浏览1253
导读:Ubuntu 下 MongoDB 日志管理实践 一 定位与查看日志 默认路径与配置文件 日志文件:/var/log/mongodb/mongod.log 配置文件:/etc/mongod.conf(查看其中的 systemLog.pat...

Ubuntu 下 MongoDB 日志管理实践

一 定位与查看日志

  • 默认路径与配置文件
    • 日志文件:/var/log/mongodb/mongod.log
    • 配置文件:/etc/mongod.conf(查看其中的 systemLog.path 可确认实际路径)
  • 常用查看方式
    • 实时查看:tail -f /var/log/mongodb/mongod.log
    • 检索错误:grep -E ‘E|F’ /var/log/mongodb/mongod.log
    • 权限核查:ls -l /var/log/mongodb/mongod.log(如无权限,调整属主/权限后再查看)

二 日志轮转与清理

  • 推荐方式:使用 logrotate(系统自带、稳定可靠)

    1. 新建配置:sudo vim /etc/logrotate.d/mongodb
    2. 写入示例(按日轮转、保留 7 天、压缩、按大小触发、轮转后通知 mongod 重新打开日志):
      /var/log/mongodb/mongod.log {
          
          daily
          rotate 7
          compress
          missingok
          notifempty
          sharedscripts
          copytruncate
          dateext
          size 200M
          postrotate
              /bin/kill -SIGUSR1 $(cat /var/run/mongodb/mongod.pid 2>
          /dev/null) 2>
      /dev/null || true
          endscript
      }
          
      
      • 说明:copytruncate 适用于以文件方式记录日志的场景;若以 syslog 记录,请改为通知 syslog 刷新。
    3. 测试与生效
      • 手动测试:sudo logrotate -d /etc/logrotate.d/mongodb(干跑)
      • 强制执行:sudo logrotate -f /etc/logrotate.d/mongodb
      • 日志轮转后,旧文件会被重命名并压缩,mongod 继续写入新文件。
  • 备选方式:脚本切割 + cron(简单直接)

    1. 切割脚本示例(/usr/local/bin/mongo_log_rotate.sh):
      #!/usr/bin/env bash
      LOG_DIR=/var/log/mongodb
      PID_FILE=/var/run/mongodb/mongod.pid
      KEEP_DAYS=7
      
      # 发送 USR1 触发日志轮转
      if [[ -f "$PID_FILE" ]];
           then
          kill -SIGUSR1 "$(cat "$PID_FILE")" 2>
      /dev/null || true
      fi
      
      # 清理 N 天前旧日志
      find "$LOG_DIR" -name "mongod.log.*" -mtime +"$KEEP_DAYS" -delete
      
    2. 赋权并加入定时任务(每天 23:59 执行):
      • chmod +x /usr/local/bin/mongo_log_rotate.sh
      • echo “59 23 * * * root /usr/local/bin/mongo_log_rotate.sh” | sudo tee -a /etc/crontab
    • 提示:脚本法同样依赖 mongod 对 SIGUSR1 的日志轮转支持。

三 日志级别与组件控制

  • 配置文件设置(持久化)
    • 编辑 /etc/mongod.conf
      systemLog:
        destination: file
        path: /var/log/mongodb/mongod.log
        logAppend: true
        verbosity: 1
      
    • 重启生效:sudo systemctl restart mongod
  • 运行时动态调整(无需重启)
    • 全局级别:db.setLogLevel(1)
    • 组件级别:db.setLogLevel(1, “NETWORK”)
    • 查看组件与级别:db.getLogComponents()
  • 慢查询日志
    • 设置阈值(单位毫秒):db.adminCommand({ setParameter: 1, slowMS: 100 } )
    • 说明:提高日志级别或开启慢查询会增大日志体量,注意磁盘与 I/O 影响。

四 日志分析与可视化

  • 命令行快速分析
    • 过去 1 小时错误:grep -E ‘E|F’ /var/log/mongodb/mongod.log | awk ‘$1 > “2025-08-20T14:00”’
    • 按小时统计错误量:cat mongod.log | grep -oP ‘\d{ 4} -\d{ 2} -\d{ 2} T\d{ 2} ’ | sort | uniq -c
  • 工具链
    • mtools:pip3 install mtools(如 mlogfilter、mplotqueries 做慢查询筛选与可视化)
    • ELK/EFK:将 mongod.log 接入 Elasticsearch + Logstash/Kafka + Kibana,构建仪表盘与告警。

五 关键注意事项

  • 避免日志无限增长:务必配置轮转(logrotate 或 SIGUSR1 脚本),并设置合理的保留天数与压缩策略。
  • 轮转方式选择:使用 file 类型日志时,logrotate 配置 copytruncate 更通用;若采用 syslog,则通过 syslog 的轮转机制处理。
  • 权限与属主:确保 /var/log/mongodb 与日志文件对 mongodb 用户可读写(常见为 mongodb:mongodb,权限 640)。
  • 变更生效:修改 /etc/mongod.conf 后需重启;运行时调级用 db.setLogLevel 即可。
  • 区分日志类型:mongod.log 为服务器运行日志;journal 是 WiredTiger 的写前日志(WAL),用于崩溃恢复,不用于审计或业务排查,勿与 mongod.log 混淆。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu中MongoDB如何进行日志管理
本文地址: https://pptw.com/jishu/786516.html
Ubuntu中如何监控MongoDB运行状态 MongoDB在Ubuntu上的安装步骤是什么

游客 回复需填写必要信息