Skip to content

Commit

Permalink
extend logging for detected duplicated labels
Browse files Browse the repository at this point in the history
  • Loading branch information
cristiangreco committed Sep 26, 2024
1 parent 1d2077a commit ec1739a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
4 changes: 2 additions & 2 deletions pkg/promutil/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,8 @@ func EnsureLabelConsistencyAndRemoveDuplicates(metrics []*PrometheusMetric, obse
}

if len(observedLabels) != metric.LabelsLen() {
logger.Warn("metric has duplicate labels", "metric_name", metric.Name(), "observed_labels", len(observedLabels), "labels_len", metric.LabelsLen())
metric.RemoveDuplicateLabels()
duplicates := metric.RemoveDuplicateLabels()
logger.Warn("metric has duplicate labels", "metric_name", metric.Name(), "observed_labels", len(observedLabels), "labels_len", metric.LabelsLen(), "duplicated_labels", duplicates)
}

metricKey := metric.Name() + "-" + strconv.FormatUint(metric.LabelsSignature(), 10)
Expand Down
6 changes: 5 additions & 1 deletion pkg/promutil/prometheus.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,19 +203,23 @@ func (p *PrometheusMetric) AddIfMissingLabelPair(key, val string) {
}
}

func (p *PrometheusMetric) RemoveDuplicateLabels() {
func (p *PrometheusMetric) RemoveDuplicateLabels() []string {
seen := map[string]struct{}{}
duplicates := []string{}
idx := 0
for i, key := range p.labels.keys {
if _, ok := seen[key]; !ok {
seen[key] = struct{}{}
p.labels.keys[idx] = key
p.labels.vals[idx] = p.labels.vals[i]
idx++
} else {
duplicates = append(duplicates, key)
}
}
p.labels.keys = p.labels.keys[:idx]
p.labels.vals = p.labels.vals[:idx]
return duplicates
}

type PrometheusCollector struct {
Expand Down
11 changes: 6 additions & 5 deletions pkg/promutil/prometheus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,13 @@ func TestPrometheusMetric(t *testing.T) {
})

t.Run("RemoveDuplicateLabels", func(t *testing.T) {
metric := NewPrometheusMetric("metric", []string{"key1", "key1"}, []string{"value1", "value2"}, 1.0)
require.Equal(t, 2, metric.LabelsLen())
metric.RemoveDuplicateLabels()
metric := NewPrometheusMetric("metric", []string{"key1", "key2", "key1", "key3"}, []string{"value-key1", "value-key2", "value-dup-key1", "value-key3"}, 1.0)
require.Equal(t, 4, metric.LabelsLen())
duplicates := metric.RemoveDuplicateLabels()
keys, vals := metric.Labels()
require.Equal(t, []string{"key1"}, keys)
require.Equal(t, []string{"value1"}, vals)
require.Equal(t, []string{"key1", "key2", "key3"}, keys)
require.Equal(t, []string{"value-key1", "value-key2", "value-key3"}, vals)
require.Equal(t, []string{"key1"}, duplicates)
})
}

Expand Down

0 comments on commit ec1739a

Please sign in to comment.