diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index d801baa07f67..c5049f9f8cd5 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -209,6 +209,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add custom string mapping to CEF module to support Check Point devices. {issue}16041[16041] {pull}16907[16907] - Add pattern for Cisco ASA / FTD Message 734001 {issue}16212[16212] {pull}16612[16612] - Added new module `o365` for ingesting Office 365 management activity API events. {issue}16196[16196] {pull}16386[16386] +- Add source field in k8s events {pull}17209[17209] - Improve AWS cloudtrail field mappings {issue}16086[16086] {issue}16110[16110] {pull}17155[17155] - Added documentation for running Filebeat in Cloud Foundry. {pull}17275[17275] diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 1bd817e6adb2..55e3f8e772da 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -21983,6 +21983,33 @@ type: keyword Type of the given event +type: keyword + +-- + +[float] +=== source + +The component reporting this event + + + +*`kubernetes.event.source.component`*:: ++ +-- +Component from which the event is generated + + +type: keyword + +-- + +*`kubernetes.event.source.host`*:: ++ +-- +Node name on which the event is generated + + type: keyword -- diff --git a/metricbeat/module/kubernetes/event/_meta/fields.yml b/metricbeat/module/kubernetes/event/_meta/fields.yml index 603445f32e73..023e81d2d115 100644 --- a/metricbeat/module/kubernetes/event/_meta/fields.yml +++ b/metricbeat/module/kubernetes/event/_meta/fields.yml @@ -33,6 +33,19 @@ type: keyword description: > Type of the given event + - name: source + type: group + description: > + The component reporting this event + fields: + - name: component + type: keyword + description: > + Component from which the event is generated + - name: host + type: keyword + description: > + Node name on which the event is generated - name: metadata type: group description: > diff --git a/metricbeat/module/kubernetes/event/event.go b/metricbeat/module/kubernetes/event/event.go index 89be60274524..f7b98bd6723f 100644 --- a/metricbeat/module/kubernetes/event/event.go +++ b/metricbeat/module/kubernetes/event/event.go @@ -169,6 +169,10 @@ func generateMapStrFromEvent(eve *kubernetes.Event, dedotConfig dedotConfig) com "reason": eve.Reason, "type": eve.Type, "count": eve.Count, + "source": common.MapStr{ + "host": eve.Source.Host, + "component": eve.Source.Component, + }, "involved_object": common.MapStr{ "api_version": eve.InvolvedObject.APIVersion, "resource_version": eve.InvolvedObject.ResourceVersion, diff --git a/metricbeat/module/kubernetes/event/event_test.go b/metricbeat/module/kubernetes/event/event_test.go index 6b441f13b065..69c98be3147b 100644 --- a/metricbeat/module/kubernetes/event/event_test.go +++ b/metricbeat/module/kubernetes/event/event_test.go @@ -73,6 +73,11 @@ func TestGenerateMapStrFromEvent(t *testing.T) { "prometheus_io/scrape": "false", } + source := v1.EventSource{ + Component: "kubelet", + Host: "prod_1", + } + testCases := map[string]struct { mockEvent v1.Event expectedMetadata common.MapStr @@ -84,6 +89,7 @@ func TestGenerateMapStrFromEvent(t *testing.T) { Labels: labels, Annotations: annotations, }, + Source: source, }, expectedMetadata: common.MapStr{ "labels": expectedLabelsMapStrWithDot, @@ -100,6 +106,7 @@ func TestGenerateMapStrFromEvent(t *testing.T) { Labels: labels, Annotations: annotations, }, + Source: source, }, expectedMetadata: common.MapStr{ "labels": expectedLabelsMapStrWithDeDot, @@ -116,6 +123,7 @@ func TestGenerateMapStrFromEvent(t *testing.T) { Labels: labels, Annotations: annotations, }, + Source: source, }, expectedMetadata: common.MapStr{ "labels": expectedLabelsMapStrWithDot, @@ -132,6 +140,7 @@ func TestGenerateMapStrFromEvent(t *testing.T) { Labels: labels, Annotations: annotations, }, + Source: source, }, expectedMetadata: common.MapStr{ "labels": expectedLabelsMapStrWithDeDot, @@ -149,6 +158,8 @@ func TestGenerateMapStrFromEvent(t *testing.T) { mapStrOutput := generateMapStrFromEvent(&test.mockEvent, test.dedotConfig) assert.Equal(t, test.expectedMetadata["labels"], mapStrOutput["metadata"].(common.MapStr)["labels"]) assert.Equal(t, test.expectedMetadata["annotations"], mapStrOutput["metadata"].(common.MapStr)["annotations"]) + assert.Equal(t, source.Host, mapStrOutput["source"].(common.MapStr)["host"]) + assert.Equal(t, source.Component, mapStrOutput["source"].(common.MapStr)["component"]) }) } } diff --git a/metricbeat/module/kubernetes/fields.go b/metricbeat/module/kubernetes/fields.go index 8042c638052a..06292b72a572 100644 --- a/metricbeat/module/kubernetes/fields.go +++ b/metricbeat/module/kubernetes/fields.go @@ -32,5 +32,5 @@ func init() { // AssetKubernetes returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/kubernetes. func AssetKubernetes() string { - return "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" + return "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" }