阅读量:1
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 路径与系统一致。
以上就是关于“怎样监控MongoDB Linux运行状态”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm