diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a76d3b6687..4cf73ec0ba 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -74,6 +74,7 @@ The following tip changes can be tested by building VictoriaMetrics components f * 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: [csvimport](https://docs.victoriametrics.com/#how-to-import-csv-data): properly parse [csv line](https://docs.victoriametrics.com/#how-to-import-csv-data) when value in the last column is empty. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4048). +* BUGFIX: [relabeling](https://docs.victoriametrics.com/relabeling.html): properly validate labels input on Metric Relabel Debug page in 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 956777d047..41b4411712 100644 --- a/lib/promrelabel/debug.go +++ b/lib/promrelabel/debug.go @@ -4,6 +4,7 @@ import ( "fmt" "io" + "github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/searchutils" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils" ) @@ -18,20 +19,33 @@ func WriteTargetRelabelDebug(w io.Writer, targetID, metric, relabelConfigs, form } func writeRelabelDebug(w io.Writer, isTargetRelabel bool, targetID, metric, relabelConfigs, format string, err error) { - if metric == "" { - metric = "{}" - } targetURL := "" + if metric == "" { + WriteRelabelDebugSteps(w, targetURL, targetID, format, nil, metric, relabelConfigs, err) + return + } if err != nil { WriteRelabelDebugSteps(w, targetURL, targetID, format, nil, metric, relabelConfigs, err) return } - labels, err := promutils.NewLabelsFromString(metric) + selectors, err := searchutils.ParseMetricSelector(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) @@ -39,7 +53,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) }