From 94959450897463d59ad04e4d05dfc306924061dd Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Dec 2020 12:26:50 -0800 Subject: [PATCH 1/9] Adding throtted_field --- libbeat/processors/ratelimit/config.go | 7 +- libbeat/processors/ratelimit/rate_limit.go | 17 ++++- .../processors/ratelimit/rate_limit_test.go | 75 ++++++++++++------- 3 files changed, 66 insertions(+), 33 deletions(-) diff --git a/libbeat/processors/ratelimit/config.go b/libbeat/processors/ratelimit/config.go index 79fb5a49932..5c1eaf5f9bf 100644 --- a/libbeat/processors/ratelimit/config.go +++ b/libbeat/processors/ratelimit/config.go @@ -25,9 +25,10 @@ import ( // config for rate limit processor. type config struct { - Limit rate `config:"limit" validate:"required"` - Fields []string `config:"fields"` - Algorithm common.ConfigNamespace `config:"algorithm"` + Limit rate `config:"limit" validate:"required"` + Fields []string `config:"fields"` + ThrottledField string `config:"throttled_field"` + Algorithm common.ConfigNamespace `config:"algorithm"` } func (c *config) setDefaults() error { diff --git a/libbeat/processors/ratelimit/rate_limit.go b/libbeat/processors/ratelimit/rate_limit.go index 210ac5a5912..479667ff378 100644 --- a/libbeat/processors/ratelimit/rate_limit.go +++ b/libbeat/processors/ratelimit/rate_limit.go @@ -27,6 +27,7 @@ import ( "github.com/elastic/beats/v7/libbeat/beat" "github.com/elastic/beats/v7/libbeat/common" + "github.com/elastic/beats/v7/libbeat/common/atomic" "github.com/elastic/beats/v7/libbeat/logp" "github.com/elastic/beats/v7/libbeat/processors" ) @@ -40,7 +41,10 @@ const processorName = "rate_limit" type rateLimit struct { config config algorithm algorithm - logger *logp.Logger + + numThrottled atomic.Uint64 + + logger *logp.Logger } // new constructs a new rate limit processor. @@ -83,9 +87,12 @@ func (p *rateLimit) Run(event *beat.Event) (*beat.Event, error) { } if p.algorithm.IsAllowed(key) { + p.tagEvent(event) + fmt.Println("event:", event) return event, nil } + p.numThrottled.Inc() p.logger.Debugf("event [%v] dropped by rate_limit processor", event) return nil, nil } @@ -120,6 +127,14 @@ func (p *rateLimit) makeKey(event *beat.Event) (uint64, error) { return hashstructure.Hash(values, nil) } +func (p *rateLimit) tagEvent(event *beat.Event) { + fmt.Println("throttled_field:", p.config.ThrottledField) + if p.config.ThrottledField != "" && p.numThrottled.Load() > 0 { + event.PutValue(p.config.ThrottledField, p.numThrottled.Load()) + p.numThrottled.Store(0) + } +} + // setClock allows test code to inject a fake clock // TODO: remove this method and move tests that use it to algorithm level. func (p *rateLimit) setClock(c clockwork.Clock) { diff --git a/libbeat/processors/ratelimit/rate_limit_test.go b/libbeat/processors/ratelimit/rate_limit_test.go index 99941ebfd0f..6d445fd02ba 100644 --- a/libbeat/processors/ratelimit/rate_limit_test.go +++ b/libbeat/processors/ratelimit/rate_limit_test.go @@ -18,6 +18,7 @@ package ratelimit import ( + "fmt" "testing" "time" @@ -61,32 +62,20 @@ func TestNew(t *testing.T) { } func TestRateLimit(t *testing.T) { - inEvents := []beat.Event{ - { + var inEvents []beat.Event + for i := 1; i <= 6; i++ { + event := beat.Event{ Timestamp: time.Now(), Fields: common.MapStr{ - "foo": "bar", + "event_number": i, }, - }, - { - Timestamp: time.Now(), - Fields: common.MapStr{ - "foo": "bar", - "baz": "mosquito", - }, - }, - { - Timestamp: time.Now(), - Fields: common.MapStr{ - "baz": "qux", - }, - }, - { - Timestamp: time.Now(), - Fields: common.MapStr{ - "foo": "seger", - }, - }, + } + inEvents = append(inEvents, event) + } + + withField := func(in beat.Event, key string, value interface{}) beat.Event { + in.Fields.Put(key, value) + return in } cases := map[string]struct { @@ -114,9 +103,9 @@ func TestRateLimit(t *testing.T) { inEvents: inEvents, outEvents: inEvents[0:2], }, - "rate_5_per_min": { + "rate_6_per_min": { config: common.MapStr{ - "limit": "5/m", + "limit": "6/m", }, inEvents: inEvents, outEvents: inEvents, @@ -127,15 +116,20 @@ func TestRateLimit(t *testing.T) { }, delay: 200 * time.Millisecond, inEvents: inEvents, - outEvents: []beat.Event{inEvents[0], inEvents[1], inEvents[3]}, + outEvents: []beat.Event{inEvents[0], inEvents[1], inEvents[3], inEvents[5]}, }, "with_fields": { config: common.MapStr{ "limit": "1/s", "fields": []string{"foo"}, }, - delay: 400 * time.Millisecond, - inEvents: inEvents, + delay: 400 * time.Millisecond, + inEvents: []beat.Event{ + withField(inEvents[0], "foo", "bar"), + withField(inEvents[1], "foo", "bar"), + inEvents[2], + withField(inEvents[3], "foo", "seger"), + }, outEvents: []beat.Event{inEvents[0], inEvents[2], inEvents[3]}, }, "with_burst": { @@ -147,6 +141,20 @@ func TestRateLimit(t *testing.T) { inEvents: inEvents, outEvents: inEvents, }, + "with_throttled": { + config: common.MapStr{ + "limit": "2/s", + "throttled_field": "num_throttled", + }, + delay: 200 * time.Millisecond, + inEvents: inEvents, + outEvents: []beat.Event{ + inEvents[0], + inEvents[1], + withField(inEvents[3], "num_throttled", uint64(1)), + withField(inEvents[5], "num_throttled", uint64(1)), + }, + }, } for name, test := range cases { @@ -160,7 +168,10 @@ func TestRateLimit(t *testing.T) { out := make([]beat.Event, 0) for _, in := range test.inEvents { - o, err := p.Run(&in) + inCopy := in + inCopy.Fields = in.Fields.Clone() + + o, err := p.Run(&inCopy) require.NoError(t, err) if o != nil { out = append(out, *o) @@ -168,6 +179,12 @@ func TestRateLimit(t *testing.T) { fakeClock.Advance(test.delay) } + require.Len(t, out, len(test.outEvents)) + for idx, event := range out { + fmt.Println("actual: ", event) + fmt.Println("expected: ", test.outEvents[idx]) + require.Equal(t, test.outEvents[idx], event) + } require.Equal(t, test.outEvents, out) }) } From 74b0211bf85755bdd6464a2c343086f4bb4bd499 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Dec 2020 12:32:01 -0800 Subject: [PATCH 2/9] Documenting the field --- libbeat/processors/ratelimit/docs/rate_limit.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc index f629874ad3b..e794bd9eda1 100644 --- a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc +++ b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc @@ -38,3 +38,4 @@ The following settings are supported: `limit`:: The rate limit. Supported time units for the rate are `s` (per second), `m` (per minute), and `h` (per hour). `fields`:: (Optional) List of fields. The rate limit will be applied to each distinct value derived by combining the values of these fields. +`throttled_field`:: (Optional) When events are rate limited, the first event that is allowed to pass through after rate limiting will contain this field. The value of the field will be the number of events that were rate limited since the last time an event was allowed to pass through. From b48f95a0e0094df958733b387ba526214529f93b Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Dec 2020 12:33:11 -0800 Subject: [PATCH 3/9] Adding note on dropping of events --- libbeat/processors/ratelimit/docs/rate_limit.asciidoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc index e794bd9eda1..4c55c922079 100644 --- a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc +++ b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc @@ -9,6 +9,9 @@ beta[] The `rate_limit` processor limits the throughput of events based on the specified configuration. +In the current implementation, rate-limited events are dropped. Future implementations may allow rate-limited events to +be handled differently. + [source,yaml] ----------------------------------------------------- processors: From 9530c1ffd44c9076e7b4c4525792da6c70588d60 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Dec 2020 12:40:30 -0800 Subject: [PATCH 4/9] Renaming metric field --- libbeat/processors/ratelimit/config.go | 8 ++--- .../ratelimit/docs/rate_limit.asciidoc | 2 +- libbeat/processors/ratelimit/rate_limit.go | 12 ++++---- .../processors/ratelimit/rate_limit_test.go | 30 +++++++++---------- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/libbeat/processors/ratelimit/config.go b/libbeat/processors/ratelimit/config.go index 5c1eaf5f9bf..47c131771bf 100644 --- a/libbeat/processors/ratelimit/config.go +++ b/libbeat/processors/ratelimit/config.go @@ -25,10 +25,10 @@ import ( // config for rate limit processor. type config struct { - Limit rate `config:"limit" validate:"required"` - Fields []string `config:"fields"` - ThrottledField string `config:"throttled_field"` - Algorithm common.ConfigNamespace `config:"algorithm"` + Limit rate `config:"limit" validate:"required"` + Fields []string `config:"fields"` + MetricField string `config:"metric_field"` + Algorithm common.ConfigNamespace `config:"algorithm"` } func (c *config) setDefaults() error { diff --git a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc index 4c55c922079..021a2ab3a2f 100644 --- a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc +++ b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc @@ -41,4 +41,4 @@ The following settings are supported: `limit`:: The rate limit. Supported time units for the rate are `s` (per second), `m` (per minute), and `h` (per hour). `fields`:: (Optional) List of fields. The rate limit will be applied to each distinct value derived by combining the values of these fields. -`throttled_field`:: (Optional) When events are rate limited, the first event that is allowed to pass through after rate limiting will contain this field. The value of the field will be the number of events that were rate limited since the last time an event was allowed to pass through. +`metric_field`:: (Optional) When events are rate limited, the first event that is allowed to pass through after rate limiting will contain this field. The value of the field will be the number of events that were rate limited since the last time an event was allowed to pass through. diff --git a/libbeat/processors/ratelimit/rate_limit.go b/libbeat/processors/ratelimit/rate_limit.go index 479667ff378..b21c7dc5a10 100644 --- a/libbeat/processors/ratelimit/rate_limit.go +++ b/libbeat/processors/ratelimit/rate_limit.go @@ -42,7 +42,7 @@ type rateLimit struct { config config algorithm algorithm - numThrottled atomic.Uint64 + numRateLimited atomic.Uint64 logger *logp.Logger } @@ -88,11 +88,10 @@ func (p *rateLimit) Run(event *beat.Event) (*beat.Event, error) { if p.algorithm.IsAllowed(key) { p.tagEvent(event) - fmt.Println("event:", event) return event, nil } - p.numThrottled.Inc() + p.numRateLimited.Inc() p.logger.Debugf("event [%v] dropped by rate_limit processor", event) return nil, nil } @@ -128,10 +127,9 @@ func (p *rateLimit) makeKey(event *beat.Event) (uint64, error) { } func (p *rateLimit) tagEvent(event *beat.Event) { - fmt.Println("throttled_field:", p.config.ThrottledField) - if p.config.ThrottledField != "" && p.numThrottled.Load() > 0 { - event.PutValue(p.config.ThrottledField, p.numThrottled.Load()) - p.numThrottled.Store(0) + if p.config.MetricField != "" && p.numRateLimited.Load() > 0 { + event.PutValue(p.config.MetricField, p.numRateLimited.Load()) + p.numRateLimited.Store(0) } } diff --git a/libbeat/processors/ratelimit/rate_limit_test.go b/libbeat/processors/ratelimit/rate_limit_test.go index 6d445fd02ba..51d582565b4 100644 --- a/libbeat/processors/ratelimit/rate_limit_test.go +++ b/libbeat/processors/ratelimit/rate_limit_test.go @@ -18,7 +18,6 @@ package ratelimit import ( - "fmt" "testing" "time" @@ -74,8 +73,11 @@ func TestRateLimit(t *testing.T) { } withField := func(in beat.Event, key string, value interface{}) beat.Event { - in.Fields.Put(key, value) - return in + out := in + out.Fields = in.Fields.Clone() + + out.Fields.Put(key, value) + return out } cases := map[string]struct { @@ -130,7 +132,11 @@ func TestRateLimit(t *testing.T) { inEvents[2], withField(inEvents[3], "foo", "seger"), }, - outEvents: []beat.Event{inEvents[0], inEvents[2], inEvents[3]}, + outEvents: []beat.Event{ + withField(inEvents[0], "foo", "bar"), + inEvents[2], + withField(inEvents[3], "foo", "seger"), + }, }, "with_burst": { config: common.MapStr{ @@ -141,18 +147,18 @@ func TestRateLimit(t *testing.T) { inEvents: inEvents, outEvents: inEvents, }, - "with_throttled": { + "with_metric": { config: common.MapStr{ - "limit": "2/s", - "throttled_field": "num_throttled", + "limit": "2/s", + "metric_field": "num_dropped", }, delay: 200 * time.Millisecond, inEvents: inEvents, outEvents: []beat.Event{ inEvents[0], inEvents[1], - withField(inEvents[3], "num_throttled", uint64(1)), - withField(inEvents[5], "num_throttled", uint64(1)), + withField(inEvents[3], "num_dropped", uint64(1)), + withField(inEvents[5], "num_dropped", uint64(1)), }, }, } @@ -179,12 +185,6 @@ func TestRateLimit(t *testing.T) { fakeClock.Advance(test.delay) } - require.Len(t, out, len(test.outEvents)) - for idx, event := range out { - fmt.Println("actual: ", event) - fmt.Println("expected: ", test.outEvents[idx]) - require.Equal(t, test.outEvents[idx], event) - } require.Equal(t, test.outEvents, out) }) } From bc335a18ea1de5ccc7f0609619c4100b49edb2da Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Dec 2020 12:45:53 -0800 Subject: [PATCH 5/9] Adding CHANGELOG entry --- CHANGELOG.next.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index bd4027159ee..dd0356f720c 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -571,6 +571,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Allow node/namespace metadata to be disabled on kubernetes metagen and ensure add_kubernetes_metadata honors host {pull}23012[23012] - Honor kube event resysncs to handle missed watch events {pull}22668[22668] - Add autodiscover provider and metadata processor for Nomad. {pull}14954[14954] {pull}23324[23324] +- Add optional `metric_field` setting to `rate_limit` processor. {pull}23330[23330] *Auditbeat* From 9d5516b927445283cf22964f0e6dd9ebf933f4d0 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 12 Jan 2021 13:48:09 -0800 Subject: [PATCH 6/9] Converting to monitoring counter metric --- libbeat/processors/ratelimit/rate_limit.go | 39 ++++++++++++++-------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/libbeat/processors/ratelimit/rate_limit.go b/libbeat/processors/ratelimit/rate_limit.go index b21c7dc5a10..b1cd10e31fe 100644 --- a/libbeat/processors/ratelimit/rate_limit.go +++ b/libbeat/processors/ratelimit/rate_limit.go @@ -20,6 +20,7 @@ package ratelimit import ( "fmt" "sort" + "strconv" "github.com/jonboulle/clockwork" "github.com/mitchellh/hashstructure" @@ -29,22 +30,30 @@ import ( "github.com/elastic/beats/v7/libbeat/common" "github.com/elastic/beats/v7/libbeat/common/atomic" "github.com/elastic/beats/v7/libbeat/logp" + "github.com/elastic/beats/v7/libbeat/monitoring" "github.com/elastic/beats/v7/libbeat/processors" ) +// instanceID is used to assign each instance a unique monitoring namespace. +var instanceID = atomic.MakeUint32(0) + +const processorName = "rate_limit" +const logName = "processor." + processorName + func init() { processors.RegisterPlugin(processorName, new) } -const processorName = "rate_limit" +type metrics struct { + Dropped *monitoring.Int +} type rateLimit struct { config config algorithm algorithm - numRateLimited atomic.Uint64 - - logger *logp.Logger + logger *logp.Logger + metrics metrics } // new constructs a new rate limit processor. @@ -67,10 +76,20 @@ func new(cfg *common.Config) (processors.Processor, error) { return nil, errors.Wrap(err, "could not construct rate limiting algorithm") } + // Logging and metrics (each processor instance has a unique ID). + var ( + id = int(instanceID.Inc()) + log = logp.NewLogger(logName).With("instance_id", id) + reg = monitoring.Default.NewRegistry(logName+"."+strconv.Itoa(id), monitoring.DoNotReport) + ) + p := &rateLimit{ config: config, algorithm: algo, - logger: logp.NewLogger("rate_limit"), + logger: log, + metrics: metrics{ + Dropped: monitoring.NewInt(reg, "dropped"), + }, } p.setClock(clockwork.NewRealClock()) @@ -87,12 +106,11 @@ func (p *rateLimit) Run(event *beat.Event) (*beat.Event, error) { } if p.algorithm.IsAllowed(key) { - p.tagEvent(event) return event, nil } - p.numRateLimited.Inc() p.logger.Debugf("event [%v] dropped by rate_limit processor", event) + p.metrics.Dropped.Inc() return nil, nil } @@ -126,13 +144,6 @@ func (p *rateLimit) makeKey(event *beat.Event) (uint64, error) { return hashstructure.Hash(values, nil) } -func (p *rateLimit) tagEvent(event *beat.Event) { - if p.config.MetricField != "" && p.numRateLimited.Load() > 0 { - event.PutValue(p.config.MetricField, p.numRateLimited.Load()) - p.numRateLimited.Store(0) - } -} - // setClock allows test code to inject a fake clock // TODO: remove this method and move tests that use it to algorithm level. func (p *rateLimit) setClock(c clockwork.Clock) { From 45767463c68a13782db1c3207aa4a88e23f16e55 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 12 Jan 2021 13:54:07 -0800 Subject: [PATCH 7/9] Removing metric_field --- CHANGELOG.next.asciidoc | 1 + libbeat/processors/ratelimit/config.go | 7 +++---- .../processors/ratelimit/docs/rate_limit.asciidoc | 1 - libbeat/processors/ratelimit/rate_limit_test.go | 14 -------------- 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index dd0356f720c..a4d8131baac 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -572,6 +572,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Honor kube event resysncs to handle missed watch events {pull}22668[22668] - Add autodiscover provider and metadata processor for Nomad. {pull}14954[14954] {pull}23324[23324] - Add optional `metric_field` setting to `rate_limit` processor. {pull}23330[23330] +- Add `processors.rate_limit.n.dropped` monitoring counter metric for the `rate_limit` processor. {pull}23330[23330] *Auditbeat* diff --git a/libbeat/processors/ratelimit/config.go b/libbeat/processors/ratelimit/config.go index 47c131771bf..79fb5a49932 100644 --- a/libbeat/processors/ratelimit/config.go +++ b/libbeat/processors/ratelimit/config.go @@ -25,10 +25,9 @@ import ( // config for rate limit processor. type config struct { - Limit rate `config:"limit" validate:"required"` - Fields []string `config:"fields"` - MetricField string `config:"metric_field"` - Algorithm common.ConfigNamespace `config:"algorithm"` + Limit rate `config:"limit" validate:"required"` + Fields []string `config:"fields"` + Algorithm common.ConfigNamespace `config:"algorithm"` } func (c *config) setDefaults() error { diff --git a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc index 021a2ab3a2f..f3fc7c632a7 100644 --- a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc +++ b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc @@ -41,4 +41,3 @@ The following settings are supported: `limit`:: The rate limit. Supported time units for the rate are `s` (per second), `m` (per minute), and `h` (per hour). `fields`:: (Optional) List of fields. The rate limit will be applied to each distinct value derived by combining the values of these fields. -`metric_field`:: (Optional) When events are rate limited, the first event that is allowed to pass through after rate limiting will contain this field. The value of the field will be the number of events that were rate limited since the last time an event was allowed to pass through. diff --git a/libbeat/processors/ratelimit/rate_limit_test.go b/libbeat/processors/ratelimit/rate_limit_test.go index 51d582565b4..17b70aa9477 100644 --- a/libbeat/processors/ratelimit/rate_limit_test.go +++ b/libbeat/processors/ratelimit/rate_limit_test.go @@ -147,20 +147,6 @@ func TestRateLimit(t *testing.T) { inEvents: inEvents, outEvents: inEvents, }, - "with_metric": { - config: common.MapStr{ - "limit": "2/s", - "metric_field": "num_dropped", - }, - delay: 200 * time.Millisecond, - inEvents: inEvents, - outEvents: []beat.Event{ - inEvents[0], - inEvents[1], - withField(inEvents[3], "num_dropped", uint64(1)), - withField(inEvents[5], "num_dropped", uint64(1)), - }, - }, } for name, test := range cases { From 7d2d9005906523c20575189241c3ce7fdc67f8d1 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 12 Jan 2021 13:56:56 -0800 Subject: [PATCH 8/9] Fixing wrapping --- libbeat/processors/ratelimit/docs/rate_limit.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc index f3fc7c632a7..9a7a2f32322 100644 --- a/libbeat/processors/ratelimit/docs/rate_limit.asciidoc +++ b/libbeat/processors/ratelimit/docs/rate_limit.asciidoc @@ -9,8 +9,8 @@ beta[] The `rate_limit` processor limits the throughput of events based on the specified configuration. -In the current implementation, rate-limited events are dropped. Future implementations may allow rate-limited events to -be handled differently. +In the current implementation, rate-limited events are dropped. Future +implementations may allow rate-limited events to be handled differently. [source,yaml] ----------------------------------------------------- From c370761d124b88f302ac4d208ffe81d7b60b8c5e Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 13 Jan 2021 06:45:04 -0800 Subject: [PATCH 9/9] Removing old entry from CHANGELOG Co-authored-by: Jaime Soriano Pastor --- CHANGELOG.next.asciidoc | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index a4d8131baac..5864208dc6c 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -571,7 +571,6 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Allow node/namespace metadata to be disabled on kubernetes metagen and ensure add_kubernetes_metadata honors host {pull}23012[23012] - Honor kube event resysncs to handle missed watch events {pull}22668[22668] - Add autodiscover provider and metadata processor for Nomad. {pull}14954[14954] {pull}23324[23324] -- Add optional `metric_field` setting to `rate_limit` processor. {pull}23330[23330] - Add `processors.rate_limit.n.dropped` monitoring counter metric for the `rate_limit` processor. {pull}23330[23330] *Auditbeat* @@ -994,4 +993,3 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d -