Ops Manager对分片集群支持开箱即用,但需在所有mongos、shard副本集成员及config server成员上安装Agent;Agent必须正确配置mongoUri、权限和TLS,否则指标采集失败,健康状态显示异常。

Ops Manager 是 MongoDB 官方推荐的、面向生产环境的监控与管理平台,它对分片集群的支持不是“能用”,而是“开箱即用”——只要 Agent 正确部署并连接上所有组件(mongos、shard 副本集、config server 副本集),健康状态就能自动聚合展示。但实际落地时,90% 的问题出在 Agent 配置和组件可见性上,而不是界面操作本身。
Agent 必须安装在所有分片集群节点上,不能只装在 mongos 或 config server 上
很多人误以为只在 mongos 节点装 Agent 就能监控整个集群,这是错的。Ops Manager 的 Agent 是采集端,每个 MongoDB 进程(包括每个 mongod 实例)都需要被独立发现和上报。
-
mongos节点:装 Agent,用于采集路由层指标(如查询分发延迟、chunk 迁移状态) -
shard副本集每个成员(primary + secondaries):都必须装 Agent,否则无法看到该 shard 的内存、opcounters、复制延迟等真实指标 -
config server副本集每个成员:同样要装 Agent,否则sh.status()级别的元数据同步状态、config 副本集健康度会显示为“unknown” - Agent 启动后默认监听本地
localhost:27017,如果 MongoDB 实例绑定了非默认端口或非本地地址,必须在 Agent 配置文件中显式设置mms.agent.mongoUri,例如:mongodb://127.0.0.1:27018/?connectTimeoutMS=5000
sh.status() 输出不全?检查 Ops Manager 是否识别了全部分片和 config server
在 Ops Manager Web 界面点击某个部署 → METRICS → 左侧导航栏展开 “Sharding”,如果看不到所有 shard 名称,或 configReplSet 显示为离线,说明 Agent 没有成功连接对应实例,或者该实例未被正确加入集群拓扑。
- 登录任意
mongos,执行sh.status(),确认输出里列出的所有shard和config server地址,是否都和 Ops Manager 中已注册的 Agent 主机名/IP 一致 - Agent 日志路径通常是
/var/log/mongodb-mms-automation-agent.log,搜索关键词"Failed to connect"或"No reachable servers",常见原因是防火墙阻断、URI 权限不足(没配 authSource)、或 TLS 配置不匹配 - 如果使用自签名证书,需在 Agent 配置中添加
mms.agent.tlsAllowInvalidCertificates=true,否则连接mongod时直接失败
关键健康指标在哪看,以及为什么不能只盯“绿色”状态
Ops Manager 的健康状态页(Deployment → Health)顶部显示“Healthy”只是最粗粒度判断,真正影响分片稳定性的细节藏在子页面里:
-
Chunk distribution图表:查看各shard的 chunk 数量是否严重倾斜(比如一个 shard 有 1200 个 chunk,另一个只有 80),这会导致负载不均甚至迁移卡住 -
Replication Lag(在每个 shard 成员的 Metrics 页):secondary 落后 primary 超过 5 秒,就可能拖慢mongos的读请求(尤其开启readPreference=secondaryPreferred时) -
Config Server Oplog Size:config server 的 oplog 如果太小(比如oplogSizeMB: 100),在批量 chunk 迁移或元数据变更频繁时容易追丢,导致sh.status()报 “config server not reachable” -
Network I/O和Page Faults/sec:这两个指标同时飙升,大概率是某个 shard 内存不足开始频繁换页,需要立刻查db.serverStatus().mem和vmstat 1
自动告警必须手动配,且要区分“集群级”和“分片级”条件
Ops Manager 默认不启用任何告警,必须进 Alerts → Create Alert 手动配置。对分片集群,两类告警最实用:
- 集群维度:告警类型选
Cluster Health Status,触发条件设为is not Healthy,通知运维群 —— 这是兜底告警 - 分片维度:告警类型选
Metric Threshold,目标选具体某个 shard 副本集,指标选ReplicationLagSecs,阈值设为> 10,持续 2 分钟 —— 这能提前发现 secondary 同步异常 - 别忽略
Config Server Availability告警:一旦 config server 副本集不可用,整个集群将无法进行 chunk 迁移、新增分片、修改分片键等操作,但读写仍可继续,容易被误判为“没事” - 告警规则里的
Group By如果选了Host,那每个mongod实例都会单独发告警;若选Replica Set,则整个副本集只发一条,更合理
shard2b:27018,那个节点的内存和复制延迟就永远是灰色问号。

















