You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计MongoDB副本集单日CRUD操作总数?日志提取不可行

嘿,这个问题我在日常运维中碰到过好多次——因为慢查询日志只捕获超过slowms阈值的操作,确实没法用来统计全量CRUD总数。给你几个实用的解决办法,按需选用:

1. 用mongostat快速临时统计

mongostat是MongoDB自带的命令行监控工具,能实时输出实例的核心操作指标,包括insert、query、update、delete这些CRUD项。你可以把它的输出持久化到文件,之后统计单日总和:

  • 启动采集的命令(以每10分钟输出一行,持续一天为例):
    mongostat --host <你的副本集主节点地址> --username <用户名> --password <密码> --authenticationDatabase admin --rowcount 144 600 > crud_daily.log
    
    解释:--rowcount 144对应一天24小时×6个10分钟,600是每10分钟(600秒)采样一次。
  • 统计总和的awk命令:
    awk '{sum_ins+=$2; sum_qry+=$3; sum_upd+=$4; sum_del+=$5} END {
        print "单日Insert总数: " sum_ins
        print "单日Query总数: " sum_qry
        print "单日Update总数: " sum_upd
        print "单日Delete总数: " sum_del
    }' crud_daily.log
    
2. 用db.serverStatus()做定时采集

db.serverStatus()返回的opcounters字段,记录了实例启动以来的累计CRUD操作数。你可以写个简单脚本,定期采集这个数值,通过计算单日首尾的差值得到总数:

  • 示例Shell脚本(每小时采集一次):
    #!/bin/bash
    MONGO_HOST="你的主节点地址"
    MONGO_USER="用户名"
    MONGO_PASS="密码"
    LOG_FILE="./daily_crud_tracking.log"
    
    while true; do
        # 获取当前时间戳
        ts=$(date +"%Y-%m-%d %H:%M:%S")
        # 采集opcounters的四个核心指标
        counters=$(mongo --host $MONGO_HOST --username $MONGO_USER --password $MONGO_PASS --authenticationDatabase admin --eval '
            var stats = db.serverStatus().opcounters;
            print(stats.insert, stats.query, stats.update, stats.delete);
        ')
        # 写入日志
        echo "$ts $counters" >> $LOG_FILE
        # 每小时执行一次
        sleep 3600
    done
    
  • 统计时,提取当天最早和最晚的两组数值,分别相减就能得到单日各操作的总数。
3. 临时启用数据库Profiler(需注意性能)

如果需要不仅是总数,还要更详细的操作明细,可以临时开启数据库Profiler。但要注意,Profiler会带来一定性能开销,建议只在需要时启用,用完及时关闭:

  • 开启全量记录(级别2):
    db.setProfilingLevel(2)
    
  • 统计单日CRUD总数:
    db.system.profile.aggregate([
        { $match: {
            ts: {
                $gte: ISODate("2024-05-20T00:00:00Z"),
                $lt: ISODate("2024-05-21T00:00:00Z")
            }
        }},
        { $group: { _id: "$op", total: { $sum: 1 } } }
    ])
    
  • 用完记得关闭Profiler:
    db.setProfilingLevel(0)
    
4. 部署长期监控工具(适合持续统计)

如果需要长期追踪CRUD指标,推荐用专业监控方案:

  • Prometheus + MongoDB Exporter:MongoDB Exporter会自动采集opcounters等核心指标,Prometheus存储时序数据后,用Grafana就能轻松生成单日CRUD统计的可视化面板。
  • MongoDB Atlas:如果用的是Atlas云服务,自带的监控控制台里直接有操作数的趋势图,一键就能查看单日CRUD总数,无需额外配置。

注意:副本集的CRUD操作都在主节点执行,所以只需要统计主节点的指标即可,副本节点的同步操作不需要纳入统计。

内容的提问来源于stack exchange,提问作者Telen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:18:14