diff --git a/CHANGELOG.md b/CHANGELOG.md index bf5a00ee051..64df655792d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,8 @@ Main (unreleased) - Allow configuration of `force_attempt_http2` and default it to `true` for otelcol exporters with HTTP client configurations. (@dehaansa) +- Fix default values for relabel rules, this caused issues in e.g. `prometheus.operator.servicemonitors` when using labeldrop. (@kalleep) + v1.12.0 ----------------- diff --git a/internal/component/common/relabel/relabel.go b/internal/component/common/relabel/relabel.go index d2b3aef7e73..f8d7941e82c 100644 --- a/internal/component/common/relabel/relabel.go +++ b/internal/component/common/relabel/relabel.go @@ -318,9 +318,12 @@ func doRelabel(cfg *Config, lb LabelBuilder) (keep bool) { func ComponentToPromRelabelConfigs(rcs []*Config) []*relabel.Config { res := make([]*relabel.Config, len(rcs)) for i, rc := range rcs { - sourceLabels := make([]model.LabelName, len(rc.SourceLabels)) - for i, sl := range rc.SourceLabels { - sourceLabels[i] = model.LabelName(sl) + var sourceLabels []model.LabelName + if len(rc.SourceLabels) > 0 { + sourceLabels = make([]model.LabelName, len(rc.SourceLabels)) + for i, sl := range rc.SourceLabels { + sourceLabels[i] = model.LabelName(sl) + } } res[i] = &relabel.Config{ diff --git a/internal/component/common/relabel/relabel_test.go b/internal/component/common/relabel/relabel_test.go index 4f811d40df8..3991b73ee60 100644 --- a/internal/component/common/relabel/relabel_test.go +++ b/internal/component/common/relabel/relabel_test.go @@ -19,10 +19,12 @@ import ( "fmt" "testing" + "github.com/grafana/alloy/syntax" "github.com/grafana/regexp" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" + "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/util/testutil" ) @@ -857,6 +859,21 @@ func BenchmarkRelabel(b *testing.B) { } } +func TestComponentToPromRelabelConfigs(t *testing.T) { + rule := ` + action = "labeldrop" + regex = "helm_sh_chart" + ` + + var cfg Config + require.NoError(t, syntax.Unmarshal([]byte(rule), &cfg)) + + converted := ComponentToPromRelabelConfigs([]*Config{&cfg}) + for _, r := range converted { + require.NoError(t, r.Validate(model.LegacyValidation)) + } +} + // MustNewRegexp works like NewRegexp, but panics if the regular expression does not compile. func MustNewRegexp(s string) Regexp { re, err := NewRegexp(s)