mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-12 16:44:05 -08:00
PromQL: improve warning for mixed values in aggregations
Aggregations discard the metric name, so don't try to include it in the error message. Add a test that generates this warning. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
4d6bb2e0e4
commit
22890b1eb3
|
@ -2869,8 +2869,7 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, grouping []string, par
|
||||||
case parser.AVG:
|
case parser.AVG:
|
||||||
if aggr.hasFloat && aggr.hasHistogram {
|
if aggr.hasFloat && aggr.hasHistogram {
|
||||||
// We cannot aggregate histogram sample with a float64 sample.
|
// We cannot aggregate histogram sample with a float64 sample.
|
||||||
metricName := aggr.labels.Get(labels.MetricName)
|
annos.Add(annotations.NewMixedFloatsHistogramsAggWarning(e.Expr.PositionRange()))
|
||||||
annos.Add(annotations.NewMixedFloatsHistogramsWarning(metricName, e.Expr.PositionRange()))
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if aggr.hasHistogram {
|
if aggr.hasHistogram {
|
||||||
|
@ -2923,8 +2922,7 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, grouping []string, par
|
||||||
case parser.SUM:
|
case parser.SUM:
|
||||||
if aggr.hasFloat && aggr.hasHistogram {
|
if aggr.hasFloat && aggr.hasHistogram {
|
||||||
// We cannot aggregate histogram sample with a float64 sample.
|
// We cannot aggregate histogram sample with a float64 sample.
|
||||||
metricName := aggr.labels.Get(labels.MetricName)
|
annos.Add(annotations.NewMixedFloatsHistogramsAggWarning(e.Expr.PositionRange()))
|
||||||
annos.Add(annotations.NewMixedFloatsHistogramsWarning(metricName, e.Expr.PositionRange()))
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if aggr.hasHistogram {
|
if aggr.hasHistogram {
|
||||||
|
|
|
@ -4315,6 +4315,8 @@ func TestNativeHistogram_Sum_Count_Add_AvgOperator(t *testing.T) {
|
||||||
|
|
||||||
ts := idx0 * int64(10*time.Minute/time.Millisecond)
|
ts := idx0 * int64(10*time.Minute/time.Millisecond)
|
||||||
app := storage.Appender(context.Background())
|
app := storage.Appender(context.Background())
|
||||||
|
_, err := app.Append(0, labels.FromStrings("__name__", "float_series", "idx", "0"), ts, 42)
|
||||||
|
require.NoError(t, err)
|
||||||
for idx1, h := range c.histograms {
|
for idx1, h := range c.histograms {
|
||||||
lbls := labels.FromStrings("__name__", seriesName, "idx", fmt.Sprintf("%d", idx1))
|
lbls := labels.FromStrings("__name__", seriesName, "idx", fmt.Sprintf("%d", idx1))
|
||||||
// Since we mutate h later, we need to create a copy here.
|
// Since we mutate h later, we need to create a copy here.
|
||||||
|
@ -4344,17 +4346,31 @@ func TestNativeHistogram_Sum_Count_Add_AvgOperator(t *testing.T) {
|
||||||
|
|
||||||
res := qry.Exec(context.Background())
|
res := qry.Exec(context.Background())
|
||||||
require.NoError(t, res.Err)
|
require.NoError(t, res.Err)
|
||||||
|
require.Empty(t, res.Warnings)
|
||||||
|
|
||||||
vector, err := res.Vector()
|
vector, err := res.Vector()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
testutil.RequireEqual(t, exp, vector)
|
testutil.RequireEqual(t, exp, vector)
|
||||||
}
|
}
|
||||||
|
queryAndCheckAnnotations := func(queryString string, ts int64, expWarnings annotations.Annotations) {
|
||||||
|
qry, err := engine.NewInstantQuery(context.Background(), storage, nil, queryString, timestamp.Time(ts))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
res := qry.Exec(context.Background())
|
||||||
|
require.NoError(t, res.Err)
|
||||||
|
require.Equal(t, expWarnings, res.Warnings)
|
||||||
|
}
|
||||||
|
|
||||||
// sum().
|
// sum().
|
||||||
queryString := fmt.Sprintf("sum(%s)", seriesName)
|
queryString := fmt.Sprintf("sum(%s)", seriesName)
|
||||||
queryAndCheck(queryString, ts, []Sample{{T: ts, H: &c.expected, Metric: labels.EmptyLabels()}})
|
queryAndCheck(queryString, ts, []Sample{{T: ts, H: &c.expected, Metric: labels.EmptyLabels()}})
|
||||||
|
|
||||||
|
queryString = `sum({idx="0"})`
|
||||||
|
var annos annotations.Annotations
|
||||||
|
annos.Add(annotations.NewMixedFloatsHistogramsAggWarning(posrange.PositionRange{Start: 4, End: 13}))
|
||||||
|
queryAndCheckAnnotations(queryString, ts, annos)
|
||||||
|
|
||||||
// + operator.
|
// + operator.
|
||||||
queryString = fmt.Sprintf(`%s{idx="0"}`, seriesName)
|
queryString = fmt.Sprintf(`%s{idx="0"}`, seriesName)
|
||||||
for idx := 1; idx < len(c.histograms); idx++ {
|
for idx := 1; idx < len(c.histograms); idx++ {
|
||||||
|
|
|
@ -105,7 +105,7 @@ var (
|
||||||
|
|
||||||
InvalidQuantileWarning = fmt.Errorf("%w: quantile value should be between 0 and 1", PromQLWarning)
|
InvalidQuantileWarning = fmt.Errorf("%w: quantile value should be between 0 and 1", PromQLWarning)
|
||||||
BadBucketLabelWarning = fmt.Errorf("%w: bucket label %q is missing or has a malformed value", PromQLWarning, model.BucketLabel)
|
BadBucketLabelWarning = fmt.Errorf("%w: bucket label %q is missing or has a malformed value", PromQLWarning, model.BucketLabel)
|
||||||
MixedFloatsHistogramsWarning = fmt.Errorf("%w: encountered a mix of histograms and floats for metric name", PromQLWarning)
|
MixedFloatsHistogramsWarning = fmt.Errorf("%w: encountered a mix of histograms and floats for ", PromQLWarning)
|
||||||
MixedClassicNativeHistogramsWarning = fmt.Errorf("%w: vector contains a mix of classic and native histograms for metric name", PromQLWarning)
|
MixedClassicNativeHistogramsWarning = fmt.Errorf("%w: vector contains a mix of classic and native histograms for metric name", PromQLWarning)
|
||||||
NativeHistogramNotCounterWarning = fmt.Errorf("%w: this native histogram metric is not a counter:", PromQLWarning)
|
NativeHistogramNotCounterWarning = fmt.Errorf("%w: this native histogram metric is not a counter:", PromQLWarning)
|
||||||
NativeHistogramNotGaugeWarning = fmt.Errorf("%w: this native histogram metric is not a gauge:", PromQLWarning)
|
NativeHistogramNotGaugeWarning = fmt.Errorf("%w: this native histogram metric is not a gauge:", PromQLWarning)
|
||||||
|
@ -155,7 +155,16 @@ func NewBadBucketLabelWarning(metricName, label string, pos posrange.PositionRan
|
||||||
func NewMixedFloatsHistogramsWarning(metricName string, pos posrange.PositionRange) error {
|
func NewMixedFloatsHistogramsWarning(metricName string, pos posrange.PositionRange) error {
|
||||||
return annoErr{
|
return annoErr{
|
||||||
PositionRange: pos,
|
PositionRange: pos,
|
||||||
Err: fmt.Errorf("%w %q", MixedFloatsHistogramsWarning, metricName),
|
Err: fmt.Errorf("%w metric name %q", MixedFloatsHistogramsWarning, metricName),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMixedFloatsHistogramsAggWarning is used when the queried series includes both
|
||||||
|
// float samples and histogram samples in an aggregation.
|
||||||
|
func NewMixedFloatsHistogramsAggWarning(pos posrange.PositionRange) error {
|
||||||
|
return annoErr{
|
||||||
|
PositionRange: pos,
|
||||||
|
Err: fmt.Errorf("%w aggregation", MixedFloatsHistogramsWarning),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue