Ubuntu 上监控 MongoDB 性能的可落地方案
一 快速排障的命令行工具
- 使用 mongostat 观察全局负载:每秒输出关键指标,如 inserts/s、queries/s、updates/s、deletes/s、conn、locked %,用于快速判断是否存在高并发、锁争用或连接瓶颈。示例:
mongostat --uri="mongodb://user:pass@192.168.1.10:27017/?authSource=admin"。若 locked % 持续偏高,优先排查慢查询与索引缺失。
- 使用 mongotop 定位热点集合:按集合统计 read/write 耗时,快速识别“耗时操作集中的集合”。示例:
mongotop --uri="mongodb://user:pass@192.168.1.10:27017/?authSource=admin"。
- 使用 db.serverStatus() / db.stats() / db.collection.stats() 获取更细的指标:如 连接数、内存映射、索引访问、数据/存储大小 等,用于容量与结构层面的诊断。
- 建议创建 只读监控用户 并授予 clusterMonitor 角色,避免使用高权限账户执行监控;生产可配合日志轮转与定时任务留存
mongostat/mongotop 输出。
二 图形化与可视化监控
- MongoDB Compass:官方 GUI,直接连接实例即可查看 性能指标、索引、查询分析 等,适合开发/DBA 日常巡检与问题定位。
- MongoDB Cloud Manager / Ops Manager:官方托管/企业级方案,提供 仪表板、告警、备份与自动化 等能力,适合生产级持续监控与运维。
- Grafana + Prometheus + MongoDB Exporter:开源可扩展方案。部署 MongoDB Exporter(默认端口常见为 9216 或 9333),在 Prometheus 中抓取 Exporter,在 Grafana 中创建或导入 MongoDB 仪表盘,常用查询示例:
- 实例存活:
mongodb_up
- 操作速率:
rate(mongodb_op_counters_total[5m])
- 连接数:
mongodb_connections{state="current"}
- 数据库大小:
mongodb_db_size_bytes
该方案便于长期留存、告警与多维可视化。
三 系统层面的资源监控
- 结合 Linux 工具排查瓶颈:
- top/htop:观察 mongod 进程的 CPU、内存 使用。
- iostat -x 1:查看 磁盘 I/O 利用率、await、svctm,定位磁盘成为瓶颈的场景。
- vmstat 1:关注 swap、上下文切换、CPU 等待,识别系统级资源紧张。
- 与 MongoDB 指标联动分析:例如 iostat 显示高写延迟时,配合
mongostat 的 insert/update 与 mongotop 的热点集合定位写入压力来源。
四 监控落地与告警建议
- 角色与权限:为监控创建 最小权限 账户,授予 clusterMonitor;避免使用 root。
- 持续采集与留存:将 mongostat/mongotop 输出重定向到日志并轮转;在 Prometheus 中设置抓取间隔(如 15s),在 Grafana 配置 阈值告警(如连接数、操作延迟、复制滞后)。
- 关键指标与阈值示例:
- 连接数接近 maxIncomingConnections:检查连接泄漏或连接池配置。
- locked % 持续偏高:优化慢查询、补充缺失索引、减少大事务。
- 复制滞后(repl lag)增长:关注主从/分片网络与写入压力,必要时扩容或调整写关注。
- 页面错误(page faults)增多:检查 内存/工作集 与 WiredTiger 缓存 配置。
- 慢查询治理:启用 Profiler 记录慢操作,结合 explain() 与索引优化,降低读写耗时。