From b24da0f90144d3d937a6efd18752188d1f58da33 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 12 May 2023 15:58:03 -0700 Subject: [PATCH] Revert "lib/promrelabel: show error message if labels not in prometheus exposition format (#4304)" This reverts commit 193a9c332853d568c750c3228e462bc5643b3a87. Reason for revert: the commit doesn't fix the real issue with promutils.NewLabelsFromString() function, which must return error when improperly formatted Prometheus metric with labels is passed to it. See https://github.com/prometheus/docs/blob/main/content/docs/instrumenting/exposition_formats.md#text-format-example E.g. the promutils.NewLabelsFromString() must return error when the following strings are passed to it: - `{foo:"bar"}`, since `:` is disallowed in Prometheus text exposition format. The corect value is `{foo="bar"}` - `{"foo":"bar"}`, since label name shouldn't be quoted. The correct value is `{foo="bar"}`. The reverted commit introduces another set of bugs, which happily accept the following invalid input: - `{foo=~"bar"}` - `{foo!="bar"}` - `{foo!~"bar"}` Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4284 See also https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4304 --- docs/CHANGELOG.md | 1 - lib/promrelabel/debug.go | 22 ++++------------------ 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b923f6159c..ab00f46852 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -75,7 +75,6 @@ The following tip changes can be tested by building VictoriaMetrics components f * BUGFIX: [vmbackup](https://docs.victoriametrics.com/vmbackup.html): fix compatibility with Windows OS. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/70). * BUGFIX: [vmctl](https://docs.victoriametrics.com/vmctl.html): fix performance issue when migrating data from VictoriaMetrics according to [these docs](https://docs.victoriametrics.com/vmctl.html#migrating-data-from-victoriametrics). Add the ability to speed up the data migration via `--vm-native-disable-retries` command-line flag. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4092). * BUGFIX: [stream aggregation](https://docs.victoriametrics.com/stream-aggregation.html): fix bug with duplicated labels during stream aggregation via single-node VictoriaMetrics. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4277). -* BUGFIX: [relabeling](https://docs.victoriametrics.com/relabeling.html): properly validate labels input on Metric Relabel Debug page in [VMUI](https://docs.victoriametrics.com/#vmui). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4284). ## [v1.90.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.90.0) diff --git a/lib/promrelabel/debug.go b/lib/promrelabel/debug.go index 41b4411712..956777d047 100644 --- a/lib/promrelabel/debug.go +++ b/lib/promrelabel/debug.go @@ -4,7 +4,6 @@ import ( "fmt" "io" - "github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/searchutils" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils" ) @@ -19,33 +18,20 @@ func WriteTargetRelabelDebug(w io.Writer, targetID, metric, relabelConfigs, form } func writeRelabelDebug(w io.Writer, isTargetRelabel bool, targetID, metric, relabelConfigs, format string, err error) { - targetURL := "" if metric == "" { - WriteRelabelDebugSteps(w, targetURL, targetID, format, nil, metric, relabelConfigs, err) - return + metric = "{}" } + targetURL := "" if err != nil { WriteRelabelDebugSteps(w, targetURL, targetID, format, nil, metric, relabelConfigs, err) return } - selectors, err := searchutils.ParseMetricSelector(metric) + labels, err := promutils.NewLabelsFromString(metric) if err != nil { err = fmt.Errorf("cannot parse metric: %s", err) WriteRelabelDebugSteps(w, targetURL, targetID, format, nil, metric, relabelConfigs, err) return } - - var labels promutils.Labels - for _, selector := range selectors { - key := string(selector.Key) - value := string(selector.Value) - if key == "" { - labels.Add("__name__", value) - continue - } - labels.Add(key, value) - } - pcs, err := ParseRelabelConfigsData([]byte(relabelConfigs)) if err != nil { err = fmt.Errorf("cannot parse relabel configs: %s", err) @@ -53,7 +39,7 @@ func writeRelabelDebug(w io.Writer, isTargetRelabel bool, targetID, metric, rela return } - dss, targetURL := newDebugRelabelSteps(pcs, &labels, isTargetRelabel) + dss, targetURL := newDebugRelabelSteps(pcs, labels, isTargetRelabel) WriteRelabelDebugSteps(w, targetURL, targetID, format, dss, metric, relabelConfigs, nil) }