From f89a1ae048164c1009537d865a12c1c730d0b98b Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Mon, 3 Dec 2018 16:18:31 +0100 Subject: [PATCH] Don't generate a config when disabling logs collection with hints (#9305) When `co.elastic.logs/disable="true"` is used in a container, an incomplete event is generated, what provokes errors about configurations with missing fields. Don't generate configs in these cases. If after that a builder doesn't generate any configuration, it still generates an event but with with an empty list of configs instead of an event without a config field. (cherry picked from commit a4b06ae0f035889416ceb0df0b552ec3c573ca1a) --- CHANGELOG.asciidoc | 3 +++ filebeat/autodiscover/builder/hints/logs.go | 5 +++-- libbeat/autodiscover/builder.go | 2 +- libbeat/autodiscover/providers/kubernetes/kubernetes_test.go | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index f20783cd5b8..ec53374296d 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -39,6 +39,9 @@ https://github.com/elastic/beats/compare/v6.5.1...6.5[Check the HEAD diff] *Filebeat* +- Don't generate incomplete configurations when logs collection is disabled by hints. {pull}9305[9305] +- Stop runners disabled by hints after previously being started. {pull}9305[9305] + *Heartbeat* *Journalbeat* diff --git a/filebeat/autodiscover/builder/hints/logs.go b/filebeat/autodiscover/builder/hints/logs.go index 9b7d236e86a..8685776b150 100644 --- a/filebeat/autodiscover/builder/hints/logs.go +++ b/filebeat/autodiscover/builder/hints/logs.go @@ -84,8 +84,9 @@ func (l *logHints) CreateConfig(event bus.Event) []*common.Config { hints, _ = hIface.(common.MapStr) } - if builder.IsNoOp(hints, l.Key) == true { - return []*common.Config{config} + if builder.IsNoOp(hints, l.Key) { + logp.Debug("hints.builder", "disabled config in event: %+v", event) + return []*common.Config{} } inputConfig := l.getInputs(hints) diff --git a/libbeat/autodiscover/builder.go b/libbeat/autodiscover/builder.go index 6569758a1f6..7ce21d0ce45 100644 --- a/libbeat/autodiscover/builder.go +++ b/libbeat/autodiscover/builder.go @@ -89,7 +89,7 @@ func (r *registry) BuildBuilder(c *common.Config) (Builder, error) { // GetConfig creates configs for all builders initialized. func (b Builders) GetConfig(event bus.Event) []*common.Config { - var configs []*common.Config + configs := []*common.Config{} for _, builder := range b { if config := builder.CreateConfig(event); config != nil { diff --git a/libbeat/autodiscover/providers/kubernetes/kubernetes_test.go b/libbeat/autodiscover/providers/kubernetes/kubernetes_test.go index 307584ec6fb..be8dbeacb37 100644 --- a/libbeat/autodiscover/providers/kubernetes/kubernetes_test.go +++ b/libbeat/autodiscover/providers/kubernetes/kubernetes_test.go @@ -224,6 +224,7 @@ func TestEmitEvent(t *testing.T) { }, }, }, + "config": []*common.Config{}, }, }, { @@ -282,7 +283,7 @@ func TestEmitEvent(t *testing.T) { select { case event := <-listener.Events(): - assert.Equal(t, test.Expected, event) + assert.Equal(t, test.Expected, event, test.Message) case <-time.After(2 * time.Second): if test.Expected != nil { t.Fatal("Timeout while waiting for event")