diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bba95c74dae..ea2e5b9d6755 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * [5243](https://github.com/grafana/loki/pull/5243) **owen-d**: moves `querier.split-queries-by-interval` to limits code only. * [5139](https://github.com/grafana/loki/pull/5139) **DylanGuedes**: Drop support for legacy configuration rules format. +* [5262](https://github.com/grafana/loki/pull/5262) **MichelHollands**: Remove the labelFilter field * [4911](https://github.com/grafana/loki/pull/4911) **jeschkies**: Support Docker service discovery in Promtail. * [5107](https://github.com/grafana/loki/pull/5107) **chaudum** Fix bug in fluentd plugin that caused log lines containing non UTF-8 characters to be dropped. * [5187](https://github.com/grafana/loki/pull/5187) **aknuds1** Rename metric `cortex_experimental_features_in_use_total` to `loki_experimental_features_in_use_total` and metric `log_messages_total` to `loki_log_messages_total`. diff --git a/pkg/ingester/ingester.go b/pkg/ingester/ingester.go index a71dac39fb43..b2dc415ace60 100644 --- a/pkg/ingester/ingester.go +++ b/pkg/ingester/ingester.go @@ -86,7 +86,6 @@ type Config struct { WAL WALConfig `yaml:"wal,omitempty"` ChunkFilterer storage.RequestChunkFilterer `yaml:"-"` - LabelFilterer LabelValueFilterer `yaml:"-"` // Optional wrapper that can be used to modify the behaviour of the ingester Wrapper Wrapper `yaml:"-"` @@ -138,11 +137,6 @@ func (cfg *Config) Validate() error { return nil } -// ChunkFilterer filters chunks based on the metric. -type LabelValueFilterer interface { - Filter(ctx context.Context, labelName string, labelValues []string) ([]string, error) -} - type Wrapper interface { Wrap(wrapped Interface) Interface } @@ -211,7 +205,6 @@ type Ingester struct { wal WAL chunkFilter storage.RequestChunkFilterer - labelFilter LabelValueFilterer } // New makes a new Ingester. @@ -275,10 +268,6 @@ func New(cfg Config, clientConfig client.Config, store ChunkStore, limits *valid i.SetChunkFilterer(i.cfg.ChunkFilterer) } - if i.cfg.LabelFilterer != nil { - i.SetLabelFilterer(i.cfg.LabelFilterer) - } - return i, nil } @@ -286,10 +275,6 @@ func (i *Ingester) SetChunkFilterer(chunkFilter storage.RequestChunkFilterer) { i.chunkFilter = chunkFilter } -func (i *Ingester) SetLabelFilterer(labelFilter LabelValueFilterer) { - i.labelFilter = labelFilter -} - // setupAutoForget looks for ring status if `AutoForgetUnhealthy` is enabled // when enabled, unhealthy ingesters that reach `ring.kvstore.heartbeat_timeout` are removed from the ring every `HeartbeatPeriod` func (i *Ingester) setupAutoForget() { @@ -760,23 +745,8 @@ func (i *Ingester) Label(ctx context.Context, req *logproto.LabelRequest) (*logp } } - allValues := errUtil.MergeStringLists(resp.Values, storeValues) - - if req.Values && i.labelFilter != nil { - var filteredValues []string - - filteredValues, err = i.labelFilter.Filter(ctx, req.Name, allValues) - if err != nil { - return nil, err - } - - return &logproto.LabelResponse{ - Values: filteredValues, - }, nil - } - return &logproto.LabelResponse{ - Values: allValues, + Values: errUtil.MergeStringLists(resp.Values, storeValues), }, nil } diff --git a/pkg/ingester/ingester_test.go b/pkg/ingester/ingester_test.go index 8eb09dfdcda9..e11bf2e6cbd6 100644 --- a/pkg/ingester/ingester_test.go +++ b/pkg/ingester/ingester_test.go @@ -594,94 +594,3 @@ func Test_InMemoryLabels(t *testing.T) { require.NoError(t, err) require.Equal(t, []string{"bar", "foo"}, res.Values) } - -func InMemoryLabels(t *testing.T, labelFilterer LabelValueFilterer, expectedValues []string) { - ingesterConfig := defaultIngesterTestConfig(t) - ingesterConfig.QueryStore = true - limits, err := validation.NewOverrides(defaultLimitsTestConfig(), nil) - require.NoError(t, err) - - store := &mockStore{ - chunks: map[string][]chunk.Chunk{}, - } - - i, err := New(ingesterConfig, client.Config{}, store, limits, runtime.DefaultTenantConfigs(), nil) - require.NoError(t, err) - i.labelFilter = labelFilterer - future := time.Now().Local().Add(time.Minute * 5) - i.periodicConfigs = []chunk.PeriodConfig{ - { - From: chunk.DayTime{ - Time: model.TimeFromUnix(future.Unix()), - }, - }, - } - defer services.StopAndAwaitTerminated(context.Background(), i) //nolint:errcheck - - req := logproto.PushRequest{ - Streams: []logproto.Stream{ - { - Labels: `{foo="bar",bar="baz1"}`, - }, - { - Labels: `{foo="bar",bar="baz2"}`, - }, - }, - } - for i := 0; i < 10; i++ { - req.Streams[0].Entries = append(req.Streams[0].Entries, logproto.Entry{ - Timestamp: time.Unix(0, 0), - Line: fmt.Sprintf("line %d", i), - }) - req.Streams[1].Entries = append(req.Streams[1].Entries, logproto.Entry{ - Timestamp: time.Unix(0, 0), - Line: fmt.Sprintf("line %d", i), - }) - } - - ctx := user.InjectOrgID(context.Background(), "test") - _, err = i.Push(ctx, &req) - require.NoError(t, err) - - start := time.Now().Add(-5 * time.Minute) - end := time.Now() - res, err := i.Label(ctx, &logproto.LabelRequest{ - Name: "bar", - Values: true, - Start: &start, - End: &end, - }) - - require.NoError(t, err) - require.Equal(t, expectedValues, res.Values) - - res, err = i.Label(ctx, &logproto.LabelRequest{}) - require.NoError(t, err) - require.Equal(t, []string{"bar", "foo"}, res.Values) -} - -func Test_InMemoryLabels_WithoutLabelFilter(t *testing.T) { - expectedValues := []string{"baz1", "baz2", "val1", "val2"} - - InMemoryLabels(t, nil, expectedValues) -} - -// DummyLabelValuedFilterer adds i to the front of the label value -type DummyLabelValueFilterer struct{} - -func (*DummyLabelValueFilterer) Filter(ctx context.Context, labelName string, labelValues []string) ([]string, error) { - var updatedValues []string - - for _, v := range labelValues { - updatedValues = append(updatedValues, fmt.Sprintf("i%v", v)) - } - - return updatedValues, nil -} - -func Test_InMemoryLabels_WithLabelFilter(t *testing.T) { - labelFilter := DummyLabelValueFilterer{} - expectedValues := []string{"ibaz1", "ibaz2", "ival1", "ival2"} - - InMemoryLabels(t, &labelFilter, expectedValues) -}