mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
a27c2f3773
vmagent: properly add extra labels before sending data to remote storage labels from `remoteWrite.label` are now added to sent metrics just before they are pushed to `remoteWrite.url` after all relabelings, including stream aggregation relabelings (#4247) https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4247 Signed-off-by: Alexander Marshalov <_@marshalov.org> Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
68 lines
2 KiB
Go
68 lines
2 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)
|
|
gotTss := rctx.appendExtraLabels(tss, extraLabels)
|
|
if !reflect.DeepEqual(gotTss, expTss) {
|
|
t.Fatalf("expected to have: \n%v;\ngot: \n%v", expTss, gotTss)
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|