Add more label checksn during gathering
Including check for an invalid "quantile" label in summaries. Also, improve error messages. Signed-off-by: beorn7 <beorn@soundcloud.com>
This commit is contained in:
parent
e064aa97f1
commit
767a0218df
|
@ -740,7 +740,7 @@ temperature_kelvin 4.5
|
||||||
// temperature_kelvin{location="outside"} 273.14
|
// temperature_kelvin{location="outside"} 273.14
|
||||||
// temperature_kelvin{location="somewhere else"} 4.5
|
// temperature_kelvin{location="somewhere else"} 4.5
|
||||||
// ----------
|
// ----------
|
||||||
// collected metric temperature_kelvin label:<name:"location" value:"outside" > gauge:<value:265.3 > was collected before with the same name and label values
|
// collected metric "temperature_kelvin" { label:<name:"location" value:"outside" > gauge:<value:265.3 > } was collected before with the same name and label values
|
||||||
// # HELP humidity_percent Humidity in %.
|
// # HELP humidity_percent Humidity in %.
|
||||||
// # TYPE humidity_percent gauge
|
// # TYPE humidity_percent gauge
|
||||||
// humidity_percent{location="inside"} 33.2
|
// humidity_percent{location="inside"} 33.2
|
||||||
|
|
|
@ -783,14 +783,28 @@ func checkMetricConsistency(
|
||||||
metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil ||
|
metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil ||
|
||||||
metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil {
|
metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"collected metric %s %s is not a %s",
|
"collected metric %q { %s} is not a %s",
|
||||||
metricFamily.GetName(), dtoMetric, metricFamily.GetType(),
|
metricFamily.GetName(), dtoMetric, metricFamily.GetType(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, labelPair := range dtoMetric.GetLabel() {
|
for _, labelPair := range dtoMetric.GetLabel() {
|
||||||
|
if !checkLabelName(labelPair.GetName()) {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"collected metric %q { %s} has a label with an invalid name: %s",
|
||||||
|
metricFamily.GetName(), dtoMetric, labelPair.GetName(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if dtoMetric.Summary != nil && labelPair.GetName() == quantileLabel {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"collected metric %q { %s} must not have an explicit %q label",
|
||||||
|
metricFamily.GetName(), dtoMetric, quantileLabel,
|
||||||
|
)
|
||||||
|
}
|
||||||
if !utf8.ValidString(labelPair.GetValue()) {
|
if !utf8.ValidString(labelPair.GetValue()) {
|
||||||
return fmt.Errorf("collected metric's label %s is not utf8: %#v", labelPair.GetName(), labelPair.GetValue())
|
return fmt.Errorf(
|
||||||
|
"collected metric %q { %s} has a label named %q whose value is not utf8: %#v",
|
||||||
|
metricFamily.GetName(), dtoMetric, labelPair.GetName(), labelPair.GetValue())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,7 +823,7 @@ func checkMetricConsistency(
|
||||||
}
|
}
|
||||||
if _, exists := metricHashes[h]; exists {
|
if _, exists := metricHashes[h]; exists {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"collected metric %s %s was collected before with the same name and label values",
|
"collected metric %q { %s} was collected before with the same name and label values",
|
||||||
metricFamily.GetName(), dtoMetric,
|
metricFamily.GetName(), dtoMetric,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,7 +249,7 @@ metric: <
|
||||||
|
|
||||||
expectedMetricFamilyInvalidLabelValueAsText := []byte(`An error has occurred during metrics gathering:
|
expectedMetricFamilyInvalidLabelValueAsText := []byte(`An error has occurred during metrics gathering:
|
||||||
|
|
||||||
collected metric's label constname is not utf8: "\xff"
|
collected metric "name" { label:<name:"constname" value:"\377" > label:<name:"labelname" value:"different_val" > counter:<value:42 > } has a label named "constname" whose value is not utf8: "\xff"
|
||||||
`)
|
`)
|
||||||
|
|
||||||
type output struct {
|
type output struct {
|
||||||
|
|
Loading…
Reference in New Issue