From 0e42349e0c3701fd970d826c0d63189723ff4862 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Wed, 7 Nov 2018 12:52:47 +0100 Subject: [PATCH] Convert `source` field in Filebeat (#8902) The source field in Filebeat was used to store the file path for logs or the source ip for syslog, udp, tcp input. As source is in ECS an object the fields are now moved to ECS pattern. * For UDP, TCP, syslog input the source field is converted to log.source.ip * For the log input the source field is converted to log.file.path Done: * Test files updated * Changelog updated * Migration file updated * `source` removed from fields.yml, two new fields added --- CHANGELOG.asciidoc | 7 ++++--- dev-tools/ecs-migration.yml | 4 ++++ filebeat/_meta/fields.common.yml | 11 +++++++++-- filebeat/docs/fields.asciidoc | 16 ++++++++++++++-- filebeat/include/fields.go | 2 +- filebeat/input/log/harvester.go | 4 +++- filebeat/input/syslog/input.go | 6 +++++- filebeat/input/syslog/input_test.go | 12 ++++++++++-- filebeat/input/tcp/input.go | 6 +++++- filebeat/input/tcp/input_test.go | 2 +- filebeat/input/udp/input.go | 6 +++++- .../icinga/startup/test/test.log-expected.json | 4 ++-- filebeat/tests/system/test_modules.py | 2 +- filebeat/tests/system/test_processors.py | 2 +- filebeat/tests/system/test_syslog.py | 2 +- 15 files changed, 66 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 4927047d3240..392c2f0ef61c 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -21,11 +21,12 @@ https://github.com/elastic/beats/compare/v6.4.0...master[Check the HEAD diff] - Rename beat.name to agent.type, beat.hostname to agent.hostname, beat.version to agent.version. *Filebeat* -- Rename `fileset.name` to `event.name`. -- Rename `fileset.module` to `event.module`. +- Rename `fileset.name` to `event.name`. {pull}8879[8879] +- Rename `fileset.module` to `event.module`. {pull}8879[8879] +- Rename source to log.file.path and log.source.ip {pull}8902[8902] - Remove the deprecated `prospector(s)` option in the configuration use `input(s)` instead. {pull}8909[8909] -- Rename `offset` to `log.offset`. +- Rename `offset` to `log.offset`. {pull}8923[8923] *Heartbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 978baed1887c..c162c0aa413e 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -24,6 +24,10 @@ - from: fileset.module to: event.module alias: true + +- from: source + to: ["log.file.path", "log.source.ip"] + alias: false copy_to: false - from: beat.name diff --git a/filebeat/_meta/fields.common.yml b/filebeat/_meta/fields.common.yml index 014fb16627cd..2f8aca4eadbd 100644 --- a/filebeat/_meta/fields.common.yml +++ b/filebeat/_meta/fields.common.yml @@ -3,13 +3,20 @@ description: > Contains log file lines. fields: - - name: source + + - name: log.file.path type: keyword - required: true + required: false description: > The file from which the line was read. This field contains the absolute path to the file. For example: `/var/log/system.log`. + - name: log.source.ip + type: ip + required: false + description: > + Source IP from which the log event was read / sent from. + - name: log.offset type: long required: false diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 07a2d1d4a0f1..e5247c729968 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4609,16 +4609,28 @@ Contains log file lines. -*`source`*:: +*`log.file.path`*:: + -- type: keyword -required: True +required: False The file from which the line was read. This field contains the absolute path to the file. For example: `/var/log/system.log`. +-- + +*`log.source.ip`*:: ++ +-- +type: ip + +required: False + +Source IP from which the log event was read / sent from. + + -- *`log.offset`*:: diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index f4d4bb567a4c..74be0953984e 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/filebeat/input/log/harvester.go b/filebeat/input/log/harvester.go index b31a67772940..cdb0aa78aa9c 100644 --- a/filebeat/input/log/harvester.go +++ b/filebeat/input/log/harvester.go @@ -306,9 +306,11 @@ func (h *Harvester) Run() error { // Check if data should be added to event. Only export non empty events. if !message.IsEmpty() && h.shouldExportLine(text) { fields := common.MapStr{ - "source": state.Source, "log": common.MapStr{ "offset": startingOffset, // Offset here is the offset before the starting char. + "file": common.MapStr{ + "path": state.Source, + }, }, } fields.DeepUpdate(message.Fields) diff --git a/filebeat/input/syslog/input.go b/filebeat/input/syslog/input.go index 40ba08c74d57..4d348512cb39 100644 --- a/filebeat/input/syslog/input.go +++ b/filebeat/input/syslog/input.go @@ -203,7 +203,11 @@ func (p *Input) Wait() { func createEvent(ev *event, metadata inputsource.NetworkMetadata, timezone *time.Location, log *logp.Logger) *beat.Event { f := common.MapStr{ "message": strings.TrimRight(ev.Message(), "\n"), - "source": metadata.RemoteAddr.String(), + "log": common.MapStr{ + "source": common.MapStr{ + "ip": metadata.RemoteAddr.String(), + }, + }, } syslog := common.MapStr{} diff --git a/filebeat/input/syslog/input_test.go b/filebeat/input/syslog/input_test.go index 706da1b87379..df10d2ee0623 100644 --- a/filebeat/input/syslog/input_test.go +++ b/filebeat/input/syslog/input_test.go @@ -40,7 +40,11 @@ func TestWhenPriorityIsSet(t *testing.T) { event := createEvent(e, m, time.Local, logp.NewLogger("syslog")) expected := common.MapStr{ - "source": "127.0.0.1", + "log": common.MapStr{ + "source": common.MapStr{ + "ip": "127.0.0.1", + }, + }, "message": "hello world", "hostname": "wopr", "process": common.MapStr{ @@ -69,7 +73,11 @@ func TestWhenPriorityIsNotSet(t *testing.T) { m := dummyMetadata() event := createEvent(e, m, time.Local, logp.NewLogger("syslog")) expected := common.MapStr{ - "source": "127.0.0.1", + "log": common.MapStr{ + "source": common.MapStr{ + "ip": "127.0.0.1", + }, + }, "message": "hello world", "hostname": "wopr", "process": common.MapStr{ diff --git a/filebeat/input/tcp/input.go b/filebeat/input/tcp/input.go index 5a4dc14b85e5..38700961f1c3 100644 --- a/filebeat/input/tcp/input.go +++ b/filebeat/input/tcp/input.go @@ -131,7 +131,11 @@ func createEvent(raw []byte, metadata inputsource.NetworkMetadata) *util.Data { Timestamp: time.Now(), Fields: common.MapStr{ "message": string(raw), - "source": metadata.RemoteAddr.String(), + "log": common.MapStr{ + "source": common.MapStr{ + "ip": metadata.RemoteAddr.String(), + }, + }, }, } return data diff --git a/filebeat/input/tcp/input_test.go b/filebeat/input/tcp/input_test.go index 2609732d3d1f..7ed89097a09b 100644 --- a/filebeat/input/tcp/input_test.go +++ b/filebeat/input/tcp/input_test.go @@ -42,6 +42,6 @@ func TestCreateEvent(t *testing.T) { assert.NoError(t, err) assert.Equal(t, string(message), m) - from, _ := event.GetValue("source") + from, _ := event.GetValue("log.source.ip") assert.Equal(t, ip, from) } diff --git a/filebeat/input/udp/input.go b/filebeat/input/udp/input.go index b897e1440c26..fb3735a849e0 100644 --- a/filebeat/input/udp/input.go +++ b/filebeat/input/udp/input.go @@ -74,7 +74,11 @@ func NewInput( }, Fields: common.MapStr{ "message": string(data), - "source": metadata.RemoteAddr.String(), + "log": common.MapStr{ + "source": common.MapStr{ + "ip": metadata.RemoteAddr.String(), + }, + }, }, } forwarder.Send(e) diff --git a/filebeat/module/icinga/startup/test/test.log-expected.json b/filebeat/module/icinga/startup/test/test.log-expected.json index 46c861c40998..ccc9670681db 100644 --- a/filebeat/module/icinga/startup/test/test.log-expected.json +++ b/filebeat/module/icinga/startup/test/test.log-expected.json @@ -1,6 +1,6 @@ [ { - "@timestamp": "2018-11-06T15:26:20.085Z", + "@timestamp": "2018-11-06T18:29:13.579Z", "event.dataset": "startup", "event.module": "icinga", "icinga.startup.facility": "cli", @@ -10,7 +10,7 @@ "log.offset": 0 }, { - "@timestamp": "2018-11-06T15:26:20.085Z", + "@timestamp": "2018-11-06T18:29:13.579Z", "event.dataset": "startup", "event.module": "icinga", "icinga.startup.facility": "cli", diff --git a/filebeat/tests/system/test_modules.py b/filebeat/tests/system/test_modules.py index 40b0da64d402..215d341ae4fe 100644 --- a/filebeat/tests/system/test_modules.py +++ b/filebeat/tests/system/test_modules.py @@ -194,7 +194,7 @@ def clean_keys(obj): # The create timestamps area always new time_keys = ["read_timestamp", "event.created"] # source path and beat.version can be different for each run - other_keys = ["source", "agent.version"] + other_keys = ["log.file.path", "agent.version"] for key in host_keys + time_keys + other_keys: delete_key(obj, key) diff --git a/filebeat/tests/system/test_processors.py b/filebeat/tests/system/test_processors.py index 115ceffc1503..b381ed314527 100644 --- a/filebeat/tests/system/test_processors.py +++ b/filebeat/tests/system/test_processors.py @@ -66,7 +66,7 @@ def test_drop_event(self): path=os.path.abspath(self.working_dir) + "/test*.log", processors=[{ "drop_event": { - "when": "contains.source: test1", + "when": "contains.log.file.path: test1", }, }] ) diff --git a/filebeat/tests/system/test_syslog.py b/filebeat/tests/system/test_syslog.py index 56f84652554e..cdece147a4be 100644 --- a/filebeat/tests/system/test_syslog.py +++ b/filebeat/tests/system/test_syslog.py @@ -100,4 +100,4 @@ def assert_syslog(self, syslog): assert syslog["syslog.priority"] == 13 assert syslog["syslog.severity_label"] == "Notice" assert syslog["syslog.facility_label"] == "user-level" - assert len(syslog["source"]) > 0 + assert len(syslog["log.source.ip"]) > 0