mongodb_exporter 默认不采集 transactions.committed 指标,因其未实现对 serverStatus.metrics.transactions 路径的解析;需启用 --collector.serverstatus 并使用 percona 分支版本或 textfile 方式手动导出。

mongodb_exporter 默认不采集事务提交数(transactions.committed)这类指标,因为 MongoDB 原生的 serverStatus 和 dbStats 命令在 6.0+ 版本中虽暴露了事务统计字段,但 mongodb_exporter 的默认收集器(如 --collector.dbstats、--collector.replicasetstatus)并未将其映射为 Prometheus 指标。
为什么 metrics 中看不到 transactions_committed_total?
这是设计限制,不是配置遗漏。查看 mongodb_exporter --help 输出,你会发现没有类似 --collector.transactions 的开关;其源码中 dbstats_collector.go 仅提取 db.stats() 的基础字段(objects、dataSize 等),而事务计数属于 serverStatus.metrics.transactions 下的嵌套结构,需额外解析逻辑。
-
serverStatus返回的事务字段示例:"metrics": { "transactions": { "committed": 12345, "aborted": 678, "open": {"current": 2} } } 但
mongodb_exporter当前(v0.9.x ~ v1.0.x)未实现对该路径的指标导出
如何让 Prometheus 监控事务每秒提交数?
必须绕过默认 collector,改用自定义 Prometheus 查询 + MongoDB 内置命令暴露的指标:
- 启动
mongodb_exporter时启用--collector.serverstatus(它会抓取完整serverStatus输出) - 确保 MongoDB 用户具备
clusterMonitor角色(否则serverStatus被拒绝) - 在 Prometheus 中用
rate()计算每秒提交数:
在 Prometheus 表达式浏览器中输入:
rate(mongodb_server_status_metrics_transactions_committed_total[1m])
注意:该指标名是否生效,取决于你使用的
mongodb_exporter版本是否支持自动展开serverStatus.metrics.transactions—— 实测 v0.8.0+ 的 percona 分支(percona/mongodb_exporter)已支持,但官方mongodb/exporter(dcu 分支)仍不支持。-
若指标不存在,可临时用
textfile方式手动采集:- 写个脚本定期执行:
mongo --eval "printjson(db.runCommand({serverStatus:1}).metrics.transactions.committed)" - 将结果写入
/var/lib/node_exporter/textfile_collector/txn.prom,格式为:mongodb_txn_committed_total 12345 - 配合
node_exporter --collector.textfile.directory暴露给 Prometheus
- 写个脚本定期执行:
验证 mongodb_exporter 是否真正拉到了事务数据
直接访问 exporter 的 /metrics 端点,搜索关键词:
执行:
curl -s <a href="https://www.php.cn/link/0b47657d6bcf28d3ea29ccea75dec4bc">https://www.php.cn/link/0b47657d6bcf28d3ea29ccea75dec4bc</a> | grep -i transaction如果返回空,说明当前版本不支持 → 必须升级到 percona 维护的
percona/mongodb_exporter镜像(Docker Hub 可搜),或自行 patch collector如果返回类似:
mongodb_server_status_metrics_transactions_committed_total 12345,则确认可用,后续只需加rate()即可-
常见坑:
- 未启用
--collector.serverstatus,却指望事务指标出现 - MongoDB 连接用户权限不足,
serverStatus返回空或报错,exporter 日志里会出现"command serverStatus requires authentication" - 使用了 SRV URI 但没加
--mongodb.direct-connect=false,导致连接失败,事务字段自然为空
- 未启用
事务指标不是“开箱即用”的功能,它卡在 exporter 解析层,而不是 Prometheus 配置层。别在 prometheus.yml 里反复调参数,先确认 /metrics 输出里有没有原始值。


















