怎样监控MongoDB Linux运行状态
导读:MongoDB Linux 运行状态监控实操指南 一 快速巡检命令 使用 mongostat 实时查看吞吐与连接: 命令:mongostat --host **localhost** --port **27017** --usernam...
MongoDB Linux 运行状态监控实操指南
一 快速巡检命令
- 使用 mongostat 实时查看吞吐与连接:
- 命令:
mongostat --host **localhost** --port **27017** --username **admin** --password **yourpassword** --authenticationDatabase **admin** - 关注字段:insert/query/update/delete(每秒操作数)、conn(当前连接数)、qr/qw(读/写队列)、faults(缺页/换页)、locked(锁占比)、mem(内存使用)。
- 命令:
- 使用 mongotop 观察集合读写耗时:
- 命令:
mongotop --host **localhost** --port **27017** --username **admin** --password **yourpassword** --authenticationDatabase **admin** - 关注:ns(命名空间)、total(总耗时 ms)、read/write(读写耗时),定位热点集合与慢操作。
- 命令:
- 使用 mongo shell 获取全局与集合指标:
- 全局状态:
db.serverStatus()(返回 JSON,含 connections、mem、network、opcounters、wiredTiger 等) - 集合统计:
use yourdb; db.yourCollection.stats()(含 count、size、storageSize、totalIndexSize、avgObjSize 等)。
- 全局状态:
二 图形化与可视化监控
- MongoDB Compass:官方 GUI,连接实例后可直观查看 性能指标、索引使用情况、查询分析,适合开发与日常巡检。
- Prometheus + Grafana(推荐生产使用):
- 部署 MongoDB Exporter,在 Prometheus 配置抓取任务(job_name: mongodb,targets 指向 exporter 地址/端口),在 Grafana 导入 MongoDB 仪表盘进行可视化与告警配置。
- 企业级方案:MongoDB Ops Manager(官方,功能完备,适合需要更完善监控、备份与自动化管理的场景)。
三 系统层面监控
- 进程与资源:
top -p $(cat **/var/run/mongodb/mongod.pid**)或htop观察 CPU、内存 占用。iostat -x 1检查 磁盘 I/O 与 await/rrqm/s 等指标。vmstat 1观察 swap、上下文切换、CPU 等待。
- 日志排查:
tail -f **/var/log/mongodb/mongod.log**实时查看 启动信息、慢查询、复制与分片状态、错误告警。
四 关键指标与告警阈值示例
| 维度 | 关键指标 | 建议告警阈值 | 说明 |
|---|---|---|---|
| 连接 | connections.current / connections.available | current 持续接近 available | 连接池紧张,可能拒绝新连接 |
| 操作吞吐 | opcounters.insert/query/update/delete per sec | 突增或骤降 | 业务异常或阻塞征兆 |
| 延迟与队列 | qr/qw、locked、globalLock.totalTime | qr/qw 长期大于 0 或 locked 高 | 读写被阻塞,需查锁与慢查询 |
| 内存与页面错误 | mem.resident、mem.virtual、faults | faults 持续大于 0 | 频繁缺页,磁盘 I/O 压力或内存不足 |
| 存储引擎 | wiredTiger.cache.、wiredTiger.concurrentTransactions.、wiredTiger.checkpoint | cache 使用率长期高、checkpoint 频繁 | 可能需调优 WT 缓存或检查磁盘 |
| 复制与分片 | replSetGetStatus、replication lag、sharding | replication lag 持续增长 | 主从延迟或分片不均衡 |
| 磁盘 | iostat await、svctm、util | await 高、util 接近 100% | 磁盘成为瓶颈,影响写入与查询 |
| 日志 | mongod.log 错误/慢查询 | 出现错误日志或慢查询增多 | 及时优化查询与索引、修复错误 |
五 一键巡检脚本示例
#!/usr/bin/env bash
set -e
HOST="localhost"
PORT="27017"
USER="admin"
PASS="yourpassword"
AUTH_DB="admin"
LOG="/var/log/mongodb/mongod.log"
PID_FILE="/var/run/mongodb/mongod.pid"
echo "=== MongoDB 快速巡检 $(date) ==="
# 1) mongostat
echo -e "\n[1/5] mongostat (10秒采样):"
mongostat --host "$HOST" --port "$PORT" -u "$USER" -p "$PASS" --authenticationDatabase "$AUTH_DB" --rowcount 10
# 2) mongotop
echo -e "\n[2/5] mongotop (10秒采样):"
mongotop --host "$HOST" --port "$PORT" -u "$USER" -p "$PASS" --authenticationDatabase "$AUTH_DB" --rowcount 10
# 3) 连接数与内存
echo -e "\n[3/5] 连接与内存:"
mongo --host "$HOST" --port "$PORT" -u "$USER" -p "$PASS" --authenticationDatabase "$AUTH_DB" --quiet <
<
'EOF'
db.serverStatus().connections
db.serverStatus().mem
EOF
# 4) 复制状态
echo -e "\n[4/5] 复制状态:"
mongo --host "$HOST" --port "$PORT" -u "$USER" -p "$PASS" --authenticationDatabase "$AUTH_DB" --quiet <
<
'EOF'
rs.status().members.forEach(function(m){
print(m.name,m.stateStr,m.optimeDate,JSON.stringify(m.lastHeartbeatMessage||""))}
)
EOF
# 5) 错误与慢查询日志尾部
echo -e "\n[5/5] 最近错误与慢查询日志尾部 (20行):"
tail -n 20 "$LOG" | egrep -i "error|fail|warning|slow query"
echo -e "\n=== 巡检完成 ==="
- 使用方式:保存为
mongo_check.sh,执行chmod +x mongo_check.sh & & ./mongo_check.sh。 - 注意:将 USER/PASS/HOST/PORT 替换为实际值;确保本机已安装 mongostat/mongotop/mongo,且 PID_FILE 路径与系统一致。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样监控MongoDB Linux运行状态
本文地址: https://pptw.com/jishu/751285.html
