From ecef9404426add8a299d195019b6feac68088338 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Thu, 29 Aug 2024 10:03:37 +0800 Subject: [PATCH] fix(monitor): delete default group by and mean aggregator (#21115) --- go.mod | 2 +- go.sum | 2 + pkg/monitor/models/unifiedmonitor.go | 18 ++++---- .../converter/translator/promql.go | 46 +++++++++++++------ vendor/modules.txt | 2 +- 5 files changed, 46 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 869cb1c831..b64eed8854 100644 --- a/go.mod +++ b/go.mod @@ -66,7 +66,7 @@ require ( github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 github.com/vmihailenco/msgpack v4.0.4+incompatible github.com/xuri/excelize/v2 v2.7.1 - github.com/zexi/influxql-to-metricsql v0.0.7 + github.com/zexi/influxql-to-metricsql v0.0.8 go.etcd.io/etcd/api/v3 v3.5.0 go.etcd.io/etcd/client/v3 v3.5.0 golang.org/x/crypto v0.8.0 diff --git a/go.sum b/go.sum index c8f5ab3b81..ae6fb84e2c 100644 --- a/go.sum +++ b/go.sum @@ -758,6 +758,8 @@ github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPR github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zexi/influxql-to-metricsql v0.0.7 h1:t2Kp6neknnOnszNl3mLteK4dSmXWglfI1JYUtRWTmyQ= github.com/zexi/influxql-to-metricsql v0.0.7/go.mod h1:PyRRM+3Zrzzig6J4okYLeSv+/d+5GaL5ccBaUKQABNs= +github.com/zexi/influxql-to-metricsql v0.0.8 h1:DIzXVffcpWGgW6AHdK8exHXKyh6dFNXuBrYdFStyFIQ= +github.com/zexi/influxql-to-metricsql v0.0.8/go.mod h1:PyRRM+3Zrzzig6J4okYLeSv+/d+5GaL5ccBaUKQABNs= go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU= diff --git a/pkg/monitor/models/unifiedmonitor.go b/pkg/monitor/models/unifiedmonitor.go index 712bbc21ec..db71a0a561 100644 --- a/pkg/monitor/models/unifiedmonitor.go +++ b/pkg/monitor/models/unifiedmonitor.go @@ -390,7 +390,7 @@ func setDefaultValue(query *monitor.AlertQuery, inputQuery *monitor.MetricQueryI metricMeasurement, _ := MetricMeasurementManager.GetCache().Get(query.Model.Measurement) - checkQueryGroupBy(query, inputQuery) + //checkQueryGroupBy(query, inputQuery) if len(inputQuery.Interval) != 0 { query.Model.GroupBy = append(query.Model.GroupBy, @@ -430,10 +430,10 @@ func setDefaultValue(query *monitor.AlertQuery, inputQuery *monitor.MetricQueryI if len(sel) > 1 { continue } - sel = append(sel, monitor.MetricQueryPart{ + /*sel = append(sel, monitor.MetricQueryPart{ Type: "mean", Params: []string{}, - }) + })*/ query.Model.Selects[i] = sel } var projectId, domainId string @@ -498,11 +498,13 @@ func checkQueryGroupBy(query *monitor.AlertQuery, inputQuery *monitor.MetricQuer if len(tagId) == 0 || (len(inputQuery.Slimit) != 0 && len(inputQuery.Soffset) != 0) { tagId = "*" } - query.Model.GroupBy = append(query.Model.GroupBy, - monitor.MetricQueryPart{ - Type: "field", - Params: []string{tagId}, - }) + if tagId != "" { + query.Model.GroupBy = append(query.Model.GroupBy, + monitor.MetricQueryPart{ + Type: "field", + Params: []string{tagId}, + }) + } } func fillSerieTags(series *monitor.TimeSeriesSlice) { diff --git a/vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go b/vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go index 5232f432b5..4fd626395b 100644 --- a/vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go +++ b/vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go @@ -19,6 +19,7 @@ const UNION_RESULT_NAME = "__union_result__" const ( CALL_TOP = "top" CALL_PERCENTILE = "percentile" + CALL_SUM = "sum" ) var MUL_ARGS_AGGREGATOR MulArgsAggregator = []string{CALL_TOP, CALL_PERCENTILE} @@ -259,18 +260,37 @@ func (m promQL) generateExpr( result = getAggrExpr(aggrOps, result) - //fmt.Printf("=====m.GroupByWildcard: %v, %#v\n", m.groupByWildcard, result) + //fmt.Printf("=====m.GroupByWildcard: %v, %#v, aggrOps: %#v\n", m.groupByWildcard, result, aggrOps) - if len(groups) != 0 && !m.groupByWildcard { - expr := &promql.AggregateExpr{ - Op: promql.ItemAvg, - Expr: result, + shouldSkipAggr := func(opName string) bool { + switch opName { + case CALL_PERCENTILE, CALL_TOP, "last": + return true } - if len(groups) != 0 { - expr.Grouping = groups - } - result = expr + return false } + + if len(aggrOps) != 0 { + op := promql.ItemAvg + opName := aggrOps[0].Name + if !shouldSkipAggr(opName) { + switch opName { + case CALL_SUM: + op = promql.ItemSum + } + expr := &promql.AggregateExpr{ + Op: op, + Expr: result, + } + if len(groups) != 0 { + expr.Grouping = groups + } + if !m.groupByWildcard { + result = expr + } + } + } + return result, nil } @@ -305,20 +325,18 @@ func getAggrExpr(ops []*AggrOperator, expr promql.Expr) promql.Expr { case "abs": // https://prometheus.io/docs/prometheus/latest/querying/functions/#abs expr = newAggrExpr("abs", promql.ValueTypeVector, promql.ValueTypeVector, restExpr) - case "sum": - expr = newAggrExpr("sum", promql.ValueTypeVector, promql.ValueTypeVector, restExpr) case "mean": // https://docs.victoriametrics.com/MetricsQL.html#avg_over_time expr = newAggrExpr("avg_over_time", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) case "last": // https://docs.victoriametrics.com/MetricsQL.html#last_over_time expr = newAggrExpr("last_over_time", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) - case "count": - // use count, not use 'count_over_time' https://docs.victoriametrics.com/MetricsQL.html#count_over_time - expr = newAggrExpr("count", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) case "stddev": // https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time expr = newAggrExpr("stddev_over_time", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) + case "count": + // use count, not use 'count_over_time' https://docs.victoriametrics.com/MetricsQL.html#count_over_time + expr = newAggrExpr("count", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) case "median": // https://docs.victoriametrics.com/MetricsQL.html#median_over_time expr = newAggrExpr("median_over_time", promql.ValueTypeMatrix, promql.ValueTypeVector, restExpr) diff --git a/vendor/modules.txt b/vendor/modules.txt index a8e50ef39a..ecee93f80a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -983,7 +983,7 @@ github.com/xuri/nfp # github.com/yusufpapurcu/wmi v1.2.2 ## explicit; go 1.16 github.com/yusufpapurcu/wmi -# github.com/zexi/influxql-to-metricsql v0.0.7 +# github.com/zexi/influxql-to-metricsql v0.0.8 ## explicit; go 1.18 github.com/zexi/influxql-to-metricsql/converter github.com/zexi/influxql-to-metricsql/converter/translator