From d9d337cdb53f1ad63f188099f7e926cf74613a86 Mon Sep 17 00:00:00 2001 From: Peter Deng Date: Wed, 9 Dec 2020 23:59:44 +0800 Subject: [PATCH] Improve event normalization performance (#22974) Co-authored-by: Jaime Soriano Pastor --- CHANGELOG.next.asciidoc | 1 + libbeat/publisher/processing/default_test.go | 14 ++++++++++++++ libbeat/publisher/processing/processors.go | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 6aa8f436e54c..724c7048ec00 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -540,6 +540,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Update k8s client and release k8s leader lock gracefully {pull}22919[22919] - Improve equals check. {pull}22778[22778] - Added "detect_mime_type" processor for detecting mime types {pull}22940[22940] +- Improve event normalization performance {pull}22974[22974] - Add tini as init system in docker images {pull}22137[22137] *Auditbeat* diff --git a/libbeat/publisher/processing/default_test.go b/libbeat/publisher/processing/default_test.go index 637b38cf44d6..ca2e740afd96 100644 --- a/libbeat/publisher/processing/default_test.go +++ b/libbeat/publisher/processing/default_test.go @@ -325,6 +325,20 @@ func TestNormalization(t *testing.T) { } } +func BenchmarkNormalization(b *testing.B) { + s, err := MakeDefaultSupport(true)(beat.Info{}, logp.L(), common.NewConfig()) + require.NoError(b, err) + + prog, err := s.Create(beat.ProcessingConfig{}, false) + require.NoError(b, err) + + fields := common.MapStr{"a": "b"} + for i := 0; i < b.N; i++ { + f := fields.Clone() + _, _ = prog.Run(&beat.Event{Fields: f}) + } +} + func TestAlwaysDrop(t *testing.T) { s, err := MakeDefaultSupport(true)(beat.Info{}, logp.L(), common.NewConfig()) require.NoError(t, err) diff --git a/libbeat/publisher/processing/processors.go b/libbeat/publisher/processing/processors.go index 3a400d36dad1..19111b6aff95 100644 --- a/libbeat/publisher/processing/processors.go +++ b/libbeat/publisher/processing/processors.go @@ -44,13 +44,13 @@ type processorFn struct { func newGeneralizeProcessor(keepNull bool) *processorFn { logger := logp.NewLogger("publisher_processing") + g := common.NewGenericEventConverter(keepNull) return newProcessor("generalizeEvent", func(event *beat.Event) (*beat.Event, error) { // Filter out empty events. Empty events are still reported by ACK callbacks. if len(event.Fields) == 0 { return nil, nil } - g := common.NewGenericEventConverter(keepNull) fields := g.Convert(event.Fields) if fields == nil { logger.Error("fail to convert to generic event")