两个粒度的统计入口
db.stats() 给出库级的数据量、索引规模与对象数,db.serverStatus() 给出实例级运行指标:连接数、各类操作计数器、WiredTiger 缓存使用与内存网络情况。它们是自建监控最省事的采集入口,事故排查时也常用于快速判断"是数据量问题还是资源问题"。
基本信息
| 库级 | db.stats() → collections / objects / dataSize / storageSize / indexes |
|---|---|
| 实例级 | db.serverStatus() → connections / opcounters / wiredTiger / mem |
| 集合级 | db.<coll>.stats() → count / size / storageSize / nindexes |
| 权限 | serverStatus 需要 clusterMonitor 一类角色,业务账号只能拿到部分字段 |
| 适用版本 | MongoDB 3.6+ 字段基本一致,新版本会追加指标 |
示例
示例
// 库级概览:数据量、索引占用与集合数
db.stats()
// 集合级:物理占用与索引个数
printjson(db.orders.stats().storageSize)
printjson(db.orders.stats().nindexes)
// 实例级:只取需要的子文档,避免刷屏
const s = db.serverStatus()
printjson(s.connections) // current / available / totalCreated
printjson(s.opcounters) // insert / query / update / delete / command
printjson(s.wiredTiger.cache) // 缓存占用与淘汰情况
// 复制集成员状态与落后时间
rs.status().members.map(m => [m.name, m.stateStr, m.optimeDate])典型使用场景
- 容量评估:用 storageSize 的增长趋势判断扩盘时机
- 连接排查:连接打满时先看 connections.available 还剩多少
- 操作量定位:opcounters 突增说明流量变化或脚本异常
- 缓存压力:WiredTiger 缓存淘汰持续增长说明工作集大于内存
- 复制延迟:结合 rs.status() 的 optimeDate 判断备节点落后程度
关键指标读法
| 指标 | 含义 | 关注点 |
|---|---|---|
| connections.current | 当前连接数 | 接近 available 上限需扩容或收敛连接池 |
| opcounters | 各类操作累计次数 | 突增代表流量变化或异常脚本 |
| dataSize / storageSize | 未压缩逻辑数据量与磁盘占用 | storageSize 通常更小(压缩),差距过小要查压缩配置 |
| indexSize | 索引占用 | 索引越多内存与写入成本越高 |
| wiredTiger.cache | 缓存字节数与淘汰情况 | 持续淘汰说明工作集超过内存 |
serverStatus 输出体量很大,脚本里只取所需子文档;长期监控应交给导出器把指标送进时序库,而不是靠人工反复执行命令。
在集合数量很多的实例上频繁调用 db.stats() 会带来额外开销,巡检频率保持分钟级即可,不需要秒级采集库级统计。