Skip to content

Commit a632d31

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 c3e1c28 commit a632d31

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

exporter/exporter.go

+16-11
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
179179
registry.MustRegister(ic)
180180
}
181181

182-
if e.opts.EnableDiagnosticData && requestOpts.EnableDiagnosticData {
182+
// getDiagnosticData does not return any data on mongos.
183+
collectDiagnosticData := e.opts.EnableDiagnosticData && nodeType != typeMongos && requestOpts.EnableDiagnosticData
184+
if collectDiagnosticData {
183185
ddc := newDiagnosticDataCollector(ctx, client, e.opts.Logger,
184186
e.opts.CompatibleMode, topologyInfo)
185187
registry.MustRegister(ddc)
@@ -197,17 +199,20 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
197199
registry.MustRegister(tc)
198200
}
199201

200-
// replSetGetStatus is not supported through mongos.
201-
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
202-
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
203-
e.opts.CompatibleMode, topologyInfo)
204-
registry.MustRegister(rsgsc)
205-
}
202+
// Only collect replica set and server status separately if we're not already fetching via diagnostic data
203+
if !collectDiagnosticData {
204+
// replSetGetStatus is not supported through mongos.
205+
if e.opts.EnableReplicasetStatus && nodeType != typeMongos && requestOpts.EnableReplicasetStatus {
206+
rsgsc := newReplicationSetStatusCollector(ctx, client, e.opts.Logger,
207+
e.opts.CompatibleMode, topologyInfo)
208+
registry.MustRegister(rsgsc)
209+
}
206210

207-
if e.opts.EnableServerStatus {
208-
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
209-
e.opts.CompatibleMode, topologyInfo)
210-
registry.MustRegister(ssc)
211+
if e.opts.EnableServerStatus && requestOpts.EnableServerStatus {
212+
ssc := newServerStatusCollector(ctx, client, e.opts.Logger,
213+
e.opts.CompatibleMode, topologyInfo)
214+
registry.MustRegister(ssc)
215+
}
211216
}
212217

213218
return registry

exporter/replset_status_collector.go

+1-1
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

+1-1
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)