Skip to content

Commit 70a3bae

Browse files
committed
Prevent duplicate collection and always run renaming/label logic
This change prevents running the replSetGetStatus or serverStatus collectors if those data have been collected already via getDiagnosticData. Provide data from the replSetGetStatus and serverStatus collectors to makeMetrics in a format such that the desired renames and label management actions are carried out. Note that this change is not backwards compatible for anyone running with --collector.replicasetstatus as those metrics will now have a prefix of mongodb_rs_ rather than just mongodb_
1 parent 8019ed4 commit 70a3bae

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

exporter/exporter.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
207207
registry.MustRegister(ic)
208208
}
209209

210-
if e.opts.EnableDiagnosticData && requestOpts.EnableDiagnosticData {
210+
// getDiagnosticData does not return any data on mongos.
211+
collectDiagnosticData := e.opts.EnableDiagnosticData && nodeType != typeMongos && requestOpts.EnableDiagnosticData
212+
if collectDiagnosticData {
211213
ddc := newDiagnosticDataCollector(ctx, client, e.opts.Logger,
212214
e.opts.CompatibleMode, topologyInfo)
213215
registry.MustRegister(ddc)
@@ -237,17 +239,20 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
237239
registry.MustRegister(tc)
238240
}
239241

240-
// replSetGetStatus is not supported through mongos.
241-
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
242-
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
243-
e.opts.CompatibleMode, topologyInfo)
244-
registry.MustRegister(rsgsc)
245-
}
242+
// Only collect replica set and server status separately if we're not already fetching via diagnostic data
243+
if !collectDiagnosticData {
244+
// replSetGetStatus is not supported through mongos.
245+
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
246+
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
247+
e.opts.CompatibleMode, topologyInfo)
248+
registry.MustRegister(rsgsc)
249+
}
246250

247-
if e.opts.EnableServerStatus {
248-
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
249-
e.opts.CompatibleMode, topologyInfo)
250-
registry.MustRegister(ssc)
251+
if e.opts.EnableServerStatus && requestOpts.EnableServerStatus {
252+
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
253+
e.opts.CompatibleMode, topologyInfo)
254+
registry.MustRegister(ssc)
255+
}
251256
}
252257

253258
return registry

exporter/replset_status_collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func (d *replSetGetStatusCollector) collect(ch chan<- prometheus.Metric) {
8181
logger.Debug("replSetGetStatus result:")
8282
debugResult(logger, m)
8383

84-
for _, metric := range makeMetrics("", m, d.topologyInfo.baseLabels(), d.compatibleMode) {
84+
for _, metric := range makeMetrics("", bson.M{"replSetGetStatus": m}, d.topologyInfo.baseLabels(), d.compatibleMode) {
8585
ch <- metric
8686
}
8787
}

exporter/serverstatus_collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func (d *serverStatusCollector) collect(ch chan<- prometheus.Metric) {
7979
logger.Debug("serverStatus result:")
8080
debugResult(logger, m)
8181

82-
for _, metric := range makeMetrics("", m, d.topologyInfo.baseLabels(), d.compatibleMode) {
82+
for _, metric := range makeMetrics("", bson.M{"serverStatus": m}, d.topologyInfo.baseLabels(), d.compatibleMode) {
8383
ch <- metric
8484
}
8585
}

0 commit comments

Comments
 (0)