@@ -18,6 +18,7 @@ import (
18
18
"fmt"
19
19
"log/slog"
20
20
"math"
21
+ "reflect"
21
22
"strings"
22
23
"sync"
23
24
"time"
@@ -399,6 +400,28 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
399
400
return <- errChannel
400
401
}
401
402
403
+ func (c * MonitoringCollector ) filterDuplicateTimeSeries (
404
+ timeSeries []* monitoring.TimeSeries ,
405
+ ) []* monitoring.TimeSeries {
406
+ var keptTimeSeries []* monitoring.TimeSeries
407
+
408
+ for _ , timeSerie := range timeSeries {
409
+ var skip = false
410
+
411
+ for _ , keptTimeSerie := range keptTimeSeries {
412
+ // Did we already find a timeSerie with the exact same key-value labels?
413
+ if reflect .DeepEqual (timeSerie .Metric .Labels , keptTimeSerie .Metric .Labels ) {
414
+ skip = true
415
+ break
416
+ }
417
+ }
418
+ if ! skip {
419
+ keptTimeSeries = append (keptTimeSeries , timeSerie )
420
+ }
421
+ }
422
+ return keptTimeSeries
423
+ }
424
+
402
425
func (c * MonitoringCollector ) reportTimeSeriesMetrics (
403
426
page * monitoring.ListTimeSeriesResponse ,
404
427
metricDescriptor * monitoring.MetricDescriptor ,
@@ -408,6 +431,7 @@ func (c *MonitoringCollector) reportTimeSeriesMetrics(
408
431
var metricValue float64
409
432
var metricValueType prometheus.ValueType
410
433
var newestTSPoint * monitoring.Point
434
+ var uniqueTimeSeries []* monitoring.TimeSeries
411
435
412
436
timeSeriesMetrics , err := newTimeSeriesMetrics (metricDescriptor ,
413
437
ch ,
@@ -419,7 +443,12 @@ func (c *MonitoringCollector) reportTimeSeriesMetrics(
419
443
if err != nil {
420
444
return fmt .Errorf ("error creating the TimeSeriesMetrics %v" , err )
421
445
}
422
- for _ , timeSeries := range page .TimeSeries {
446
+
447
+ // Make sure we don't feed Prometheus duplicate time series if the
448
+ // metrics page gives us some.
449
+ uniqueTimeSeries = c .filterDuplicateTimeSeries (page .TimeSeries )
450
+
451
+ for _ , timeSeries := range uniqueTimeSeries {
423
452
newestEndTime := time .Unix (0 , 0 )
424
453
for _ , point := range timeSeries .Points {
425
454
endTime , err := time .Parse (time .RFC3339Nano , point .Interval .EndTime )
0 commit comments