MongoDB自带的监控工具(mongostat、mongotop)
MongoDB提供了两个内置的监控工具mongostat
和mongotop
,它们能够实时展示数据库的运行状态和性能指标。这两个工具不需要额外安装,直接通过命令行即可使用,适合快速诊断数据库问题。
mongostat的基本用法
mongostat
类似于Linux系统的vmstat
,它以固定时间间隔(默认1秒)采样并返回MongoDB实例的统计信息。基本命令格式如下:
mongostat --host <hostname>:<port> --username <user> --password <pass> --authenticationDatabase admin
如果不指定认证信息,默认连接到本地27017端口的MongoDB实例:
mongostat
输出示例:
insert query update delete getmore command flushes mapped vsize res faults qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 0 80.0M 1.21G 50.0M 0 0|0 0|0 79b 10k 1 14:02:45
*0 *0 *0 *0 0 1|0 0 80.0M 1.21G 50.0M 0 0|0 0|0 79b 10k 1 14:02:46
mongostat输出字段详解
每个字段代表特定时间间隔内的统计值:
-
操作计数器(单位:次/秒)
insert
/query
/update
/delete
:增删改查操作次数getmore
:游标批量获取操作command
:管理命令执行次数
-
存储引擎指标
flushes
:WAL刷新次数(MMAPv1引擎)vsize
:虚拟内存用量res
:物理内存用量
-
性能指标
faults
:页错误数(仅MMAPv1)qr|qw
:读写队列长度netIn
/netOut
:网络流量(字节)
mongostat高级用法
通过参数可以定制监控内容:
# 每5秒采样一次,显示20次后退出
mongostat --rowcount 20 --interval 5
# 只显示指定字段
mongostat --discover -o "host=HOST,time=TIME,qr=QR,qw=QW"
# 监控副本集所有成员
mongostat --host rs0/example1:27017,example2:27017 --discover
mongotop的基本用法
mongotop
用于监控集合级别的读写时间消耗,类似于Linux的top
命令。基本使用方式:
mongotop --host localhost:27017
输出示例:
ns total read write
admin.system.roles 0ms 0ms 0ms
test.users 105ms 30ms 75ms
local.oplog.rs 50ms 50ms 0ms
mongotop输出解读
- ns:命名空间(数据库.集合)
- total:总耗时(毫秒)
- read/write:读写操作耗时占比
mongotop高级配置
# 每3秒刷新一次,持续10次
mongotop --interval 3 --rowcount 10
# JSON格式输出
mongotop --json
# 监控指定数据库
mongotop --host localhost --username admin --password pass --authenticationDatabase admin test
实际应用场景示例
场景一:识别慢查询
mongotop -n 10 # 显示耗时最高的10个集合
场景二:诊断写入瓶颈
mongostat -o "insert,update,delete,dirty,used" # 关注写入相关指标
场景三:内存压力分析
mongostat --noheaders --rowcount 60 --interval 5 | grep -v "connected to" > stats.log
与第三方工具的集成
可以通过管道将监控数据传递给其他工具处理:
// Node.js处理mongostat输出示例
const { exec } = require('child_process');
const mongostat = exec('mongostat --json');
mongostat.stdout.on('data', (data) => {
const stats = JSON.parse(data);
console.log(`Current ops: ${stats.insert} inserts/s`);
});
监控分片集群
对于分片集群需要特殊处理:
# 监控所有mongos实例
for shard in shard1:27017 shard2:27018; do
mongostat --host $shard >> cluster_stats.log &
done
安全注意事项
- 监控工具需要
clusterMonitor
角色权限 - 生产环境建议使用TLS加密连接:
mongostat --host dbserver --ssl --sslCAFile /path/to/ca.pem
性能影响评估
默认采样间隔下监控工具的资源消耗:
- CPU占用:< 1%
- 网络流量:约2KB/s(基础指标)
- 内存消耗:约10MB
长期监控建议采用以下策略:
# 每天生成一个日志文件
mongostat --rowcount 86400 --interval 1 > $(date +%Y%m%d).log
指标异常处理指南
当出现特定指标异常时可参考以下应对措施:
指标异常 | 可能原因 | 检查方向 |
---|---|---|
qw持续>0 | 写入阻塞 | 检查磁盘IOPS、journal性能 |
netOut突增 | 大量数据返回 | 检查查询是否未使用索引 |
res持续增长 | 内存泄漏 | 检查workingSet是否超出物理内存 |
历史数据分析技巧
将监控数据导入MongoDB自身进行分析:
// 将mongostat输出存入集合
use admin
db.createCollection("server_stats")
mongostat --json | mongo --eval '
while (line=readline()) {
db.server_stats.insert(JSON.parse(line))
}
'
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn