悠悠楠杉
MongoDB运行状态查看命令全解析:从基础到高阶监控
一、为什么要监控MongoDB运行状态?
在数据库运维中,实时掌握MongoDB的运行状态就像医生需要病人的生命体征数据。通过状态监控我们可以:
- 发现正在阻塞的慢查询
- 识别内存/CPU的异常消耗
- 预判存储空间的增长趋势
- 诊断复制延迟等集群问题
接下来介绍7种核心监控方法,从基础到高阶层层深入。
二、基础监控命令
1. 查看当前活动操作 - db.currentOp()
```javascript
// 查看所有运行中的操作
db.currentOp()
// 筛选耗时超过3秒的操作
db.currentOp({
"secs_running": { "$gt": 3 }
})
```
输出关键字段解析:
- opid
:操作唯一ID
- secs_running
:已运行时长(秒)
- op
:操作类型(query/insert等)
- ns
:操作的命名空间(库.集合)
2. 数据库健康全景 - db.serverStatus()
javascript
db.runCommand({ serverStatus: 1 })
核心指标:
json
{
"connections": { "current": 15 }, // 当前连接数
"mem": {
"resident": 2048, // 物理内存占用(MB)
"virtual": 4096 // 虚拟内存占用
},
"opcounters": { // 操作计数器
"insert": 1200,
"query": 3500
}
}
三、进阶监控工具
3. 实时系统监控 - mongostat
bash
mongostat --host 127.0.0.1:27017 -u admin -p password
输出示例:
insert query update delete conn qrw arw net_in net_out
100 200 50 2 15 0|0 1|0 1m 2m
字段说明:
- qrw
:查询队列等待数
- net_in
:网络入流量
4. 集合级监控 - db.collection.stats()
javascript
db.users.stats()
重点关注:
- size
:文档总大小
- storageSize
:预分配存储空间
- indexSize
:索引占用空间
四、专业级监控方案
5. 性能分析器 - database profiler
```javascript
// 开启慢查询记录(>100ms)
db.setProfilingLevel(1, 100)
// 查看记录
db.system.profile.find().sort({ ts: -1 }).limit(5)
```
6. 复制集监控
javascript
rs.status()
健康检查要点:
- members.state
:1表示PRIMARY
- optimeDate
:最后一次操作时间
- pingMs
:节点间延迟
7. 分片集群监控
javascript
sh.status()
db.adminCommand({ listShards: 1 })
五、监控数据可视化实践
推荐组合方案:
1. Prometheus + Grafana:
- 使用mongodb_exporter
采集指标
- 配置告警规则
MongoDB Atlas:
- 内置性能监控仪表盘
- 自动异常检测
Percona PMM:
- 开箱即用的监控方案
- 查询分析功能
六、常见问题排查案例
案例1:CPU突然飙升
1. db.currentOp()
查找长时间运行的操作
2. 检查serverStatus()
的opcounters
是否异常
案例2:连接数暴涨
1. 分析db.serverStatus().connections
2. 检查客户端连接池配置
通过组合使用以上工具,您将构建完整的MongoDB监控体系。记住:预防性监控永远比故障后补救更有效。建议至少每周检查一次关键指标,并在业务高峰前做好容量预估。
```