diff --git a/prometheus/counter.go b/prometheus/counter.go index 765e455..2f87690 100644 --- a/prometheus/counter.go +++ b/prometheus/counter.go @@ -136,7 +136,8 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { return &CounterVec{ metricVec: newMetricVec(desc, func(lvs ...string) Metric { if len(lvs) != len(desc.variableLabels) { - panic(errInconsistentCardinality) + err := fmt.Errorf("%s: labels and values for '%s' don't match: labels %v, values %v", errInconsistentCardinality, desc.fqName, desc.variableLabels, lvs) + panic(err) } result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} result.init(result) // Init self-collection. diff --git a/prometheus/gauge.go b/prometheus/gauge.go index 17c72d7..f335458 100644 --- a/prometheus/gauge.go +++ b/prometheus/gauge.go @@ -147,7 +147,8 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { return &GaugeVec{ metricVec: newMetricVec(desc, func(lvs ...string) Metric { if len(lvs) != len(desc.variableLabels) { - panic(errInconsistentCardinality) + err := fmt.Errorf("%s: labels and values for '%s' don't match: labels %v, values %v", errInconsistentCardinality, desc.fqName, desc.variableLabels, labelValues) + panic(err) } result := &gauge{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} result.init(result) // Init self-collection. diff --git a/prometheus/histogram.go b/prometheus/histogram.go index 4d7fa97..58b4f3b 100644 --- a/prometheus/histogram.go +++ b/prometheus/histogram.go @@ -165,7 +165,8 @@ func NewHistogram(opts HistogramOpts) Histogram { func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogram { if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) + err := fmt.Errorf("%s: labels and values for '%s' don't match: labels %v, values %v", errInconsistentCardinality, desc.fqName, desc.variableLabels, labelValues) + panic(err) } for _, n := range desc.variableLabels { diff --git a/prometheus/labels.go b/prometheus/labels.go index e68f132..8173f56 100644 --- a/prometheus/labels.go +++ b/prometheus/labels.go @@ -39,7 +39,7 @@ var errInconsistentCardinality = errors.New("inconsistent label cardinality") func validateValuesInLabels(labels Labels, expectedNumberOfValues int) error { if len(labels) != expectedNumberOfValues { - return errInconsistentCardinality + return fmt.Errorf("%s: number of labels and values don't match: expected %d, actual %d, labels %v", errInconsistentCardinality, expectedNumberOfValues, len(labels), labels) } for name, val := range labels { diff --git a/prometheus/summary.go b/prometheus/summary.go index f7e92d8..402d73d 100644 --- a/prometheus/summary.go +++ b/prometheus/summary.go @@ -181,7 +181,8 @@ func NewSummary(opts SummaryOpts) Summary { func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) + err := fmt.Errorf("%s: labels and values for '%s' don't match: labels %v, values %v", errInconsistentCardinality, desc.fqName, desc.variableLabels, labelValues) + panic(err) } for _, n := range desc.variableLabels {