From 5dd6a44910994714b0ad379acb1187c17b72b31f Mon Sep 17 00:00:00 2001 From: idoko Date: Mon, 27 May 2024 08:56:23 +0100 Subject: [PATCH] split metrics collection --- exporter/diagnostic_data_collector.go | 22 +++++++++++++++++++--- exporter/v1_compatibility.go | 25 +++++-------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/exporter/diagnostic_data_collector.go b/exporter/diagnostic_data_collector.go index e4c48ee60..8666838bd 100644 --- a/exporter/diagnostic_data_collector.go +++ b/exporter/diagnostic_data_collector.go @@ -81,6 +81,7 @@ func (d *diagnosticDataCollector) collect(ch chan<- prometheus.Metric) { } else { if err := res.Decode(&m); err != nil { logger.Errorf("cannot run getDiagnosticData: %s", err) + return } if m == nil || m["data"] == nil { @@ -106,13 +107,28 @@ func (d *diagnosticDataCollector) collect(ch chan<- prometheus.Metric) { } else if securityMetric != nil { metrics = append(metrics, securityMetric) } + + if d.compatibleMode { + metrics = append(metrics, specialMetrics(d.ctx, client, m, nodeType, logger)...) + + if cem, err := cacheEvictedTotalMetric(m); err == nil { + metrics = append(metrics, cem) + } + } } if d.compatibleMode { - metrics = append(metrics, specialMetrics(d.ctx, client, m, logger)...) + buildInfo, err := retrieveMongoDBBuildInfo(d.ctx, client, logger) + if err != nil { + logger.Errorf("cannot retrieve MongoDB buildInfo: %s", err) + } + + metrics = append(metrics, serverVersion(buildInfo)) - if cem, err := cacheEvictedTotalMetric(m); err == nil { - metrics = append(metrics, cem) + if nodeType == typeArbiter { + if hm := arbiterMetrics(d.ctx, client, logger); hm != nil { + metrics = append(metrics, hm...) + } } if nodeType == typeMongos { diff --git a/exporter/v1_compatibility.go b/exporter/v1_compatibility.go index 1c4b81f4d..750f68ecd 100644 --- a/exporter/v1_compatibility.go +++ b/exporter/v1_compatibility.go @@ -782,7 +782,7 @@ func specialMetricDefinitions() []specialMetric { } } -func specialMetrics(ctx context.Context, client *mongo.Client, m bson.M, l *logrus.Logger) []prometheus.Metric { +func specialMetrics(ctx context.Context, client *mongo.Client, m bson.M, nodeType mongoDBNodeType, l *logrus.Logger) []prometheus.Metric { metrics := make([]prometheus.Metric, 0) for _, def := range specialMetricDefinitions() { @@ -802,30 +802,15 @@ func specialMetrics(ctx context.Context, client *mongo.Client, m bson.M, l *logr metrics = append(metrics, metric) } - buildInfo, err := retrieveMongoDBBuildInfo(ctx, client, l) - if err != nil { - l.Errorf("cannot retrieve MongoDB buildInfo: %s", err) - } - - nodeType, err := getNodeType(ctx, client) - if err != nil { - l.WithFields(logrus.Fields{ - "component": "diagnosticDataCollector", - }).Errorf("Cannot get node type: %s", err) - } - if nodeType == typeMongod || nodeType == typeArbiter { - if engine, err := storageEngine(m); err == nil { + if engine, err := storageEngine(m); err != nil { + l.Errorf("cannot retrieve engine type: %s", err) + } else { metrics = append(metrics, engine) } } - metrics = append(metrics, serverVersion(buildInfo)) - if nodeType == typeArbiter { - if hm := arbiterMetrics(ctx, client, l); hm != nil { - metrics = append(metrics, hm...) - } - } else { + if nodeType != typeArbiter { metrics = append(metrics, myState(ctx, client)) if rm := replSetMetrics(m); rm != nil { metrics = append(metrics, rm...)