From 4323d1b0c4af5fafd9851ee0435104bf4b327ddd Mon Sep 17 00:00:00 2001 From: Joachim Folz Date: Sat, 6 Sep 2025 18:11:29 +0200 Subject: [PATCH] Prometheus plugin: Allow vector result (support for VictoriaMetrics) (#23437) --- plugin/prometheus.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/plugin/prometheus.go b/plugin/prometheus.go index 45f0ff772..625978ee0 100644 --- a/plugin/prometheus.go +++ b/plugin/prometheus.go @@ -93,12 +93,24 @@ func (p *Prometheus) FloatGetter() (func() (float64, error), error) { return 0, err } - if res.Type() != model.ValScalar { - return 0, fmt.Errorf("query returned value of type %q, expected %q, consider wrapping query in scalar()", res.Type().String(), model.ValScalar.String()) + if res.Type() == model.ValScalar { + scalarVal := res.(*model.Scalar) + return float64(scalarVal.Value), nil } - scalarVal := res.(*model.Scalar) - return float64(scalarVal.Value), nil + if res.Type() == model.ValVector { + vectorVal := res.(model.Vector) + if vectorVal.Len() != 1 { + return 0, fmt.Errorf("query must return exactly 1 metric, got %d instead", vectorVal.Len()) + } + metric := vectorVal[0] + if metric.Histogram != nil { + return 0, fmt.Errorf("query returned histogram, expected value") + } + return float64(metric.Value), nil + } + + return 0, fmt.Errorf("query returned value of type %q, expected %q or %q", res.Type().String(), model.ValScalar.String(), model.ValVector.String()) }, nil }