温馨提示×

MongoDB在Ubuntu上的日志管理如何操作

小樊
39
2025-12-20 17:25:28
栏目: 云计算

MongoDB 在 Ubuntu 上的日志管理实操指南

一 定位与查看日志

  • 默认日志路径通常为:/var/log/mongodb/mongod.log;配置文件为:/etc/mongod.conf。使用以下命令快速查看:
    • 实时查看最新日志:sudo tail -f /var/log/mongodb/mongod.log
    • 查看服务启动/停止记录:在服务日志中检索关键字(如“started”“stopped”“mongod”)或使用 journalctl:sudo journalctl -u mongod -f
    • 确认配置中的日志路径:grep -n “systemLog.path” /etc/mongod.conf
  • 若采用 systemd 管理,也可通过 sudo journalctl -u mongod 查看标准输出与错误输出。

二 配置日志输出与级别

  • 编辑配置文件:sudo nano /etc/mongod.conf,在 systemLog 段落设置:
    • 输出目的地:destination: file(或 stderr)
    • 追加模式:logAppend: true
    • 日志路径:path: /var/log/mongodb/mongod.log
    • 全局日志详细度:verbosity: 0–5(数值越大越详细)
  • 动态调节(无需重启):在 mongo shell 中执行 db.setLogLevel(2)。
  • 组件级日志:db.getLogComponents() 查看组件,db.setLogLevel(1, “query”) 仅提升查询组件日志级别。
  • 应用修改:sudo systemctl restart mongod

三 日志轮转与清理

  • 推荐方式一 systemd-journald(无侵入)
    • 保持 mongod 使用 systemLog.destination: file,journald 负责服务日志的轮转与持久化;按需配置 journald 的 SystemMaxUse、MaxRetentionSec 等参数,避免磁盘被占满。
  • 推荐方式二 logrotate(文件轮转)
    • 新建配置:sudo nano /etc/logrotate.d/mongodb
    • 示例(按日轮转、保留 7 天、压缩、按大小触发、复制后截断):
      /var/log/mongodb/mongod.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
          size 200M
          copytruncate
          dateext
          sharedscripts
          postrotate
              /bin/kill -SIGUSR1 $(cat /var/run/mongod.pid 2>/dev/null) 2>/dev/null || true
          endscript
      }
      
    • 说明:copytruncate 可在不中断写入的情况下轮转;若 systemd 使用 Type=notify,优先用 ExecReload 发送 SIGUSR1 或采用 systemd 原生日志。
  • 方式三 信号轮转脚本(简单场景)
    • 向 mongod 发送 SIGUSR1 触发日志切割:kill -SIGUSR1 $(cat /var/run/mongod.pid)
    • 结合 find 删除 N 天前旧日志并加入 crontab 定时执行。

四 日志分析与慢查询定位

  • 快速过滤错误与致命错误:
    • grep -E ‘E|F’ /var/log/mongodb/mongod.log | tail -n 100
  • 按时间窗口统计错误量(示例:统计每小时错误数)
    • cat /var/log/mongodb/mongod.log | grep -oP ‘\d{4}-\d{2}-\d{2}T\d{2}’ | sort | uniq -c
  • 慢查询与索引问题识别
    • 在 mongo shell 启用慢查询阈值:db.setProfilingLevel(1, { slowms: 100 })
    • 使用 mtools 分析慢查询:mlogfilter mongod.log --slow 100 --from “2025-12-20T00:00:00” | head
  • 典型异常模式
    • 连接风暴/文件描述符不足:W NETWORK “Too many open files”
    • 全表扫描:I COMMAND … planSummary: COLLSCAN(建议建立合适索引)

五 运维注意事项

  • 权限与属主:确保日志目录与文件可被 mongodb 用户写入,常见权限为 0640 mongodb:mongodb0640 mongodb:adm
  • 避免日志无限增长:合理设置轮转周期与保留天数(如 daily + rotate 7),并监控磁盘使用率。
  • 动态调级的风险:提高 verbosity 或组件日志级别会显著增加日志量,建议仅在排障期间临时提升并及时恢复。
  • 变更生效方式:涉及配置文件修改需重启服务(sudo systemctl restart mongod);仅调整日志级别可用 db.setLogLevel() 动态生效。

0