Skip to content

Commit a4d222f

Browse files
committed
Fix mongodb_connections metric for mongos instances
1 parent bb5ed80 commit a4d222f

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

exporter/diagnostic_data_collector.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,25 @@ func (d *diagnosticDataCollector) collect(ch chan<- prometheus.Metric) {
108108
logger.Error("cannot decode getDiagnosticData", "error", err)
109109
}
110110

111+
// For mongos, getDiagnosticData returns empty data, so fall back to serverStatus
112+
if nodeType == typeMongos && len(m) == 0 {
113+
logger.Debug("getDiagnosticData returned empty data for mongos, falling back to serverStatus")
114+
serverStatusCmd := bson.D{{Key: "serverStatus", Value: "1"}}
115+
serverStatusRes := client.Database("admin").RunCommand(d.ctx, serverStatusCmd)
116+
if serverStatusRes.Err() != nil {
117+
logger.Error("failed to run serverStatus command for mongos", "error", serverStatusRes.Err())
118+
} else {
119+
var serverStatusData bson.M
120+
if err := serverStatusRes.Decode(&serverStatusData); err != nil {
121+
logger.Error("cannot decode serverStatus for mongos", "error", err)
122+
} else {
123+
// Wrap serverStatus data in the expected structure for makeMetrics
124+
m = bson.M{"serverStatus": serverStatusData}
125+
logger.Debug("Successfully retrieved serverStatus data for mongos")
126+
}
127+
}
128+
}
129+
111130
logger.Debug("getDiagnosticData result")
112131
debugResult(logger, m)
113132

0 commit comments

Comments
 (0)