mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-23 00:46:23 +01:00
50820ab1aa
- Fix Prometheus-compatible naming after applying the relabeling if -usePromCompatibleNaming command-line flag is set. This should prevent from possible Prometheus-incompatible metric names and label names generated by the relabeling. - Do not return anything from relabelCtx.appendExtraLabels() function, since it cannot change the number of time series passed to it. Append labels for the passed time series in-place. - Remove promrelabel.FinalizeLabels() call after adding extra labels to time series, since this call has been already made at relabelCtx.applyRelabeling(). It is user's responsibility if he passes labels with double underscore prefixes to -remoteWrite.label. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4247
69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package remotewrite
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
|
|
)
|
|
|
|
func TestApplyRelabeling(t *testing.T) {
|
|
f := func(pcs *promrelabel.ParsedConfigs, sTss, sExpTss string) {
|
|
rctx := &relabelCtx{}
|
|
tss, expTss := parseSeries(sTss), parseSeries(sExpTss)
|
|
gotTss := rctx.applyRelabeling(tss, pcs)
|
|
if !reflect.DeepEqual(gotTss, expTss) {
|
|
t.Fatalf("expected to have: \n%v;\ngot: \n%v", expTss, gotTss)
|
|
}
|
|
}
|
|
|
|
f(nil, "up", "up")
|
|
|
|
pcs, err := promrelabel.ParseRelabelConfigsData([]byte(`
|
|
- target_label: "foo"
|
|
replacement: "aaa"
|
|
- action: labeldrop
|
|
regex: "env.*"
|
|
`))
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
f(pcs, `up{foo="baz", env="prod"}`, `up{foo="aaa"}`)
|
|
|
|
oldVal := *usePromCompatibleNaming
|
|
*usePromCompatibleNaming = true
|
|
f(nil, `foo.bar`, `foo_bar`)
|
|
*usePromCompatibleNaming = oldVal
|
|
}
|
|
|
|
func TestAppendExtraLabels(t *testing.T) {
|
|
f := func(extraLabels []prompbmarshal.Label, sTss, sExpTss string) {
|
|
rctx := &relabelCtx{}
|
|
tss, expTss := parseSeries(sTss), parseSeries(sExpTss)
|
|
rctx.appendExtraLabels(tss, extraLabels)
|
|
if !reflect.DeepEqual(tss, expTss) {
|
|
t.Fatalf("expected to have: \n%v;\ngot: \n%v", expTss, tss)
|
|
}
|
|
}
|
|
|
|
f(nil, "up", "up")
|
|
f([]prompbmarshal.Label{{Name: "foo", Value: "bar"}}, "up", `up{foo="bar"}`)
|
|
f([]prompbmarshal.Label{{Name: "foo", Value: "bar"}}, `up{foo="baz"}`, `up{foo="bar"}`)
|
|
f([]prompbmarshal.Label{{Name: "baz", Value: "qux"}}, `up{foo="baz"}`, `up{foo="baz",baz="qux"}`)
|
|
|
|
oldVal := *usePromCompatibleNaming
|
|
*usePromCompatibleNaming = true
|
|
f([]prompbmarshal.Label{{Name: "foo.bar", Value: "baz"}}, "up", `up{foo_bar="baz"}`)
|
|
*usePromCompatibleNaming = oldVal
|
|
}
|
|
|
|
func parseSeries(data string) []prompbmarshal.TimeSeries {
|
|
var tss []prompbmarshal.TimeSeries
|
|
tss = append(tss, prompbmarshal.TimeSeries{
|
|
Labels: promutils.MustNewLabelsFromString(data).GetLabels(),
|
|
})
|
|
return tss
|
|
}
|