mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-25 14:28:20 +01:00
568 lines
16 KiB
Go
568 lines
16 KiB
Go
package promrelabel
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
|
|
)
|
|
|
|
func BenchmarkApplyRelabelConfigs(b *testing.B) {
|
|
b.Run("replace-label-copy", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "replace",
|
|
SourceLabels: []string{"id"},
|
|
TargetLabel: "__name__",
|
|
Regex: defaultRegexForRelabelConfig,
|
|
Replacement: "$1",
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "foobar-random-string-here"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("replace-set-label", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "replace",
|
|
TargetLabel: "__name__",
|
|
Regex: defaultRegexForRelabelConfig,
|
|
Replacement: "foobar",
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "foobar" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "foobar"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("replace-add-label", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "replace",
|
|
TargetLabel: "aaa",
|
|
Regex: defaultRegexForRelabelConfig,
|
|
Replacement: "foobar",
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 2 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 2, labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "aaa" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "aaa"))
|
|
}
|
|
if labels[1].Value != "foobar" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("replace-mismatch", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "replace",
|
|
SourceLabels: []string{"non-existing-label"},
|
|
TargetLabel: "id",
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
Replacement: "$1",
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("replace-match", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "replace",
|
|
SourceLabels: []string{"id"},
|
|
TargetLabel: "id",
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
Replacement: "$1",
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("drop-mismatch", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "drop",
|
|
SourceLabels: []string{"non-existing-label"},
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("drop-match", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "drop",
|
|
SourceLabels: []string{"id"},
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 0 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 0, labels))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("keep-mismatch", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "keep",
|
|
SourceLabels: []string{"non-existing-label"},
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 0 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 0, labels))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("keep-match", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "keep",
|
|
SourceLabels: []string{"id"},
|
|
Regex: regexp.MustCompile("(foobar)-.*"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("labeldrop-mismatch", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "labeldrop",
|
|
Regex: regexp.MustCompile("non-existing-label"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("labeldrop-match", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "labeldrop",
|
|
Regex: regexp.MustCompile("id"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 1 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 1, labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("labelkeep-mismatch", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "labelkeep",
|
|
Regex: regexp.MustCompile("non-existing-label"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 0 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 0, labels))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("labelkeep-match", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "labelkeep",
|
|
Regex: regexp.MustCompile("id"),
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != 1 {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), 1, labels))
|
|
}
|
|
if labels[0].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "id"))
|
|
}
|
|
if labels[0].Value != "foobar-random-string-here" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "foobar-random-string-here"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
b.Run("hashmod", func(b *testing.B) {
|
|
prcs := []ParsedRelabelConfig{
|
|
{
|
|
Action: "hashmod",
|
|
SourceLabels: []string{"id"},
|
|
TargetLabel: "id",
|
|
Modulus: 23,
|
|
},
|
|
}
|
|
labelsOrig := []prompbmarshal.Label{
|
|
{
|
|
Name: "__name__",
|
|
Value: "metric",
|
|
},
|
|
{
|
|
Name: "id",
|
|
Value: "foobar-random-string-here",
|
|
},
|
|
}
|
|
b.ReportAllocs()
|
|
b.SetBytes(1)
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
var labels []prompbmarshal.Label
|
|
for pb.Next() {
|
|
labels = append(labels[:0], labelsOrig...)
|
|
labels = ApplyRelabelConfigs(labels, 0, prcs, true)
|
|
if len(labels) != len(labelsOrig) {
|
|
panic(fmt.Errorf("unexpected number of labels; got %d; want %d; labels:\n%#v", len(labels), len(labelsOrig), labels))
|
|
}
|
|
if labels[0].Name != "__name__" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[0].Name, "__name__"))
|
|
}
|
|
if labels[0].Value != "metric" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[0].Value, "metric"))
|
|
}
|
|
if labels[1].Name != "id" {
|
|
panic(fmt.Errorf("unexpected label name; got %q; want %q", labels[1].Name, "id"))
|
|
}
|
|
if labels[1].Value != "11" {
|
|
panic(fmt.Errorf("unexpected label value; got %q; want %q", labels[1].Value, "11"))
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|