Skip to content

Commit 60e985c

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 dc4e454 commit 60e985c

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
@@ -198,7 +198,9 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
198198
registry.MustRegister(ic)
199199
}
200200

201-
if e.opts.EnableDiagnosticData && requestOpts.EnableDiagnosticData {
201+
// getDiagnosticData does not return any data on mongos.
202+
collectDiagnosticData := e.opts.EnableDiagnosticData && nodeType != typeMongos && requestOpts.EnableDiagnosticData
203+
if collectDiagnosticData {
202204
ddc := newDiagnosticDataCollector(ctx, client, e.opts.Logger,
203205
e.opts.CompatibleMode, topologyInfo)
204206
registry.MustRegister(ddc)
@@ -216,17 +218,20 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
216218
registry.MustRegister(tc)
217219
}
218220

219-
// replSetGetStatus is not supported through mongos.
220-
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
221-
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
222-
e.opts.CompatibleMode, topologyInfo)
223-
registry.MustRegister(rsgsc)
224-
}
221+
// Only collect replica set and server status separately if we're not already fetching via diagnostic data
222+
if !collectDiagnosticData {
223+
// replSetGetStatus is not supported through mongos.
224+
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
225+
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
226+
e.opts.CompatibleMode, topologyInfo)
227+
registry.MustRegister(rsgsc)
228+
}
225229

226-
if e.opts.EnableServerStatus {
227-
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
228-
e.opts.CompatibleMode, topologyInfo)
229-
registry.MustRegister(ssc)
230+
if e.opts.EnableServerStatus && requestOpts.EnableServerStatus {
231+
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
232+
e.opts.CompatibleMode, topologyInfo)
233+
registry.MustRegister(ssc)
234+
}
230235
}
231236

232237
return registry

exporter/replset_status_collector.go

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

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

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)