温馨提示×

MongoDB日志分析在Ubuntu上如何进行

小樊
45
2025-11-29 01:00:39
栏目: 云计算

Ubuntu 上 MongoDB 日志分析实操指南

一 准备与定位日志

  • 默认路径与配置文件
    • 日志目录:/var/log/mongodb/,常见日志文件:mongod.log(部分安装包或旧版本可能为 mongodb.log)。
    • 配置文件:/etc/mongod.conf(YAML 格式)。
  • 快速查看与实时跟踪
    • 查看末尾 100 行:sudo tail -n 100 /var/log/mongodb/mongod.log
    • 实时跟踪:sudo tail -f /var/log/mongodb/mongod.log
  • 在 Shell 内获取日志组件与内容
    • 查看组件:db.getLogComponents()
    • 获取全部日志:db.adminCommand({ getLog: 1 })

二 命令行快速分析

  • 错误与告警速览
    • 过去 1 小时E/F 级日志:grep -E 'E|F' /var/log/mongodb/mongod.log | awk '$1 > "2025-11-29T10:00" {print}'
  • 按时间统计错误量(按小时)
    • cat /var/log/mongodb/mongod.log | grep -oP '\d{4}-\d{2}-\d{2}T\d{2}' | sort | uniq -c
  • 定位慢查询与全表扫描
    • 示例特征:I COMMAND ... planSummary: COLLSCAN ... docsExamined:500000(无索引导致全表扫描)
    • 优化建议:为过滤字段建立索引,例如 db.users.createIndex({age: 1})
  • 临时调整日志粒度(排查期间)
    • 降低阈值以捕获更多细节:db.setLogLevel(1)(排查完成后恢复为 0

三 使用 mtools 做深度分析

  • 安装
    • sudo pip3 install mtools
  • 常用命令
    • 统计概览:mloginfo /var/log/mongodb/mongod.log
    • 按时间窗口与阈值筛选慢查询(示例阈值 100 ms):mlogfilter /var/log/mongodb/mongod.log --from "2025-11-29T00:00:00" --to "+8h" --slow 100 | tail -n 20
    • 按命名空间聚合绘图(识别高频/高扫描命名空间):mplotqueries /var/log/mongodb/mongod.log --group namespace --output-file ns_scan.png

四 配置与运维要点

  • 慢查询阈值与 profiling
    • 配置文件方式(推荐持久化):
      • YAML 片段:
        systemLog:
          destination: file
          path: /var/log/mongodb/mongod.log
          logAppend: true
        operationProfiling:
          slowOpThresholdMs: 100
          mode: all
        
    • 动态设置阈值:db.setLogLevel(1) 或使用 --setParameter slowMS=100 启动参数(版本支持时)
  • 日志轮转 logrotate(避免磁盘被占满)
    • 新建或编辑:sudo vim /etc/logrotate.d/mongodb
    • 示例策略(按天轮转、保留 7 天、压缩、按大小触发、轮转后通知 mongod 重新打开日志):
      /var/log/mongodb/mongod.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
          sharedscripts
          copytruncate
          dateext
          size 200M
          postrotate
              /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
          endscript
      }
      
  • 日志级别与组件
    • 运行时查看与调整:db.getLogComponents()db.setLogLevel(1)(排查完成后恢复为 0

五 典型异常模式与处置

  • 连接风暴与文件描述符不足
    • 日志特征:W NETWORK [threadmongod] Too many open files (96% threshold)
    • 处置要点:检查 ulimit -n,在 /etc/security/limits.conf 提升 mongodnofile(如 64000),并重启会话/服务生效
  • 副本集心跳异常
    • 日志特征:E REPL [replication] heartbeat failed to secondary2:27017
    • 处置要点:先做网络连通性测试,再检查副本集状态与 Oplog 窗口,必要时触发重新同步
  • 存储引擎异常
    • 日志特征:F STORAGE [WT-Thread] WiredTiger error: 31802
    • 处置要点:执行 db.serverStatus().storageEngine 核实引擎状态,必要时使用 mongod --repair 修复数据文件(先做好备份)

0