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
相关产品推荐
相关产品推荐

