You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB副本集场景下mongodb_exporter仅采集单实例指标如何解决

根因说明

mongodb_exporter默认工作在单节点采集模式,哪怕你填写了包含所有副本集成员的连接URI,它只会和副本集选举出的单个可用节点(通常是主节点,或者第一个可达的节点)建立连接,仅采集该节点的指标,不会自动遍历所有副本集成员。

解决方法

方案1:每个MongoDB实例单独部署对应mongodb_exporter(生产环境最推荐,稳定性最高)

  • 给3个MongoDB节点分别启动对应的mongodb_exporter容器,每个exporter的连接URI仅填写对应单个节点的地址,比如对应mongo-1的exporter就使用mongodb://mongo-1:27018/
  • 修改Prometheus的抓取配置,给3个exporter实例分别添加标识节点的自定义标签,方便后续Grafana做过滤区分,参考配置片段:
scrape_configs:
  - job_name: "mongodb"
    static_configs:
      - targets: ["mongo-0-exporter:9216"]
        labels:
          mongodb_node: "mongo-0:27017"
          replica_set: "rs0"
      - targets: ["mongo-1-exporter:9216"]
        labels:
          mongodb_node: "mongo-1:27018"
          replica_set: "rs0"
      - targets: ["mongo-2-exporter:9216"]
        labels:
          mongodb_node: "mongo-2:27019"
          replica_set: "rs0"

方案2:单exporter开启副本集自动发现采集(适合小规模测试场景)

如果不想部署多个exporter,可以启动时开启自动发现副本集成员的参数,启动命令示例:

docker run -d -p 9216:9216 percona/mongodb_exporter:0.40 \
  --mongodb.uri="mongodb://mongo-0:27017,mongo-1:27018,mongo-2:27019/?replicaSet=rs0" \
  --collector.replicasetstatus \
  --discovering-mode
  • 该模式下exporter会自动遍历所有副本集成员采集指标,要求配置的MongoDB账号拥有所有节点的clusterMonitor角色权限,且exporter所在网络可以直接访问三个节点的MongoDB端口
  • 采集到的指标会自动携带节点标签区分不同实例
Grafana单Dashboard配置方法
  • 新增Dashboard变量mongodb_node,值取标签mongodb_node的所有枚举值
  • 所有面板的PromQL查询语句中统一添加过滤条件{replica_set="rs0", mongodb_node="$mongodb_node"},即可实现下拉切换查看不同节点的监控数据;如果需要同时展示所有节点的指标,在PromQL中按mongodb_node分组即可。

注意:如果MongoDB开启了身份认证,需要确保连接URI中的账号有足够权限,否则会出现指标采集不全的问题。

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:09:02