linux

MongoDB Linux版日志如何查看与分析

小樊
47
2025-10-18 14:30:48
栏目: 云计算

一、MongoDB Linux版日志查看方法

  1. 确定日志文件路径
    MongoDB在Linux系统上的默认日志路径为/var/log/mongodb/mongod.log,可通过MongoDB配置文件(/etc/mongod.conf)中的systemLog.path参数确认或修改路径。

  2. 基础查看命令

    • 使用cat命令查看完整日志内容:cat /var/log/mongodb/mongod.log
    • 使用tail命令实时追踪日志变化(如tail -f /var/log/mongodb/mongod.log),或查看最后N行(如tail -n 100 /var/log/mongodb/mongod.log);
    • 使用less命令分页查看日志(支持上下滚动和关键词搜索,如less /var/log/mongodb/mongod.log)。
  3. 通过MongoDB Shell查看

    • 执行db.getLogComponents()查看当前日志组件配置(如各模块的日志级别);
    • 执行db.adminCommand({getLog: 1})获取MongoDB服务端的最新日志条目。
  4. 实时监控技巧
    若需持续观察特定事件(如连接、查询),可结合tail -fgrep过滤,例如:tail -f /var/log/mongodb/mongod.log | grep "query",实时显示所有查询操作。

二、MongoDB Linux版日志分析方法

  1. 基础分析命令

    • 使用grep筛选特定日志类型(如慢查询):grep "slow query" /var/log/mongodb/mongod.log
    • 使用awk统计慢查询数量(假设慢查询日志中包含"ms"且时间超过1000ms):cat /var/log/mongodb/mongod.log | grep "query" | awk '{print $9}' | awk -F "ms" '{if ($1 > 1000) print $1}' | wc -l
  2. 使用mtools工具集分析
    mtools是一组开源命令行工具,专门用于处理MongoDB日志,常用功能包括:

    • mloginfo:查看日志基本信息(如日志时长、操作类型分布):mloginfo /var/log/mongodb/mongod.log
    • mlogfilter:筛选特定时间范围或操作类型的日志(如筛选2025-05-01至2025-05-02的find查询):mlogfilter /var/log/mongodb/mongod.log --from "2025-05-01T00:00:00" --to "2025-05-02T00:00:00" --query '{ "command": "find" }'
    • mplotqueries:生成可视化图表(如查询时间分布、命名空间操作统计),需配合--group参数(如按命名空间分组):mplotqueries /var/log/mongodb/mongod.log --group namespace --output-file query_stats.png
  3. 使用jq工具解析JSON日志
    若日志为JSON格式(需确认systemLog.jsonFormat设置为true),可使用jq提取特定字段(如持续时间超过6000毫秒的查询):jq '. | select(.attr.durationMillis >= 6000)' /var/log/mongodb/mongod.log

  4. 日志轮转与清理

    • 配置logrotate自动轮转日志(避免单个文件过大),编辑/etc/logrotate.d/mongodb文件,添加如下配置(每天轮转、保留7天、压缩旧日志):
      /var/log/mongodb/mongod.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
          sharedscripts
          copytruncate
          dateext
          postrotate
              /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
          endscript
      }
      ```;  
      
    • 手动触发日志轮转:执行db.adminCommand({logRotate: 1}),无需重启服务。

0
看了该问题的人还看了