温馨提示×

MongoDB在Ubuntu上如何处理日志

小樊
48
2025-11-15 03:27:21
栏目: 云计算

MongoDB 在 Ubuntu 上的日志处理指南

一 配置日志输出与级别

  • 配置文件通常为:/etc/mongod.conf。常用配置项如下:
    • systemLog.destination:输出目标,设为 file(文件)或 syslog(系统日志)。
    • systemLog.path:日志文件路径,如 /var/log/mongodb/mongod.log
    • systemLog.logAppend:设为 true,避免重启后覆盖历史日志。
    • systemLog.verbosity:日志详细程度,范围 0–5(0 仅错误,5 调试)。
    • 示例片段:
      systemLog:
        destination: file
        logAppend: true
        path: /var/log/mongodb/mongod.log
        verbosity: 1
      
  • 修改后应用:
    sudo systemctl restart mongod
    
  • 说明:若使用旧版包,配置文件名可能为 /etc/mongodb.conf

二 日志轮转的两种方式

  • 方式 A:内置轮换
    • 触发方式:
      • 向进程发送 SIGUSR1sudo kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock)
      • mongosh 中执行:db.adminCommand({ logRotate: "server" })
    • 行为:默认 rename,会重命名当前日志并在文件名后追加 UTC 时间戳,然后新建日志文件继续写入。
  • 方式 B:配合 logrotate 使用 reopen
    • 配置要点:在 /etc/mongod.confsystemLog.logRotate 设为 reopen,并确保 systemLog.logAppend: true
    • 示例 /etc/logrotate.d/mongodb
      /var/log/mongodb/mongod.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        sharedscripts
        postrotate
          /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock)
        endscript
      }
      
    • 说明:使用 reopen 时由 logrotate 负责重命名/压缩旧日志,MongoDB 收到 SIGUSR1 后重新打开同名日志文件继续写入。

三 查看与分析日志

  • 实时查看:sudo tail -f /var/log/mongodb/mongod.log
  • 组件与级别:
    • 查看组件:db.getLogComponents()
    • 动态调级:db.setLogLevel(<level>, "<component>")
    • 获取全部日志:db.adminCommand({ getLog: 1 })
  • 日志格式与工具:
    • 若日志为 JSON 格式,可用 jq 分析,例如:sudo cat /var/log/mongodb/mongod.log | jq '.msg'
    • 使用 mtools(如 mlogfilter、mplotqueries)做慢查询筛选与可视化分析。

四 常见问题与最佳实践

  • 权限与目录:确保 /var/log/mongodb 存在且属主为 mongodb:mongodb,否则日志可能无法写入。
  • 避免重复记录:使用 syslog 时不要同时指定 –logpath;通过 –syslogFacilitysystemLog.syslogFacility 设置设施级别。
  • 审计日志轮换:启用审计时,可用 db.adminCommand({ logRotate: 1 }) 单独轮换审计日志,或设为 server 同时轮换服务器与审计日志。
  • 变更生效:修改 /etc/mongod.conf 后执行 sudo systemctl restart mongodsudo tail -f 验证。
  • 清理策略:结合 logrotaterotatecompress 保留近 7 天或按 size 触发轮转,避免磁盘占满。

0