From 62fad6e3f81b316512cc02244e7dbd6ae6df8ea9 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 14:15:06 +0100 Subject: [PATCH 01/66] Update configs for old beat.* fields (#10370) Replace mentions of beat.name, beat.hostname, beat.version from the docs and replace it with the related fields. In addition search was done for old fileset.* and metricset.* fields but nothing was found in the docs. --- libbeat/docs/generalconfig.asciidoc | 2 +- libbeat/docs/shared-config-ingest.asciidoc | 4 +-- libbeat/docs/shared-ilm.asciidoc | 4 +-- libbeat/docs/shared-template-load.asciidoc | 2 +- metricbeat/docs/how-metricbeat-works.asciidoc | 25 +++++++++---------- metricbeat/docs/metricbeat-filtering.asciidoc | 4 +-- 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/libbeat/docs/generalconfig.asciidoc b/libbeat/docs/generalconfig.asciidoc index a3f7426160aa..2bc385c68cf0 100644 --- a/libbeat/docs/generalconfig.asciidoc +++ b/libbeat/docs/generalconfig.asciidoc @@ -29,7 +29,7 @@ tags: ["service-X", "web-tier"] ==== `name` The name of the Beat. If this option is empty, the `hostname` of the server is -used. The name is included as the `beat.name` field in each published transaction. You can +used. The name is included as the `agent.name` field in each published transaction. You can use the name to group all transactions sent by a single Beat. Example: diff --git a/libbeat/docs/shared-config-ingest.asciidoc b/libbeat/docs/shared-config-ingest.asciidoc index 5157918a4791..db3a214aa55c 100644 --- a/libbeat/docs/shared-config-ingest.asciidoc +++ b/libbeat/docs/shared-config-ingest.asciidoc @@ -42,7 +42,7 @@ named `pipeline.json`: "processors": [ { "lowercase": { - "field": "beat.name" + "field": "agent.name" } } ] @@ -65,7 +65,7 @@ output.elasticsearch: pipeline: "test-pipeline" ------------------------------------------------------------------------------ -When you run {beatname_uc}, the value of `beat.name` is converted to lowercase before indexing. +When you run {beatname_uc}, the value of `agent.name` is converted to lowercase before indexing. For more information about defining a pre-processing pipeline, see the {elasticsearch}/ingest.html[Ingest Node] documentation. diff --git a/libbeat/docs/shared-ilm.asciidoc b/libbeat/docs/shared-ilm.asciidoc index 0019698d9641..61cac3791d3b 100644 --- a/libbeat/docs/shared-ilm.asciidoc +++ b/libbeat/docs/shared-ilm.asciidoc @@ -35,9 +35,9 @@ template to use the correct settings for index lifecycle management. NOTE: If you've previously loaded the index template for this version into {es}, you must overwrite the template by setting `setup.template.overwrite: true`. -The rollover alias is set to +{beatname_lc}-\{beat.version\}+ by default. You +The rollover alias is set to +{beatname_lc}-\{agent.version\}+ by default. You can change the prefix used in the alias by setting `ilm.rollover_alias`, but you -can't remove `{beat.version}` from the rollover alias name. The default pattern +can't remove `{agent.version}` from the rollover alias name. The default pattern used for the rollover index is `%{now/d}-000001`. You can change the pattern by setting `ilm.pattern`. For example: diff --git a/libbeat/docs/shared-template-load.asciidoc b/libbeat/docs/shared-template-load.asciidoc index f09aec8305eb..517bdfa89286 100644 --- a/libbeat/docs/shared-template-load.asciidoc +++ b/libbeat/docs/shared-template-load.asciidoc @@ -75,7 +75,7 @@ date information. You also need to configure the `setup.template.name` and + ["source","sh",subs="attributes,callouts"] ----- -output.elasticsearch.index: "customname-%{[beat.version]}-%{+yyyy.MM.dd}" +output.elasticsearch.index: "customname-%{[agent.version]}-%{+yyyy.MM.dd}" setup.template.name: "customname" setup.template.pattern: "customname-*" ----- diff --git a/metricbeat/docs/how-metricbeat-works.asciidoc b/metricbeat/docs/how-metricbeat-works.asciidoc index 24399b1388f2..185abb543a16 100644 --- a/metricbeat/docs/how-metricbeat-works.asciidoc +++ b/metricbeat/docs/how-metricbeat-works.asciidoc @@ -46,12 +46,10 @@ For more about the benefits of using Metricbeat, see <>. Every event sent by Metricbeat has the same basic structure. It contains the following fields: *`@timestamp`*:: Time when the event was captured -*`beat.hostname`*:: Hostname of the server on which the Beat is running -*`beat.name`*:: Name given to the Beat -*`metricset.module`*:: Name of the module that the data is from -*`metricset.name`*:: Name of the metricset that the data is from -*`metricset.rtt`*:: Round trip time of the request in microseconds -*`type`*:: This is always "metricsets" +*`host.hostname`*:: Hostname of the server on which the Beat is running +*`agent.type`*:: Name given to the Beat +*`event.module`*:: Name of the module that the data is from +*`event.dataset`*:: Name of the module that the data is from For example: @@ -59,14 +57,15 @@ For example: ---- { "@timestamp": "2016-06-22T22:05:53.291Z", - "beat": { - "hostname": "host.example.com", - "name": "host.example.com" + "agent": { + "type": "metricbeat" }, - "metricset": { - "module": "system", - "name": "process", - "rtt": 7419 + "host": { + "hostname": "host.example.com", + }, + "event": { + "dataset": "system.process", + "module": process }, . . diff --git a/metricbeat/docs/metricbeat-filtering.asciidoc b/metricbeat/docs/metricbeat-filtering.asciidoc index 6ba234145eab..68d23b391077 100644 --- a/metricbeat/docs/metricbeat-filtering.asciidoc +++ b/metricbeat/docs/metricbeat-filtering.asciidoc @@ -4,13 +4,13 @@ include::{libbeat-dir}/docs/processors.asciidoc[] For example, the following configuration reduces the exported fields by -dropping the `beat.name` and `beat.hostname` fields under `beat` from all documents. +dropping the `agent.name` and `agent.version` fields under `beat` from all documents. [source, yaml] ---- processors: - drop_fields: - fields: ['beat'] + fields: ['agent'] ---- include::{libbeat-dir}/docs/processors-using.asciidoc[] From 1e2c30af88559ddbad108769e26cc99a5dd77c48 Mon Sep 17 00:00:00 2001 From: Christoph Wurm Date: Tue, 29 Jan 2019 14:36:06 +0000 Subject: [PATCH 02/66] [Auditbeat] System module: Update and re-enable package dataset (#10225) Re-enables the disabled `package` dataset and brings it up to date with the other, soon-to-be released datasets. High-level changes: - Renamed to `package` (singular) - Scheduled state reporting based on `state.period` and `package.state.period` - Common fields: `event.kind`, `event.action`, `event.id`, `message` - Save/Restore package information to disk --- CHANGELOG.next.asciidoc | 1 + auditbeat/docs/fields.asciidoc | 95 +++ x-pack/auditbeat/auditbeat.reference.yml | 2 + x-pack/auditbeat/auditbeat.yml | 1 + x-pack/auditbeat/docs/modules/system.asciidoc | 7 + .../docs/modules/system/package.asciidoc | 21 + x-pack/auditbeat/include/list.go | 2 +- .../module/system/_meta/config.yml.tmpl | 9 +- .../module/system/_meta/docs.asciidoc | 2 + x-pack/auditbeat/module/system/fields.go | 2 +- .../module/system/package/_meta/data.json | 29 + .../module/system/package/_meta/docs.asciidoc | 8 + .../module/system/package/_meta/fields.yml | 41 ++ .../auditbeat/module/system/package/config.go | 30 + .../module/system/package/package.go | 539 ++++++++++++++++++ .../package_test.go} | 24 +- .../module/system/package/package_windows.go | 29 + .../module/system/packages/_meta/data.json | 30 - .../packages/_meta/docs.asciidoc.disabled | 8 - .../system/packages/_meta/fields.yml.disabled | 50 -- .../module/system/packages/config.go | 19 - .../module/system/packages/packages.go | 338 ----------- .../auditbeat/tests/system/test_metricsets.py | 13 +- 23 files changed, 837 insertions(+), 463 deletions(-) create mode 100644 x-pack/auditbeat/docs/modules/system/package.asciidoc create mode 100644 x-pack/auditbeat/module/system/package/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/package/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/package/_meta/fields.yml create mode 100644 x-pack/auditbeat/module/system/package/config.go create mode 100644 x-pack/auditbeat/module/system/package/package.go rename x-pack/auditbeat/module/system/{packages/packages_test.go => package/package_test.go} (52%) create mode 100644 x-pack/auditbeat/module/system/package/package_windows.go delete mode 100644 x-pack/auditbeat/module/system/packages/_meta/data.json delete mode 100644 x-pack/auditbeat/module/system/packages/_meta/docs.asciidoc.disabled delete mode 100644 x-pack/auditbeat/module/system/packages/_meta/fields.yml.disabled delete mode 100644 x-pack/auditbeat/module/system/packages/config.go delete mode 100644 x-pack/auditbeat/module/system/packages/packages.go diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 6be2da428209..2e1172fccdcb 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -169,6 +169,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add `user.id` (UID) and `user.name` for ECS. {pull}10195[10195] - Add `group.id` (GID) and `group.name` for ECS. {pull}10195[10195] - System module `process` dataset: Add user information to processes. {pull}9963[9963] +- Add system `package` dataset. {pull}10225[10225] *Filebeat* diff --git a/auditbeat/docs/fields.asciidoc b/auditbeat/docs/fields.asciidoc index 0e5326065cf9..709aa94ac8a4 100644 --- a/auditbeat/docs/fields.asciidoc +++ b/auditbeat/docs/fields.asciidoc @@ -6343,6 +6343,101 @@ type: keyword The operating system's kernel version. +-- + +[float] +== package fields + +`package` contains information about an installed or removed package. + + + +*`system.audit.package.name`*:: ++ +-- +type: keyword + +Package name. + + +-- + +*`system.audit.package.version`*:: ++ +-- +type: keyword + +Package version. + + +-- + +*`system.audit.package.release`*:: ++ +-- +type: keyword + +Package release. + + +-- + +*`system.audit.package.arch`*:: ++ +-- +type: keyword + +Package architecture. + + +-- + +*`system.audit.package.license`*:: ++ +-- +type: keyword + +Package license. + + +-- + +*`system.audit.package.installtime`*:: ++ +-- +type: date + +Package install time. + + +-- + +*`system.audit.package.size`*:: ++ +-- +type: long + +Package size. + + +-- + +*`system.audit.package.summary`*:: ++ +-- +Package summary. + + +-- + +*`system.audit.package.url`*:: ++ +-- +type: keyword + +Package URL. + + -- [float] diff --git a/x-pack/auditbeat/auditbeat.reference.yml b/x-pack/auditbeat/auditbeat.reference.yml index cc483d28c2b9..b760fb747237 100644 --- a/x-pack/auditbeat/auditbeat.reference.yml +++ b/x-pack/auditbeat/auditbeat.reference.yml @@ -117,6 +117,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets - user # User information @@ -128,6 +129,7 @@ auditbeat.modules: # The state.period can be overridden for any dataset. # host.state.period: 12h + # package.state.period: 12h # process.state.period: 12h # socket.state.period: 12h # user.state.period: 12h diff --git a/x-pack/auditbeat/auditbeat.yml b/x-pack/auditbeat/auditbeat.yml index 0bd74c6efe9b..14a30af52a3e 100644 --- a/x-pack/auditbeat/auditbeat.yml +++ b/x-pack/auditbeat/auditbeat.yml @@ -50,6 +50,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets - user # User information diff --git a/x-pack/auditbeat/docs/modules/system.asciidoc b/x-pack/auditbeat/docs/modules/system.asciidoc index 64198c06d27d..6e3c52b39857 100644 --- a/x-pack/auditbeat/docs/modules/system.asciidoc +++ b/x-pack/auditbeat/docs/modules/system.asciidoc @@ -51,6 +51,7 @@ sample suggested configuration. - module: system datasets: - host + - package - process - socket - user @@ -86,6 +87,7 @@ so a longer polling interval can be used. - module: system datasets: - host + - package - user period: 1m user.detect_password_changes: true @@ -111,6 +113,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets - user # User information @@ -133,6 +136,8 @@ The following datasets are available: * <<{beatname_lc}-dataset-system-host,host>> +* <<{beatname_lc}-dataset-system-package,package>> + * <<{beatname_lc}-dataset-system-process,process>> * <<{beatname_lc}-dataset-system-socket,socket>> @@ -141,6 +146,8 @@ The following datasets are available: include::system/host.asciidoc[] +include::system/package.asciidoc[] + include::system/process.asciidoc[] include::system/socket.asciidoc[] diff --git a/x-pack/auditbeat/docs/modules/system/package.asciidoc b/x-pack/auditbeat/docs/modules/system/package.asciidoc new file mode 100644 index 000000000000..ec87bd976daf --- /dev/null +++ b/x-pack/auditbeat/docs/modules/system/package.asciidoc @@ -0,0 +1,21 @@ +//// +This file is generated! See scripts/docs_collector.py +//// + +[id="{beatname_lc}-dataset-system-package"] +=== System package dataset + +include::../../../module/system/package/_meta/docs.asciidoc[] + + +==== Fields + +For a description of each field in the dataset, see the +<> section. + +Here is an example document generated by this dataset: + +[source,json] +---- +include::../../../module/system/package/_meta/data.json[] +---- diff --git a/x-pack/auditbeat/include/list.go b/x-pack/auditbeat/include/list.go index d903941baef0..4c2e3507ade7 100644 --- a/x-pack/auditbeat/include/list.go +++ b/x-pack/auditbeat/include/list.go @@ -10,7 +10,7 @@ import ( // Import packages that need to register themselves. _ "github.com/elastic/beats/x-pack/auditbeat/module/system" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/host" - _ "github.com/elastic/beats/x-pack/auditbeat/module/system/packages" + _ "github.com/elastic/beats/x-pack/auditbeat/module/system/package" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/process" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/socket" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/user" diff --git a/x-pack/auditbeat/module/system/_meta/config.yml.tmpl b/x-pack/auditbeat/module/system/_meta/config.yml.tmpl index f06f53cab3ea..5ac792217918 100644 --- a/x-pack/auditbeat/module/system/_meta/config.yml.tmpl +++ b/x-pack/auditbeat/module/system/_meta/config.yml.tmpl @@ -7,9 +7,9 @@ - module: system datasets: - host # General host information, e.g. uptime, IPs - {{ if false -}} - - packages # Installed packages - {{- end -}} + {{ if ne .GOOS "windows" -}} + - package # Installed, updated, and removed packages + {{- end }} - process # Started and stopped processes {{ if eq .GOOS "linux" -}} - socket # Opened and closed sockets @@ -23,6 +23,9 @@ {{ if .Reference }} # The state.period can be overridden for any dataset. # host.state.period: 12h + {{ if ne .GOOS "windows" -}} + # package.state.period: 12h + {{- end }} # process.state.period: 12h {{ if eq .GOOS "linux" -}} # socket.state.period: 12h diff --git a/x-pack/auditbeat/module/system/_meta/docs.asciidoc b/x-pack/auditbeat/module/system/_meta/docs.asciidoc index 4dc42e8c17d1..e9da6bc8f55b 100644 --- a/x-pack/auditbeat/module/system/_meta/docs.asciidoc +++ b/x-pack/auditbeat/module/system/_meta/docs.asciidoc @@ -46,6 +46,7 @@ sample suggested configuration. - module: system datasets: - host + - package - process - socket - user @@ -81,6 +82,7 @@ so a longer polling interval can be used. - module: system datasets: - host + - package - user period: 1m user.detect_password_changes: true diff --git a/x-pack/auditbeat/module/system/fields.go b/x-pack/auditbeat/module/system/fields.go index 8608bc90198b..41afad4cae69 100644 --- a/x-pack/auditbeat/module/system/fields.go +++ b/x-pack/auditbeat/module/system/fields.go @@ -19,5 +19,5 @@ func init() { // AssetSystem returns asset data. // This is the base64 encoded gzipped contents of module/system. func AssetSystem() string { - return "eJy0WE2P2zYQvftXDHLZXcBRLkVQ+FAgaYE2QNMssBugN3skjiR2JY7AoeJVfn1BfdmyKTvOenXz2H7vcd48kvZbeKJmBdKIo3IB4LQraAVvHtrCmwWAIkmsrpxms4LfFgAAjzkJAVoClxOkmgolkJEhi44UxE1b7zChZFUXFC0ALBWEQiug54qsLsk4LBbQA6xa6LdgsKRBUIS10q59A8A1Fa0gs1xXfSUgbYq2j5izuLEYQptF7J6NB9hAwsahNsN6ixYXtEnZlui/F+19a27Fw3Oodae2rpwuaSKgU1ywySblE5L987UFAm3AoGGhhI2SKMAYM7sZToWOLuH8yOzAY4V4+gaS1d9JBchi5oLQXML3QA502jshgDuOkAAv7DsbivzLgIAnarZs1SUC/sGSgNN27Af44bVXtQSKsgg+PjyeFMRpKuQioeQKxj/udHhUPwEn3Pcqr9ePv3q0EJMOmf6THPDpjxAF2iTXjhJX2ysuaAILt62jz7++X7//5S4kosSQiz/B/fnD74BKWRKhoHe6ChAdFM9wfLo/TcESoDjcPM+wbFj2ts+9HRMw5tq1YeHKnyHaZMMBMME43i53CqsCnUc8IJ3v+tmefHkYQXu3EzKOZQl1XBtXL2GrjeKt3EVBRUdxeqkaD9gr+YyJr/w7Q51iqYvmquQdZE9vSeXolqAo1miWkFqiWNS5jnwjK5rNVXX1mGHCJ7KGiuvxPQZG9EZ6mmMp42EuZF909fAAZ7PjPyTgS4HwXH4Tea1BBvgqZOHweNjrlj5EfDnb9JzYcWXX5frTezpLprS99sJuBHIuyUNT4tg2YWbJqbhiDADuLWcWS3AMtjaADgrO9EwK/WCu92Y2KMTRs7u43f0V3BNMruDwxcDf2tTPS3C5Fn8p9AnJKGHpRn1mHI5OtEEex/9RcqHATQt3Mrdomo5Uxgh7sRVa5++PtzE1bNT43o1AZXWJtv/WwT4bjjGcjjKcmYUfcgLG4T/ONZzM245eG0cZHUbkQvq57FUoEljc3EXmvLcD4Gl7R9f6T8Ot4W63HivaCRXpxU565a/l5Icj2R42gnsW0XFB8A2LmqT9B2AjOSrersd+zGDeThado+R+0LXp/ipoMSDVBd0td71dKy0YF6Q2yxnUjeEds+fowq7QZGS5FkDxGfM/gxI0fpMCbe6WgCbUnBYxsU3l9kG3OZmpZa03Xvs7csm7tqxAiEqZAXU8TAmgATItB6kR8cj9nc8FilsnuV/QfHSOfqB3zw+Z7e80CpvJHjMsdIvSCoBeQLT4PwAA///ff7jT" + return "eJy0WE1v20YQvetXDHKxDSjKpQgKHQokLdAGSBqjtoHerBF3RG693CF2lpbpX18sPyRRWkqRxfDmsfje2/levocnquYglXjKJwBee0NzeHdXG95NABRJ4nThNds5/DYBALjPSAjQEfiMYKXJKIGULDn0pGBZ1fYGE3JWpaHZBMCRIRSaA70U5HRO1qOZQAswr6Hfg8WcOkEzLJX29T8AfFXQHFLHZdFaItL6aLuIGYvfGGNog4jNswgAC0jYetS2O6+pcUHbFbscw3uznbeGTtw9+1q3asvC65x6AhrFhm3aMx+RHJ6HGgi0BYuWhRK2SmYRxiWzH+BU6Okczs/MHgJWjKd1IDn9SipCtmQ2hPYcvjvyoFdtJARwyxETEIS9sqVZ+DMi4ImqNTt1joC/MSfgVZ32HXz3d1A1BZqlM/h8d39UEK9WQn4mlIwQ+PutjoAaMuBI9IPK8fzxV4sWY9KxoL+RA778EaNAl2TaU+JLN+KBerBwXUf05dePjx9/uYmJyDEWxTdwf/v0O6BSjkQoGjtdRIj2jCc4vtwep2CJUOw3zxMsC5ad9rnTMQGXXPq6WLgIM0TbtBsAPYzDdrlVWBj0AXGPdNjrJ33y/W4D2kY7IetZplAuS+vLKay1VbyWm1lU0UE5XaomALZKvmESLP8OUK8w16YalbyBbOkdqQz9FBQtNdoprBzRUtQpjzyTE812VF0tZpzwiZwlMx7ffSRFr6SlOZSyyU1MnjCli7aPFuNoBaEFbcWjMaSAHTjK+ZlUxz/OZjLWlLhtRMHQnIgly4VUkVzp2Fp/jMnWQg4NqDGpdidTjM/ohOy4p2sho/OoycFRlsmOrsUc3CpFv16+LXdkASxKUuY5uuoNgM2LMczSmTHD8vDP18P+Uwq5i5pPADg5u8OPBIIpMrzP7zc/a5ACPAi5g7az4y29j3g5W39P3XKl43L9GWI6SKa0G/tgVwIZ5xSgKfHcT/GdwsnIjDiGAW4dpw5z8AyutIAeDKd6YAsIifm4k7NRIZ5e/Nnubj8BBILeJwD4buGrtuXLFHymJVxKQ4WklLA0qT6QDgcbdSePl/9RcqbARQ13YmOoGlLZlHAQW6Dz4f56vaSKrdr870qgcDq0suatvT0vXsZwvJThRC78UCRgk/yHdQ1H621Lr62nlPZL5Ez6odorUCRyuKGL1OnYdoDHw7uJWvtruLbcdOuNRXshszo7kkH5z4rkpwPZAXYGtyyil4bgGU1JUn+BXEiGitePG38MYF73Dp2hZCHRtW0+VdYYsNKGbqZb3z4qLbg0pBbTAdSF5S1z4GiKXaFNyXEpgBJqjC1BgjY0KdD2ZgpoY86pERNXFX4XdJ2R7Yesjk3Q/oF88qE2KxCiXAZAPXdZEu4IZGuO+mLQIB5Ef2d1RPGPSRYONFw6Bztd8/xQsMOdSmHV6zHdQdcotQBoBcwm/wcAAP//IWXfjA==" } diff --git a/x-pack/auditbeat/module/system/package/_meta/data.json b/x-pack/auditbeat/module/system/package/_meta/data.json new file mode 100644 index 000000000000..ca570150245b --- /dev/null +++ b/x-pack/auditbeat/module/system/package/_meta/data.json @@ -0,0 +1,29 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { + "hostname": "host.example.com", + "name": "host.example.com" + }, + "event": { + "action": "existing_package", + "dataset": "package", + "id": "9ac4ea4c-5a0c-475f-b4c9-ec9d981ff11b", + "kind": "state", + "module": "system" + }, + "message": "Package zstd (1.3.5) is already installed", + "service": { + "type": "system" + }, + "system": { + "audit": { + "package": { + "installtime": "2018-08-30T18:41:23.85657356+01:00", + "name": "zstd", + "summary": "Zstandard is a real-time compression algorithm", + "url": "http://zstd.net/", + "version": "1.3.5" + } + } + } +} \ No newline at end of file diff --git a/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc b/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc new file mode 100644 index 000000000000..13e2be806a70 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc @@ -0,0 +1,8 @@ +[role="xpack"] + +experimental[] + +This is the `package` dataset of the system module. + +It is implemented for Linux distributions using dpkg as their package manager, +and for Homebrew on macOS (Darwin). diff --git a/x-pack/auditbeat/module/system/package/_meta/fields.yml b/x-pack/auditbeat/module/system/package/_meta/fields.yml new file mode 100644 index 000000000000..d87ba9aac062 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/_meta/fields.yml @@ -0,0 +1,41 @@ +- name: package + type: group + description: > + `package` contains information about an installed or removed package. + release: experimental + fields: + - name: name + type: keyword + description: > + Package name. + - name: version + type: keyword + description: > + Package version. + - name: release + type: keyword + description: > + Package release. + - name: arch + type: keyword + description: > + Package architecture. + - name: license + type: keyword + description: > + Package license. + - name: installtime + type: date + description: > + Package install time. + - name: size + type: long + description: > + Package size. + - name: summary + description: > + Package summary. + - name: url + type: keyword + description: > + Package URL. diff --git a/x-pack/auditbeat/module/system/package/config.go b/x-pack/auditbeat/module/system/package/config.go new file mode 100644 index 000000000000..5af2d0a7d6a7 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/config.go @@ -0,0 +1,30 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !windows + +package pkg + +import ( + "time" +) + +// config defines the package metricset's configuration options. +type config struct { + StatePeriod time.Duration `config:"state.period"` + PackageStatePeriod time.Duration `config:"package.state.period"` +} + +func (c *config) effectiveStatePeriod() time.Duration { + if c.PackageStatePeriod != 0 { + return c.PackageStatePeriod + } + return c.StatePeriod +} + +func defaultConfig() config { + return config{ + StatePeriod: 12 * time.Hour, + } +} diff --git a/x-pack/auditbeat/module/system/package/package.go b/x-pack/auditbeat/module/system/package/package.go new file mode 100644 index 000000000000..5030c521d1a7 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/package.go @@ -0,0 +1,539 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !windows + +package pkg + +import ( + "bufio" + "bytes" + "encoding/gob" + "fmt" + "io" + "io/ioutil" + "os" + "path" + "strconv" + "strings" + "time" + + "github.com/OneOfOne/xxhash" + "github.com/gofrs/uuid" + "github.com/pkg/errors" + + "github.com/elastic/beats/auditbeat/datastore" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/cfgwarn" + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/metricbeat/mb" + "github.com/elastic/beats/x-pack/auditbeat/cache" + "github.com/elastic/go-sysinfo" + "github.com/elastic/go-sysinfo/types" +) + +const ( + moduleName = "system" + metricsetName = "package" + namespace = "system.audit.package" + + redhat = "redhat" + debian = "debian" + darwin = "darwin" + + dpkgStatusFile = "/var/lib/dpkg/status" + homebrewCellarPath = "/usr/local/Cellar" + + bucketName = "package.v1" + bucketKeyPackages = "packages" + bucketKeyStateTimestamp = "state_timestamp" + + eventTypeState = "state" + eventTypeEvent = "event" +) + +type eventAction uint8 + +const ( + eventActionExistingPackage eventAction = iota + eventActionPackageInstalled + eventActionPackageRemoved +) + +func (action eventAction) String() string { + switch action { + case eventActionExistingPackage: + return "existing_package" + case eventActionPackageInstalled: + return "package_installed" + case eventActionPackageRemoved: + return "package_removed" + default: + return "" + } +} + +func init() { + mb.Registry.MustAddMetricSet(moduleName, metricsetName, New, + mb.DefaultMetricSet(), + mb.WithNamespace(namespace), + ) +} + +// MetricSet collects data about the system's packages. +type MetricSet struct { + mb.BaseMetricSet + config config + log *logp.Logger + cache *cache.Cache + bucket datastore.Bucket + lastState time.Time + osFamily string +} + +// Package represents information for a package. +type Package struct { + Name string + Version string + Release string + Arch string + License string + InstallTime time.Time + Size uint64 + Summary string + URL string +} + +// Hash creates a hash for Package. +func (pkg Package) Hash() uint64 { + h := xxhash.New64() + h.WriteString(pkg.Name) + h.WriteString(pkg.InstallTime.String()) + return h.Sum64() +} + +func (pkg Package) toMapStr() common.MapStr { + mapstr := common.MapStr{ + "name": pkg.Name, + "version": pkg.Version, + "installtime": pkg.InstallTime, + } + + if pkg.Arch != "" { + mapstr.Put("arch", pkg.Arch) + } + + if pkg.License != "" { + mapstr.Put("license", pkg.License) + } + + if pkg.Release != "" { + mapstr.Put("release", pkg.Release) + } + + if pkg.Size != 0 { + mapstr.Put("size", pkg.Size) + } + + if pkg.Summary != "" { + mapstr.Put("summary", pkg.Summary) + } + + if pkg.URL != "" { + mapstr.Put("url", pkg.URL) + } + + return mapstr +} + +func getOS() (*types.OSInfo, error) { + host, err := sysinfo.Host() + if err != nil { + return nil, errors.Wrap(err, "error getting the OS") + } + + hostInfo := host.Info() + if hostInfo.OS == nil { + return nil, errors.New("no host info") + } + + return hostInfo.OS, nil +} + +// New constructs a new MetricSet. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + cfgwarn.Experimental("The %v/%v dataset is experimental", moduleName, metricsetName) + + config := defaultConfig() + if err := base.Module().UnpackConfig(&config); err != nil { + return nil, errors.Wrapf(err, "failed to unpack the %v/%v config", moduleName, metricsetName) + } + + bucket, err := datastore.OpenBucket(bucketName) + if err != nil { + return nil, errors.Wrap(err, "failed to open persistent datastore") + } + + ms := &MetricSet{ + BaseMetricSet: base, + config: config, + log: logp.NewLogger(metricsetName), + cache: cache.New(), + bucket: bucket, + } + + osInfo, err := getOS() + if err != nil { + return nil, errors.Wrap(err, "error determining operating system") + } + ms.osFamily = osInfo.Family + switch osInfo.Family { + case redhat: + return nil, fmt.Errorf("RPM support is not yet implemented") + case debian: + if _, err := os.Stat(dpkgStatusFile); err != nil { + return nil, errors.Wrapf(err, "error looking up %s", dpkgStatusFile) + } + case darwin: + if _, err := os.Stat(homebrewCellarPath); err != nil { + return nil, errors.Wrapf(err, "error looking up %s - is Homebrew installed?", homebrewCellarPath) + } + default: + return nil, fmt.Errorf("this metricset does not support OS family %v", osInfo.Family) + } + + // Load from disk: Time when state was last sent + err = bucket.Load(bucketKeyStateTimestamp, func(blob []byte) error { + if len(blob) > 0 { + return ms.lastState.UnmarshalBinary(blob) + } + return nil + }) + if err != nil { + return nil, err + } + if !ms.lastState.IsZero() { + ms.log.Debugf("Last state was sent at %v. Next state update by %v.", ms.lastState, ms.lastState.Add(ms.config.effectiveStatePeriod())) + } else { + ms.log.Debug("No state timestamp found") + } + + // Load from disk: Packages + packages, err := ms.restorePackagesFromDisk() + if err != nil { + return nil, errors.Wrap(err, "failed to restore packages from disk") + } + ms.log.Debugf("Restored %d packages from disk", len(packages)) + + ms.cache.DiffAndUpdateCache(convertToCacheable(packages)) + + return ms, nil +} + +// Close cleans up the MetricSet when it finishes. +func (ms *MetricSet) Close() error { + if ms.bucket != nil { + return ms.bucket.Close() + } + return nil +} + +// Fetch collects data about the host. It is invoked periodically. +func (ms *MetricSet) Fetch(report mb.ReporterV2) { + needsStateUpdate := time.Since(ms.lastState) > ms.config.effectiveStatePeriod() + if needsStateUpdate || ms.cache.IsEmpty() { + ms.log.Debugf("State update needed (needsStateUpdate=%v, cache.IsEmpty()=%v)", needsStateUpdate, ms.cache.IsEmpty()) + err := ms.reportState(report) + if err != nil { + ms.log.Error(err) + report.Error(err) + } + ms.log.Debugf("Next state update by %v", ms.lastState.Add(ms.config.effectiveStatePeriod())) + } + + err := ms.reportChanges(report) + if err != nil { + ms.log.Error(err) + report.Error(err) + } +} + +// reportState reports all installed packages on the system. +func (ms *MetricSet) reportState(report mb.ReporterV2) error { + ms.lastState = time.Now() + + packages, err := getPackages(ms.osFamily) + if err != nil { + return errors.Wrap(err, "failed to get packages") + } + ms.log.Debugf("Found %v packages", len(packages)) + + stateID, err := uuid.NewV4() + if err != nil { + return errors.Wrap(err, "error generating state ID") + } + for _, pkg := range packages { + event := packageEvent(pkg, eventTypeState, eventActionExistingPackage) + event.RootFields.Put("event.id", stateID.String()) + report.Event(event) + } + + // This will initialize the cache with the current packages + ms.cache.DiffAndUpdateCache(convertToCacheable(packages)) + + // Save time so we know when to send the state again (config.StatePeriod) + timeBytes, err := ms.lastState.MarshalBinary() + if err != nil { + return err + } + err = ms.bucket.Store(bucketKeyStateTimestamp, timeBytes) + if err != nil { + return errors.Wrap(err, "error writing state timestamp to disk") + } + + return ms.savePackagesToDisk(packages) +} + +// reportChanges detects and reports any changes to installed packages on this system since the last call. +func (ms *MetricSet) reportChanges(report mb.ReporterV2) error { + packages, err := getPackages(ms.osFamily) + if err != nil { + return errors.Wrap(err, "failed to get packages") + } + ms.log.Debugf("Found %v packages", len(packages)) + + installed, removed := ms.cache.DiffAndUpdateCache(convertToCacheable(packages)) + + for _, cacheValue := range installed { + report.Event(packageEvent(cacheValue.(*Package), eventTypeEvent, eventActionPackageInstalled)) + } + + for _, cacheValue := range removed { + report.Event(packageEvent(cacheValue.(*Package), eventTypeEvent, eventActionPackageRemoved)) + } + + if len(installed) > 0 || len(removed) > 0 { + return ms.savePackagesToDisk(packages) + } + + return nil +} + +func packageEvent(pkg *Package, eventType string, action eventAction) mb.Event { + return mb.Event{ + RootFields: common.MapStr{ + "event": common.MapStr{ + "kind": eventType, + "action": action.String(), + }, + "message": packageMessage(pkg, action), + }, + MetricSetFields: pkg.toMapStr(), + } +} + +func packageMessage(pkg *Package, action eventAction) string { + var actionString string + switch action { + case eventActionExistingPackage: + actionString = "is already installed" + case eventActionPackageInstalled: + actionString = "installed" + case eventActionPackageRemoved: + actionString = "removed" + } + + return fmt.Sprintf("Package %v (%v) %v", + pkg.Name, pkg.Version, actionString) +} + +func convertToCacheable(packages []*Package) []cache.Cacheable { + c := make([]cache.Cacheable, 0, len(packages)) + + for _, p := range packages { + c = append(c, p) + } + + return c +} + +// restorePackagesFromDisk loads the packages from disk. +func (ms *MetricSet) restorePackagesFromDisk() (packages []*Package, err error) { + var decoder *gob.Decoder + err = ms.bucket.Load(bucketKeyPackages, func(blob []byte) error { + if len(blob) > 0 { + buf := bytes.NewBuffer(blob) + decoder = gob.NewDecoder(buf) + } + return nil + }) + if err != nil { + return nil, err + } + + if decoder != nil { + for { + pkg := new(Package) + err = decoder.Decode(pkg) + if err == nil { + packages = append(packages, pkg) + } else if err == io.EOF { + // Read all packages + break + } else { + return nil, errors.Wrap(err, "error decoding packages") + } + } + } + + return packages, nil +} + +// Save packages to disk. +func (ms *MetricSet) savePackagesToDisk(packages []*Package) error { + var buf bytes.Buffer + encoder := gob.NewEncoder(&buf) + + for _, pkg := range packages { + err := encoder.Encode(*pkg) + if err != nil { + return errors.Wrap(err, "error encoding packages") + } + } + + err := ms.bucket.Store(bucketKeyPackages, buf.Bytes()) + if err != nil { + return errors.Wrap(err, "error writing packages to disk") + } + return nil +} + +func getPackages(osFamily string) (packages []*Package, err error) { + switch osFamily { + case redhat: + // TODO: Implement RPM + err = errors.New("RPM not yet supported") + case debian: + packages, err = listDebPackages() + if err != nil { + err = errors.Wrap(err, "error getting DEB packages") + } + case darwin: + packages, err = listBrewPackages() + if err != nil { + err = errors.Wrap(err, "error getting Homebrew packages") + } + default: + err = errors.Errorf("unknown OS %v - this should not have happened", osFamily) + } + + return +} + +func listDebPackages() ([]*Package, error) { + file, err := os.Open(dpkgStatusFile) + if err != nil { + return nil, errors.Wrapf(err, "error opening %s", dpkgStatusFile) + } + defer file.Close() + + var packages []*Package + pkg := &Package{} + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if len(strings.TrimSpace(line)) == 0 { + // empty line signals new package + packages = append(packages, pkg) + pkg = &Package{} + continue + } + if strings.HasPrefix(line, " ") { + // not interested in multi-lines for now + continue + } + words := strings.SplitN(line, ":", 2) + if len(words) != 2 { + return nil, fmt.Errorf("the following line was unexpected (no ':' found): '%s'", line) + } + value := strings.TrimSpace(words[1]) + switch strings.ToLower(words[0]) { + case "package": + pkg.Name = value + case "architecture": + pkg.Arch = value + case "version": + pkg.Version = value + case "description": + pkg.Summary = value + case "installed-size": + pkg.Size, err = strconv.ParseUint(value, 10, 64) + if err != nil { + return nil, errors.Wrapf(err, "error converting %s to int", value) + } + default: + continue + } + } + if err = scanner.Err(); err != nil { + return nil, errors.Wrap(err, "error scanning file") + } + return packages, nil +} + +func listBrewPackages() ([]*Package, error) { + packageDirs, err := ioutil.ReadDir(homebrewCellarPath) + if err != nil { + return nil, errors.Wrapf(err, "error reading directory %s", homebrewCellarPath) + } + + var packages []*Package + for _, packageDir := range packageDirs { + if !packageDir.IsDir() { + continue + } + pkgPath := path.Join(homebrewCellarPath, packageDir.Name()) + versions, err := ioutil.ReadDir(pkgPath) + if err != nil { + return nil, errors.Wrapf(err, "error reading directory: %s", pkgPath) + } + + for _, version := range versions { + if !version.IsDir() { + continue + } + pkg := &Package{ + Name: packageDir.Name(), + Version: version.Name(), + InstallTime: version.ModTime(), + } + + // read formula + formulaPath := path.Join(homebrewCellarPath, pkg.Name, pkg.Version, ".brew", pkg.Name+".rb") + file, err := os.Open(formulaPath) + if err != nil { + //fmt.Printf("WARNING: Can't get formula for package %s-%s\n", pkg.Name, pkg.Version) + // TODO: follow the path from INSTALL_RECEIPT.json to find the formula + continue + } + scanner := bufio.NewScanner(file) + count := 15 // only look into the first few lines of the formula + for scanner.Scan() { + count-- + if count == 0 { + break + } + line := scanner.Text() + if strings.HasPrefix(line, " desc ") { + pkg.Summary = strings.Trim(line[7:], " \"") + } else if strings.HasPrefix(line, " homepage ") { + pkg.URL = strings.Trim(line[11:], " \"") + } + } + + packages = append(packages, pkg) + } + } + return packages, nil +} diff --git a/x-pack/auditbeat/module/system/packages/packages_test.go b/x-pack/auditbeat/module/system/package/package_test.go similarity index 52% rename from x-pack/auditbeat/module/system/packages/packages_test.go rename to x-pack/auditbeat/module/system/package/package_test.go index 67d17dff7655..8e8cde472b83 100644 --- a/x-pack/auditbeat/module/system/packages/packages_test.go +++ b/x-pack/auditbeat/module/system/package/package_test.go @@ -2,27 +2,35 @@ // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. -package packages +// +build !windows + +package pkg import ( "testing" + "github.com/elastic/beats/auditbeat/core" mbtest "github.com/elastic/beats/metricbeat/mb/testing" ) func TestData(t *testing.T) { - t.Skip("Packages metricset is disabled") - f := mbtest.NewReportingMetricSetV2(t, getConfig()) - err := mbtest.WriteEventsReporterV2(f, t, "") - if err != nil { - t.Fatal("write", err) + events, errs := mbtest.ReportingFetchV2(f) + if len(errs) > 0 { + t.Fatalf("received error: %+v", errs[0]) } + + if len(events) == 0 { + t.Fatal("no events were generated") + } + + fullEvent := mbtest.StandardizeEvent(f, events[len(events)-1], core.AddDatasetToEvent) + mbtest.WriteEventToDataJSON(t, fullEvent, "") } func getConfig() map[string]interface{} { return map[string]interface{}{ - "module": "system", - "metricsets": []string{"packages"}, + "module": "system", + "datasets": []string{"package"}, } } diff --git a/x-pack/auditbeat/module/system/package/package_windows.go b/x-pack/auditbeat/module/system/package/package_windows.go new file mode 100644 index 000000000000..6811cb41c601 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/package_windows.go @@ -0,0 +1,29 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build windows + +package socket + +import ( + "fmt" + + "github.com/elastic/beats/metricbeat/mb" +) + +const ( + moduleName = "system" + metricsetName = "package" +) + +func init() { + mb.Registry.MustAddMetricSet(moduleName, metricsetName, New, + mb.DefaultMetricSet(), + ) +} + +// New returns an error. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + return nil, fmt.Errorf("the %v/%v dataset is not supported on Windows", moduleName, metricsetName) +} diff --git a/x-pack/auditbeat/module/system/packages/_meta/data.json b/x-pack/auditbeat/module/system/packages/_meta/data.json deleted file mode 100644 index 36bbb2fd0bac..000000000000 --- a/x-pack/auditbeat/module/system/packages/_meta/data.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { - "hostname": "host.example.com", - "name": "host.example.com" - }, - "metricset": { - "module": "system", - "name": "packages", - "rtt": 115 - }, - "system": { - "packages": { - "package": [ - { - "arch": "amd64", - "installtime": "0001-01-01T00:00:00Z", - "license": "", - "name": "vim-tiny", - "release": "", - "size": 1271, - "status": "installed", - "summary": "Vi IMproved - enhanced vi editor - compact version", - "url": "", - "version": "2:8.0.1453-1ubuntu1" - } - ] - } - } -} diff --git a/x-pack/auditbeat/module/system/packages/_meta/docs.asciidoc.disabled b/x-pack/auditbeat/module/system/packages/_meta/docs.asciidoc.disabled deleted file mode 100644 index 4dd5d809c944..000000000000 --- a/x-pack/auditbeat/module/system/packages/_meta/docs.asciidoc.disabled +++ /dev/null @@ -1,8 +0,0 @@ -The System `packages` dataset provides ... TODO. - -The module is implemented for Linux, macOS (Darwin), and Windows. - -[float] -=== Configuration options - -TODO diff --git a/x-pack/auditbeat/module/system/packages/_meta/fields.yml.disabled b/x-pack/auditbeat/module/system/packages/_meta/fields.yml.disabled deleted file mode 100644 index f57093bc150d..000000000000 --- a/x-pack/auditbeat/module/system/packages/_meta/fields.yml.disabled +++ /dev/null @@ -1,50 +0,0 @@ -- name: packages - type: group - description: > - `packages` contains information about installed packages. - release: experimental - fields: - - name: package - type: array - description: > - One or more packages. - fields: - - name: status - type: keyword - description: > - Package change - `new`, `installed` or `removed`. - - name: package.name - type: keyword - description: > - Package name. - - name: package.version - type: keyword - description: > - Package version. - - name: package.release - type: keyword - description: > - Package release. - - name: package.arch - type: keyword - description: > - Package architecture. - - name: package.license - type: keyword - description: > - Package license. - - name: package.installtime - type: date - description: > - Package install time. - - name: package.size - type: long - description: > - Package size. - - name: package.summary - description: > - Package summary. - - name: package.url - type: keyword - description: > - Package URL. diff --git a/x-pack/auditbeat/module/system/packages/config.go b/x-pack/auditbeat/module/system/packages/config.go deleted file mode 100644 index 05fdce2fcb16..000000000000 --- a/x-pack/auditbeat/module/system/packages/config.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package packages - -// Config defines the host metricset's configuration options. -type Config struct { - ReportChanges bool `config:"packages.report_changes"` -} - -// Validate validates the host metricset config. -func (c *Config) Validate() error { - return nil -} - -var defaultConfig = Config{ - ReportChanges: true, -} diff --git a/x-pack/auditbeat/module/system/packages/packages.go b/x-pack/auditbeat/module/system/packages/packages.go deleted file mode 100644 index 6cb0216b249b..000000000000 --- a/x-pack/auditbeat/module/system/packages/packages.go +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package packages - -import ( - "bufio" - "fmt" - "io/ioutil" - "os" - "path" - "strconv" - "strings" - "time" - - "github.com/pkg/errors" - - "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/cfgwarn" - "github.com/elastic/beats/metricbeat/mb" - "github.com/elastic/beats/x-pack/auditbeat/cache" - "github.com/elastic/go-sysinfo/types" - - "github.com/OneOfOne/xxhash" - - "github.com/elastic/beats/libbeat/logp" - "github.com/elastic/go-sysinfo" -) - -const ( - moduleName = "system" - metricsetName = "packages" - //namespace = "system.audit.packages" - - redhat = "redhat" - debian = "debian" - darwin = "darwin" -) - -func init() { - /*mb.Registry.MustAddMetricSet(moduleName, metricsetName, New, - mb.DefaultMetricSet(), - mb.WithNamespace(namespace), - )*/ -} - -// MetricSet collects data about the host. -type MetricSet struct { - mb.BaseMetricSet - config Config - osFamily string - cache *cache.Cache - log *logp.Logger -} - -// Package represents information for a package. -type Package struct { - Name string - Version string - Release string - Arch string - License string - InstallTime time.Time - Size uint64 - Summary string - URL string -} - -// Hash creates a hash for Package. -func (pkg Package) Hash() uint64 { - h := xxhash.New64() - h.WriteString(pkg.Name) - h.WriteString(pkg.InstallTime.String()) - return h.Sum64() -} - -func (pkg Package) toMapStr() common.MapStr { - return common.MapStr{ - "name": pkg.Name, - "version": pkg.Version, - "release": pkg.Release, - "arch": pkg.Arch, - "license": pkg.License, - "installtime": pkg.InstallTime, - "size": pkg.Size, - "summary": pkg.Summary, - "url": pkg.URL, - } -} - -func getOS() (*types.OSInfo, error) { - host, err := sysinfo.Host() - if err != nil { - return nil, errors.Wrap(err, "error getting the OS") - } - - hostInfo := host.Info() - if hostInfo.OS == nil { - return nil, errors.New("no host info") - } - - return hostInfo.OS, nil -} - -// New constructs a new MetricSet. -func New(base mb.BaseMetricSet) (mb.MetricSet, error) { - cfgwarn.Experimental("The %v/%v dataset is experimental", moduleName, metricsetName) - - config := defaultConfig - if err := base.Module().UnpackConfig(&config); err != nil { - return nil, errors.Wrapf(err, "failed to unpack the %v/%v config", moduleName, metricsetName) - } - - ms := &MetricSet{ - BaseMetricSet: base, - config: config, - log: logp.NewLogger(moduleName), - } - - if os, err := getOS(); err == nil { - switch os.Family { - case redhat, debian, darwin: - ms.osFamily = os.Family - default: - return nil, fmt.Errorf("this metricset does not support OS family %v", os.Family) - } - } else if err != nil { - return nil, err - } - - if config.ReportChanges { - ms.cache = cache.New() - } - - return ms, nil -} - -// Fetch collects data about the host. It is invoked periodically. -func (ms *MetricSet) Fetch(report mb.ReporterV2) { - packages, err := getPackages(ms.osFamily) - if err != nil { - ms.log.Error(err) - report.Error(err) - return - } - - if ms.cache != nil && !ms.cache.IsEmpty() { - installed, removed := ms.cache.DiffAndUpdateCache(convertToCacheable(packages)) - - for _, pkgInfo := range installed { - pkgInfoMapStr := pkgInfo.(*Package).toMapStr() - pkgInfoMapStr.Put("status", "new") - - report.Event(mb.Event{ - MetricSetFields: common.MapStr{ - "package": pkgInfoMapStr, - }, - }) - } - - for _, pkgInfo := range removed { - pkgInfoMapStr := pkgInfo.(*Package).toMapStr() - pkgInfoMapStr.Put("status", "removed") - - report.Event(mb.Event{ - MetricSetFields: common.MapStr{ - "package": pkgInfoMapStr, - }, - }) - } - } else { - // Report all installed packages - var pkgInfos []common.MapStr - - for _, pkgInfo := range packages { - pkgInfoMapStr := pkgInfo.toMapStr() - pkgInfoMapStr.Put("status", "installed") - - pkgInfos = append(pkgInfos, pkgInfoMapStr) - } - - report.Event(mb.Event{ - MetricSetFields: common.MapStr{ - "package": pkgInfos, - }, - }) - - if ms.cache != nil { - // This will initialize the cache with the current packages - ms.cache.DiffAndUpdateCache(convertToCacheable(packages)) - } - } -} - -func convertToCacheable(packages []*Package) []cache.Cacheable { - c := make([]cache.Cacheable, 0, len(packages)) - - for _, p := range packages { - c = append(c, p) - } - - return c -} - -func getPackages(osFamily string) (packages []*Package, err error) { - switch osFamily { - case redhat: - // TODO: Implement RPM - err = errors.New("RPM not yet supported") - case debian: - packages, err = listDebPackages() - if err != nil { - err = errors.Wrap(err, "error getting DEB packages") - } - case darwin: - packages, err = listBrewPackages() - if err != nil { - err = errors.Wrap(err, "error getting Homebrew packages") - } - default: - panic("unknown OS - this should not have happened") - } - - return -} - -func listDebPackages() ([]*Package, error) { - const statusFile = "/var/lib/dpkg/status" - file, err := os.Open(statusFile) - if err != nil { - return nil, errors.Wrapf(err, "error opening '%s'", statusFile) - } - defer file.Close() - - var packages []*Package - pkg := &Package{} - scanner := bufio.NewScanner(file) - for scanner.Scan() { - line := scanner.Text() - if len(strings.TrimSpace(line)) == 0 { - // empty line signals new package - packages = append(packages, pkg) - pkg = &Package{} - continue - } - if strings.HasPrefix(line, " ") { - // not interested in multi-lines for now - continue - } - words := strings.SplitN(line, ":", 2) - if len(words) != 2 { - return nil, fmt.Errorf("the following line was unexpected (no ':' found): '%s'", line) - } - value := strings.TrimSpace(words[1]) - switch strings.ToLower(words[0]) { - case "package": - pkg.Name = value - case "architecture": - pkg.Arch = value - case "version": - pkg.Version = value - case "description": - pkg.Summary = value - case "installed-size": - pkg.Size, err = strconv.ParseUint(value, 10, 64) - if err != nil { - return nil, errors.Wrapf(err, "error converting %s to int", value) - } - default: - continue - } - } - if err = scanner.Err(); err != nil { - return nil, errors.Wrap(err, "error scanning file") - } - return packages, nil -} - -func listBrewPackages() ([]*Package, error) { - const cellarPath = "/usr/local/Cellar" - - packageDirs, err := ioutil.ReadDir(cellarPath) - if os.IsNotExist(err) { - return nil, errors.Wrapf(err, "%s does not exist - is Homebrew installed?", cellarPath) - } else if err != nil { - return nil, errors.Wrapf(err, "error reading directory %s", cellarPath) - } - - var packages []*Package - for _, packageDir := range packageDirs { - if !packageDir.IsDir() { - continue - } - pkgPath := path.Join(cellarPath, packageDir.Name()) - versions, err := ioutil.ReadDir(pkgPath) - if err != nil { - return nil, errors.Wrapf(err, "error reading directory: %s", pkgPath) - } - - for _, version := range versions { - if !version.IsDir() { - continue - } - pkg := &Package{ - Name: packageDir.Name(), - Version: version.Name(), - InstallTime: version.ModTime(), - } - - // read formula - formulaPath := path.Join(cellarPath, pkg.Name, pkg.Version, ".brew", pkg.Name+".rb") - file, err := os.Open(formulaPath) - if err != nil { - //fmt.Printf("WARNING: Can't get formula for package %s-%s\n", pkg.Name, pkg.Version) - // TODO: follow the path from INSTALL_RECEIPT.json to find the formula - continue - } - scanner := bufio.NewScanner(file) - count := 15 // only look into the first few lines of the formula - for scanner.Scan() { - count-- - if count == 0 { - break - } - line := scanner.Text() - if strings.HasPrefix(line, " desc ") { - pkg.Summary = strings.Trim(line[7:], " \"") - } else if strings.HasPrefix(line, " homepage ") { - pkg.URL = strings.Trim(line[11:], " \"") - } - } - - packages = append(packages, pkg) - } - } - return packages, nil -} diff --git a/x-pack/auditbeat/tests/system/test_metricsets.py b/x-pack/auditbeat/tests/system/test_metricsets.py index d4b5fff28ca4..a5ac543bd211 100644 --- a/x-pack/auditbeat/tests/system/test_metricsets.py +++ b/x-pack/auditbeat/tests/system/test_metricsets.py @@ -1,5 +1,6 @@ import jinja2 import os +import platform import sys import time import unittest @@ -21,16 +22,18 @@ def test_metricset_host(self): # Metricset is experimental and that generates a warning, TODO: remove later self.check_metricset("system", "host", COMMON_FIELDS + fields, warnings_allowed=True) - @unittest.skip("Packages metricset is disabled") - def test_metricset_packages(self): + @unittest.skipIf(sys.platform == "win32", "Not implemented for Windows") + @unittest.skipIf(sys.platform == "linux2" and platform.linux_distribution()[0] != "debian", + "Only implemented for Debian") + def test_metricset_package(self): """ - packages metricset collects information about installed packages on a system. + package metricset collects information about installed packages on a system. """ - fields = ["system.audit.packages.package"] + fields = ["system.audit.package.name", "system.audit.package.version", "system.audit.package.installtime"] # Metricset is experimental and that generates a warning, TODO: remove later - self.check_metricset("system", "packages", COMMON_FIELDS + fields, warnings_allowed=True) + self.check_metricset("system", "package", COMMON_FIELDS + fields, warnings_allowed=True) def test_metricset_process(self): """ From 94ce609df7e292fbf7dadbf27c11b7a989163ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20P=C3=A9rez-Aradros=20Herce?= Date: Tue, 29 Jan 2019 15:59:30 +0100 Subject: [PATCH 03/66] Enable Docker and Kubernetes labels dedot by default (#10338) * Enable Docker and Kubernetes labels dedot by default --- CHANGELOG.next.asciidoc | 1 + libbeat/common/kubernetes/metadata.go | 4 ++-- libbeat/common/kubernetes/metadata_test.go | 24 +++++++++---------- .../add_docker_metadata_test.go | 2 +- .../processors/add_docker_metadata/config.go | 2 +- metricbeat/module/kubernetes/_meta/config.yml | 4 ++-- metricbeat/module/kubernetes/event/config.go | 4 ++-- metricbeat/module/kubernetes/event/event.go | 3 ++- metricbeat/modules.d/kubernetes.yml.disabled | 4 ++-- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 2e1172fccdcb..9c1c0b550c0b 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -21,6 +21,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Rename `process.exe` to `process.executable` in add_process_metadata to align with ECS. {pull}9949[9949] - Import ECS change https://github.com/elastic/ecs/pull/308[ecs#308]: leaf field `user.group` is now the `group` field set. {pull}10275[10275] +- Docker and Kubernetes labels/annotations will be "dedoted" by default. {pull}10338[10338] *Auditbeat* - Rename `process.exe` to `process.executable` in auditd module to align with ECS. {pull}9949[9949] diff --git a/libbeat/common/kubernetes/metadata.go b/libbeat/common/kubernetes/metadata.go index d9698daad99a..ad53378abaca 100644 --- a/libbeat/common/kubernetes/metadata.go +++ b/libbeat/common/kubernetes/metadata.go @@ -55,8 +55,8 @@ func NewMetaGenerator(cfg *common.Config) (MetaGenerator, error) { // default settings: generator := metaGenerator{ IncludeCreatorMetadata: true, - LabelsDedot: false, - AnnotationsDedot: false, + LabelsDedot: true, + AnnotationsDedot: true, } err := cfg.Unpack(&generator) diff --git a/libbeat/common/kubernetes/metadata_test.go b/libbeat/common/kubernetes/metadata_test.go index a4717eb2fe47..8d0cd301a3e4 100644 --- a/libbeat/common/kubernetes/metadata_test.go +++ b/libbeat/common/kubernetes/metadata_test.go @@ -35,9 +35,8 @@ func TestPodMetadata(t *testing.T) { True := true False := false tests := []struct { - pod *Pod - meta common.MapStr - config *common.Config + pod *Pod + meta common.MapStr }{ { pod: &Pod{ @@ -59,7 +58,6 @@ func TestPodMetadata(t *testing.T) { "namespace": "test", "labels": common.MapStr{"a": common.MapStr{"value": "bar", "key": "foo"}}, }, - config: common.NewConfig(), }, { pod: &Pod{ @@ -92,12 +90,17 @@ func TestPodMetadata(t *testing.T) { "labels": common.MapStr{"a": common.MapStr{"value": "bar", "key": "foo"}}, "deployment": common.MapStr{"name": "test"}, }, - config: common.NewConfig(), }, } for _, test := range tests { - metaGen, err := NewMetaGenerator(test.config) + config, err := common.NewConfigFrom(map[string]interface{}{ + "labels.dedot": false, + "annotations.dedot": false, + "include_annotations": []string{"b", "b.key"}, + }) + + metaGen, err := NewMetaGenerator(config) if err != nil { t.Fatal(err) } @@ -113,9 +116,8 @@ func TestPodMetadataDeDot(t *testing.T) { True := true False := false tests := []struct { - pod *Pod - meta common.MapStr - config *common.Config + pod *Pod + meta common.MapStr }{ { pod: &Pod{ @@ -139,7 +141,6 @@ func TestPodMetadataDeDot(t *testing.T) { "labels": common.MapStr{"a": "bar", "a_key": "foo"}, "annotations": common.MapStr{"b": "bar", "b_key": "foo"}, }, - config: common.NewConfig(), }, { pod: &Pod{ @@ -172,14 +173,11 @@ func TestPodMetadataDeDot(t *testing.T) { "labels": common.MapStr{"a": "bar", "a_key": "foo"}, "deployment": common.MapStr{"name": "test"}, }, - config: common.NewConfig(), }, } for _, test := range tests { config, err := common.NewConfigFrom(map[string]interface{}{ - "labels.dedot": true, - "annotations.dedot": true, "include_annotations": []string{"b", "b.key"}, }) metaGen, err := NewMetaGenerator(config) diff --git a/libbeat/processors/add_docker_metadata/add_docker_metadata_test.go b/libbeat/processors/add_docker_metadata/add_docker_metadata_test.go index 719e95556bfa..385951765e69 100644 --- a/libbeat/processors/add_docker_metadata/add_docker_metadata_test.go +++ b/libbeat/processors/add_docker_metadata/add_docker_metadata_test.go @@ -104,6 +104,7 @@ func TestMatchNoContainer(t *testing.T) { func TestMatchContainer(t *testing.T) { testConfig, err := common.NewConfigFrom(map[string]interface{}{ "match_fields": []string{"foo"}, + "labels.dedot": false, }) assert.NoError(t, err) @@ -152,7 +153,6 @@ func TestMatchContainer(t *testing.T) { func TestMatchContainerWithDedot(t *testing.T) { testConfig, err := common.NewConfigFrom(map[string]interface{}{ "match_fields": []string{"foo"}, - "labels.dedot": true, }) assert.NoError(t, err) diff --git a/libbeat/processors/add_docker_metadata/config.go b/libbeat/processors/add_docker_metadata/config.go index dc1a3d4fc898..aa78dd08ca04 100644 --- a/libbeat/processors/add_docker_metadata/config.go +++ b/libbeat/processors/add_docker_metadata/config.go @@ -46,6 +46,6 @@ func defaultConfig() Config { MatchSource: true, SourceIndex: 4, // Use 4 to match the CID in /var/lib/docker/containers//*.log. MatchPIDs: []string{"process.pid", "process.ppid"}, - DeDot: false, + DeDot: true, } } diff --git a/metricbeat/module/kubernetes/_meta/config.yml b/metricbeat/module/kubernetes/_meta/config.yml index ec678aa79b5a..e0d140ddaa85 100644 --- a/metricbeat/module/kubernetes/_meta/config.yml +++ b/metricbeat/module/kubernetes/_meta/config.yml @@ -17,8 +17,8 @@ # Enriching parameters: #add_metadata: true #in_cluster: true - #labels.dedot: false - #annotations.dedot: false + #labels.dedot: true + #annotations.dedot: true # When used outside the cluster: #in_cluster: false #host: node_name diff --git a/metricbeat/module/kubernetes/event/config.go b/metricbeat/module/kubernetes/event/config.go index daabe2b292e6..93cf663eca82 100644 --- a/metricbeat/module/kubernetes/event/config.go +++ b/metricbeat/module/kubernetes/event/config.go @@ -39,8 +39,8 @@ func defaultKubernetesEventsConfig() kubeEventsConfig { return kubeEventsConfig{ InCluster: true, SyncPeriod: 1 * time.Second, - LabelsDedot: false, - AnnotationsDedot: false, + LabelsDedot: true, + AnnotationsDedot: true, } } diff --git a/metricbeat/module/kubernetes/event/event.go b/metricbeat/module/kubernetes/event/event.go index 2d10068d8a56..defdb9857bd1 100644 --- a/metricbeat/module/kubernetes/event/event.go +++ b/metricbeat/module/kubernetes/event/event.go @@ -46,7 +46,8 @@ type MetricSet struct { } // dedotConfig defines LabelsDedot and AnnotationsDedot. -// Default to be false. If set to true, replace dots in labels with `_`. +// If set to true, replace dots in labels with `_`. +// Default to be true. type dedotConfig struct { LabelsDedot bool `config:"labels.dedot"` AnnotationsDedot bool `config:"annotations.dedot"` diff --git a/metricbeat/modules.d/kubernetes.yml.disabled b/metricbeat/modules.d/kubernetes.yml.disabled index 38b08c8e05d8..6ef57d332257 100644 --- a/metricbeat/modules.d/kubernetes.yml.disabled +++ b/metricbeat/modules.d/kubernetes.yml.disabled @@ -20,8 +20,8 @@ # Enriching parameters: #add_metadata: true #in_cluster: true - #labels.dedot: false - #annotations.dedot: false + #labels.dedot: true + #annotations.dedot: true # When used outside the cluster: #in_cluster: false #host: node_name From e9fe7ed1d853cf7051225fac1e04298198c68bb3 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 16:45:53 +0100 Subject: [PATCH 04/66] [Metricbeat] Move mongodb.status metricset to ECS (#10368) Only field changed for now is service.version. The metricset was also changed to use the reporter interface. --- CHANGELOG.next.asciidoc | 1 + dev-tools/ecs-migration.yml | 12 + metricbeat/docs/fields.asciidoc | 8 +- metricbeat/module/mongodb/fields.go | 2 +- .../module/mongodb/status/_meta/data.json | 414 +++++++++--------- .../module/mongodb/status/_meta/fields.yml | 6 +- metricbeat/module/mongodb/status/status.go | 29 +- .../mongodb/status/status_integration_test.go | 32 +- metricbeat/tests/system/test_mongodb.py | 2 +- 9 files changed, 270 insertions(+), 236 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 9c1c0b550c0b..5c2ad5f55879 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -78,6 +78,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Adjust Redis.info metricset fields to ECS. {pull}10319[10319] - Change type of field docker.container.ip_addresses to `ip` instead of `keyword. {pull}10364[10364] - Rename http.request.body field to http.request.body.content. {pull}10315[10315] +- Adjust mongodb.status metricset to to ECS. {pull}10368[10368] *Packetbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 436a844fae3a..73e5b61cea47 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -1206,6 +1206,18 @@ ## Modules +### Mongodb + +- from: mongodb.status.version + to: service.version + alias: true + beat: metricbeat + +- from: mongodb.status.process + to: process.name + alias: true + beat: metricbeat + ### Redis - from: redis.info.server.version diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 1d19cbad01e3..06e63df57a9e 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -15421,7 +15421,9 @@ MongoDB server status metrics. *`mongodb.status.version`*:: + -- -type: keyword +type: alias + +alias to: service.version Instance version. @@ -15431,7 +15433,9 @@ Instance version. *`mongodb.status.process`*:: + -- -type: keyword +type: alias + +alias to: process.name The current MongoDB process. Possible values are mongos or mongod. diff --git a/metricbeat/module/mongodb/fields.go b/metricbeat/module/mongodb/fields.go index 8f4c35037c04..d9fc332c1f5c 100644 --- a/metricbeat/module/mongodb/fields.go +++ b/metricbeat/module/mongodb/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMongodb returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/mongodb. func AssetMongodb() string { - return "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" + return "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" } diff --git a/metricbeat/module/mongodb/status/_meta/data.json b/metricbeat/module/mongodb/status/_meta/data.json index 7fd0937fc7d5..0ec8996ddaf1 100644 --- a/metricbeat/module/mongodb/status/_meta/data.json +++ b/metricbeat/module/mongodb/status/_meta/data.json @@ -1,209 +1,209 @@ { - "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { - "hostname": "host.example.com", - "name": "host.example.com" - }, - "metricset": { - "host": "mongodb:27017", - "module": "mongodb", - "name": "status", - "rtt": 115 - }, - "mongodb": { - "status": { - "version": "3.4.7", - "ops": { - "latencies": { - "writes": { - "latency": 0, - "count": 0 - }, - "commands": { - "latency": 439756604, - "count": 7607434 - }, - "reads": { - "count": 19245, - "latency": 5504505 - } - }, - "counters": { - "update": 0, - "delete": 0, - "getmore": 14, - "command": 7607435, - "insert": 0, - "query": 19200 - }, - "replicated": { - "query": 0, - "update": 0, - "delete": 0, - "getmore": 0, - "command": 0, - "insert": 0 - } - }, - "uptime": { - "ms": 4909716080 - }, - "asserts": { - "warning": 0, - "msg": 0, - "user": 32, - "rollovers": 0, - "regular": 0 - }, - "local_time": "2018-07-17T18:31:45.823Z", - "global_lock": { - "total_time": { - "us": 4909712143000 + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { + "hostname": "host.example.com", + "name": "host.example.com" + }, + "event": { + "dataset": "mongodb.status", + "duration": 115000, + "module": "mongodb" + }, + "metricset": { + "name": "status" + }, + "mongodb": { + "status": { + "asserts": { + "msg": 0, + "regular": 0, + "rollovers": 0, + "user": 0, + "warning": 0 + }, + "connections": { + "available": 838859, + "current": 1, + "total_created": 69 + }, + "extra_info": { + "heap_usage": {}, + "page_faults": 0 + }, + "global_lock": { + "active_clients": { + "readers": 0, + "total": 7, + "writers": 0 }, - "current_queue": { - "total": 0, - "readers": 0, - "writers": 0 - }, - "active_clients": { - "readers": 0, - "writers": 0, - "total": 19 - } - }, - "network": { - "out": { - "bytes": 5137630772 - }, - "requests": 15253359, - "in": { - "bytes": 973355182 - } - }, - "locks": { - "oplog": { - "acquire": { - "count": { - "r": 4909608 - } - }, - "wait": {}, - "deadlock": {} - }, - "global": { - "wait": {}, - "deadlock": {}, - "acquire": { - "count": { - "w": 22, - "W": 2, - "r": 17350359 - } - } - }, - "database": { - "wait": {}, - "deadlock": {}, - "acquire": { - "count": { - "R": 21447, - "W": 22, - "r": 11087051 - } - } - }, - "collection": { - "wait": {}, - "deadlock": {}, - "acquire": { - "count": { - "r": 6155983 - } - } - }, - "meta_data": { - "acquire": { - "count": { - "w": 1 - } - }, - "wait": {}, - "deadlock": {} - } - }, - "wired_tiger": { - "cache": { - "maximum": { - "bytes": 1534066688 - }, - "used": { - "bytes": 65472 - }, - "dirty": { - "bytes": 0 - }, - "pages": { - "write": 63, - "evicted": 0, - "read": 18 - } - }, - "log": { - "syncs": 38, - "size": { - "bytes": 33554432 - }, - "write": { - "bytes": 15104 - }, - "max_file_size": { - "bytes": 104857600 - }, - "flushes": 49022011, - "writes": 47, - "scans": 5 - }, - "concurrent_transactions": { - "write": { - "available": 128, - "total_tickets": 128, - "out": 0 - }, - "read": { - "available": 128, - "total_tickets": 128, - "out": 0 - } - } - }, - "storage_engine": { - "name": "wiredTiger" - }, - "process": "mongod", - "memory": { - "mapped": { - "mb": 0 - }, - "mapped_with_journal": { - "mb": 0 - }, - "bits": 64, - "resident": { - "mb": 21 - }, - "virtual": { - "mb": 1024 - } - }, - "connections": { - "total_created": 66310, - "current": 11, - "available": 51189 - }, - "extra_info": { - "page_faults": 1197, - "heap_usage": {} - } - } - } -} + "current_queue": { + "readers": 0, + "total": 0, + "writers": 0 + }, + "total_time": { + "us": 68634000 + } + }, + "local_time": "2019-01-29T13:47:39.864Z", + "locks": { + "collection": { + "acquire": { + "count": { + "r": 42, + "w": 2 + } + }, + "deadlock": {}, + "wait": {} + }, + "database": { + "acquire": { + "count": { + "R": 1, + "W": 7, + "r": 42 + } + }, + "deadlock": {}, + "wait": {} + }, + "global": { + "acquire": { + "count": { + "W": 3, + "r": 176, + "w": 7 + } + }, + "deadlock": {}, + "wait": {} + }, + "meta_data": { + "acquire": { + "count": { + "w": 1 + } + }, + "deadlock": {}, + "wait": {} + } + }, + "memory": { + "bits": 64, + "mapped": { + "mb": 0 + }, + "mapped_with_journal": { + "mb": 0 + }, + "resident": { + "mb": 59 + }, + "virtual": { + "mb": 928 + } + }, + "network": { + "in": { + "bytes": 1624 + }, + "out": { + "bytes": 143648 + }, + "requests": 55 + }, + "ops": { + "counters": { + "command": 28, + "delete": 0, + "getmore": 0, + "insert": 0, + "query": 1, + "update": 0 + }, + "latencies": { + "commands": { + "count": 27, + "latency": 2834 + }, + "reads": { + "count": 0, + "latency": 0 + }, + "writes": { + "count": 0, + "latency": 0 + } + }, + "replicated": { + "command": 0, + "delete": 0, + "getmore": 0, + "insert": 0, + "query": 0, + "update": 0 + } + }, + "storage_engine": { + "name": "wiredTiger" + }, + "uptime": { + "ms": 68626 + }, + "wired_tiger": { + "cache": { + "dirty": { + "bytes": 19336 + }, + "maximum": { + "bytes": 2585788416 + }, + "pages": { + "evicted": 0, + "read": 0, + "write": 14 + }, + "used": { + "bytes": 29316 + } + }, + "concurrent_transactions": { + "read": { + "available": 128, + "out": 0, + "total_tickets": 128 + }, + "write": { + "available": 128, + "out": 0, + "total_tickets": 128 + } + }, + "log": { + "flushes": 683, + "max_file_size": { + "bytes": 104857600 + }, + "scans": 0, + "size": { + "bytes": 33554432 + }, + "syncs": 13, + "write": { + "bytes": 16640 + }, + "writes": 42 + } + } + } + }, + "process": { + "name": "mongod" + }, + "service": { + "address": "127.0.0.1:27017", + "type": "mongodb", + "version": "3.4.19" + } +} \ No newline at end of file diff --git a/metricbeat/module/mongodb/status/_meta/fields.yml b/metricbeat/module/mongodb/status/_meta/fields.yml index d3cbb3b88a89..7f6d43809796 100644 --- a/metricbeat/module/mongodb/status/_meta/fields.yml +++ b/metricbeat/module/mongodb/status/_meta/fields.yml @@ -5,11 +5,13 @@ release: ga fields: - name: version - type: keyword + type: alias + path: service.version description: > Instance version. - name: process - type: keyword + type: alias + path: process.name description: > The current MongoDB process. Possible values are mongos or mongod. - name: uptime.ms diff --git a/metricbeat/module/mongodb/status/status.go b/metricbeat/module/mongodb/status/status.go index e7c2bc810a45..e3ade9d45c25 100644 --- a/metricbeat/module/mongodb/status/status.go +++ b/metricbeat/module/mongodb/status/status.go @@ -26,11 +26,6 @@ import ( "gopkg.in/mgo.v2/bson" ) -/* -TODOs: - * add a metricset for "metrics" data -*/ - var debugf = logp.MakeDebug("mongodb.status") func init() { @@ -62,20 +57,34 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { // Fetch methods implements the data gathering and data conversion to the right format // It returns the event which is then forward to the output. In case of an error, a // descriptive error must be returned. -func (m *MetricSet) Fetch() (common.MapStr, error) { +func (m *MetricSet) Fetch(r mb.ReporterV2) { // instantiate direct connections to each of the configured Mongo hosts mongoSession, err := mongodb.NewDirectSession(m.DialInfo) if err != nil { - return nil, err + r.Error(err) + return } defer mongoSession.Close() result := map[string]interface{}{} if err := mongoSession.DB("admin").Run(bson.D{{Name: "serverStatus", Value: 1}}, &result); err != nil { - return nil, err + r.Error(err) + return } - data, _ := schema.Apply(result) - return data, nil + event := mb.Event{ + RootFields: common.MapStr{}, + } + event.MetricSetFields, _ = schema.Apply(result) + + if v, err := event.MetricSetFields.GetValue("version"); err == nil { + event.RootFields.Put("service.version", v) + event.MetricSetFields.Delete("version") + } + if v, err := event.MetricSetFields.GetValue("process"); err == nil { + event.RootFields.Put("process.name", v) + event.MetricSetFields.Delete("process") + } + r.Event(event) } diff --git a/metricbeat/module/mongodb/status/status_integration_test.go b/metricbeat/module/mongodb/status/status_integration_test.go index 4b3969979d95..83ce40468290 100644 --- a/metricbeat/module/mongodb/status/status_integration_test.go +++ b/metricbeat/module/mongodb/status/status_integration_test.go @@ -24,7 +24,6 @@ import ( "github.com/stretchr/testify/assert" - "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/tests/compose" mbtest "github.com/elastic/beats/metricbeat/mb/testing" "github.com/elastic/beats/metricbeat/module/mongodb" @@ -33,33 +32,40 @@ import ( func TestFetch(t *testing.T) { compose.EnsureUp(t, "mongodb") - f := mbtest.NewEventFetcher(t, getConfig()) - event, err := f.Fetch() - if !assert.NoError(t, err) { + f := mbtest.NewReportingMetricSetV2(t, getConfig()) + events, errs := mbtest.ReportingFetchV2(f) + + assert.Empty(t, errs) + if !assert.NotEmpty(t, events) { t.FailNow() } - t.Logf("%s/%s event: %+v", f.Module().Name(), f.Name(), event) + t.Logf("%s/%s event: %+v", f.Module().Name(), f.Name(), + events[0].BeatEvent("mongodb", "status").Fields.StringToPrint()) + + event := events[0].BeatEvent("mongodb", "status").Fields // Check event fields - current := event["connections"].(common.MapStr)["current"].(int64) - assert.True(t, current >= 0) + current, _ := event.GetValue("mongodb.status.connections.current") + assert.True(t, current.(int64) >= 0) - available := event["connections"].(common.MapStr)["available"].(int64) - assert.True(t, available > 0) + available, _ := event.GetValue("mongodb.status.connections.available") + assert.True(t, available.(int64) > 0) - pageFaults := event["extra_info"].(common.MapStr)["page_faults"].(int64) - assert.True(t, pageFaults >= 0) + pageFaults, _ := event.GetValue("mongodb.status.extra_info.page_faults") + assert.True(t, pageFaults.(int64) >= 0) } func TestData(t *testing.T) { compose.EnsureUp(t, "mongodb") - f := mbtest.NewEventFetcher(t, getConfig()) - err := mbtest.WriteEvent(f, t) + config := getConfig() + f := mbtest.NewReportingMetricSetV2(t, config) + err := mbtest.WriteEventsReporterV2(f, t, ".") if err != nil { t.Fatal("write", err) } + } func getConfig() map[string]interface{} { diff --git a/metricbeat/tests/system/test_mongodb.py b/metricbeat/tests/system/test_mongodb.py index 3a8493584a47..4400d1c95b8b 100644 --- a/metricbeat/tests/system/test_mongodb.py +++ b/metricbeat/tests/system/test_mongodb.py @@ -31,7 +31,7 @@ def test_status(self): self.assertEqual(len(output), 1) evt = output[0] - self.assertItemsEqual(self.de_dot(MONGODB_FIELDS), evt.keys()) + self.assertItemsEqual(self.de_dot(MONGODB_FIELDS + ["process"]), evt.keys()) self.assert_fields_are_documented(evt) From 16c0834b6d3baae59ebcef874dddf78dd20f0c29 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 16:47:08 +0100 Subject: [PATCH 05/66] [Metricbeat] Migrate php_fpm to ECS (#10366) This makes sure proper integration tests are run. --- CHANGELOG.next.asciidoc | 1 + dev-tools/ecs-migration.yml | 27 +++++++++ metricbeat/docs/fields.asciidoc | 20 +++++-- metricbeat/module/php_fpm/fields.go | 2 +- .../module/php_fpm/pool/_meta/data.json | 24 +++++--- .../php_fpm/pool/pool_integration_test.go | 17 ++++++ .../module/php_fpm/process/_meta/data.json | 58 ++++++++++++------- .../module/php_fpm/process/_meta/fields.yml | 20 +++++-- metricbeat/module/php_fpm/process/data.go | 49 +++++++++++----- .../process/process_integration_test.go | 20 ++++++- 10 files changed, 181 insertions(+), 57 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 5c2ad5f55879..29546291fe49 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -78,6 +78,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Adjust Redis.info metricset fields to ECS. {pull}10319[10319] - Change type of field docker.container.ip_addresses to `ip` instead of `keyword. {pull}10364[10364] - Rename http.request.body field to http.request.body.content. {pull}10315[10315] +- Adjust php_fpm.process metricset fields to ECS. {pull}10366[10366] - Adjust mongodb.status metricset to to ECS. {pull}10368[10368] *Packetbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 73e5b61cea47..f44d47487985 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -1220,6 +1220,33 @@ ### Redis +- from: php_fpm.status.pid + to: process.pid + alias: true + beat: metricbeat + +- from: php_fpm.status.request_method + to: http.request.method + alias: true + beat: metricbeat + +- from: php_fpm.status.request_uri + to: url.original + alias: true + beat: metricbeat + +- from: php_fpm.status.content_length + to: http.response.body.bytes + alias: true + beat: metricbeat + +- from: php_fpm.status.user + to: http.response.user.name + alias: true + beat: metricbeat + +### Redis + - from: redis.info.server.version to: service.version alias: true diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 06e63df57a9e..2fdd5cc13c5d 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -18855,7 +18855,9 @@ process contains the metrics that were obtained from the PHP-FPM process. *`php_fpm.process.pid`*:: + -- -type: integer +type: alias + +alias to: process.pid The PID of the process @@ -18917,7 +18919,9 @@ The duration in microseconds (1 million in a second) of the current request (my *`php_fpm.process.request_method`*:: + -- -type: keyword +type: alias + +alias to: http.request.method The request method (GET, POST, etc) (of the current request) @@ -18927,7 +18931,9 @@ The request method (GET, POST, etc) (of the current request) *`php_fpm.process.request_uri`*:: + -- -type: text +type: alias + +alias to: url.original The request URI with the query string (of the current request) @@ -18937,7 +18943,9 @@ The request URI with the query string (of the current request) *`php_fpm.process.content_length`*:: + -- -type: integer +type: alias + +alias to: http.response.body.bytes The content length of the request (only with POST) (of the current request) @@ -18947,7 +18955,9 @@ The content length of the request (only with POST) (of the current request) *`php_fpm.process.user`*:: + -- -type: keyword +type: alias + +alias to: user.name The user (PHP_AUTH_USER) (or - if not set) (for the current request) diff --git a/metricbeat/module/php_fpm/fields.go b/metricbeat/module/php_fpm/fields.go index 8fe2f02141ec..fd226faf68c4 100644 --- a/metricbeat/module/php_fpm/fields.go +++ b/metricbeat/module/php_fpm/fields.go @@ -32,5 +32,5 @@ func init() { // AssetPhpFpm returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/php_fpm. func AssetPhpFpm() string { - return "eJzMWFtv47oRfs+vGOQlNuoY57y6QIHi9GyTh90a2exTUcg0NbKI8KIlR3a8v74YipJlWc5l4xarhwARzeE333xzoW7hCfcLqMoqKypzBUCKNC7genm3zD4tP19fAeQYpFcVKWcX8LcrAIDl3fL20/IzBPRb9BBIUB3AIHklA0inNUrCHArvTPvj+RVAKJ2nTDpbqM0CCqEDXgF41CgCLmAj+DdIpOwmLODf1yHo6xlcl0TV9X+uAAqFOg+LiOEWrDDYx84P7Ss25F1dpTcj8PlZpX0rkM6SUDYAldj5QKUg2KFHcGteHTiTXO6sVWKDIIXW8/Sqj/QIrXO6ezkG9wXIDWzn9Dsx829a3JV3EkOIOOY9y0O8fcz892ihxf2E+53z+WDtBfT8PJYYLYIrIrJjJL8YT0c2h5wd6/YtTCarmRFWbNBfjtSvJEjJGeR7K4yS4Dw4m6MRNp+PIpHOWpRsLoyiGFL9Bgx/dCZjdiCECqUqlIz/qkBKhvlg1xhZB5BCSqwIh1y0GLWzm5OlV0Am/dVmjZ4VqKx0RtkNePxeY6Ckjr4UUpErRegA/XXE7q5EC6JHLKjDBlDE/3o0btuXm1aB0ML3GmscctOyEBcvz4GsvUdLPS56mmhYKMUWYY1oQVlFShDmM1jXBNbRiNU9UufwHO45vVWArdA1svPW2dsf6B1zQftKcbncg0HRHie0HrHKNImtUFqsNbbBSImEAYTvXNF7WNdhPwNhc97mMa5aN2K1Z6CzTa4xH4+0+EytKObwIFRQI0xzoTFzI54zWSqde7QrmFTebVWOEUMLWAoLpbC5RlA05UZY6xxK1MMk4+cJsWrIS8HRbjeHR35ReVehpz0UTmu3CwcpFUJS5HHEYCvlRm4BtkqAgODkExJMHv9YcsEolEZYi4D5tKWwDqBsiV7RsErwE9yhistSeCEJfZPn/Loxf5LyrayZtAZPFhV+cYEb8axMbXoC73Jc2Qg6nssLFdp8PLz9nAjKSgTmkWtBIOFZ6Gfc67uWabQXdy+oHx37KZJDf/rox9tAlwaXagLLNF9cqAOoXF9eGAdBNMnZ6WG1E4pnT64EiZlV8mSi5jg/U/cO5Yft8X4RB8JpytmmAqaUL4TWsEbacVml8tS7VFKUzUIlPGYJ4yqmZFttBkvxhNC0oHGb7dyXJg+ux6s0LKzOSVhIUtv/B/1tK0ogDwzCbTO4KRszmUH/vhoxOwkOcIsWHLfgoubGwtJJJ8yiFY+h1gQ7FQPAsQSPIofVb6vpOQrIkThtShccPxjkXxLTh2x8qWb+j6JyWi2HoN5X//o9MfMoZHnhGeZLB5SUwdDEuJW5VkZRhBnHl3T+7NzYVhkgrzDEEYD9AuN4rkj4YbJz/imAs5ob73Bu56cycJPy6SZm6k07f99Mx0tv0G6XtR1ptPyO8PKWu9UxLyDatgf4jLKOkymvRHbwWSLmI5FZpU0Zw9Ruk/EWV9PqjDNMWhYFciFXvvSqhHQ2f5P8juEw5FE0uaDhQuG8EbQArJwss+bI93PPhpvRiQk+C3XQfT9yz20F/9GL7s/cazs31DFVjRPKEg7vuC9SyAQu7//RfRc4IacX3UH8zt+cXz2xae/HZ8LkPtc4g4faWmU3M0CS03EgYzI7I7JXJfYq1mN59QH3ZHYW52l2fiBQ9kx6vh3UaOm7CKLeVX4AhqeBF7Bkee0Fn3ApTK09HjCNkt61ZE1+B6O0TksikTjtblNpIGor98Tswe0s5FjEm7izY3JsvTBIpRtLyZ9KkBZDYxUm//zzcQbLf319bNICJuOYXwJYezWCjvCZfg7at4d72Ckq20ud30Mgz2PkO8BxBUVLfFfbUHkpBSSr0Fht49vFNU4UEToz+i4y6zDA8oEYsy2YLO+W2d+/Pd5l377++cBYPNyCKuKkHJCmMCmcfyu85sSLhNkIZZO9+I0d8w9i0yJQO3plsqpHUJ4MLG9A+QzCuNoSR9mgcX7ffOMT4ZDJ0tlQG/ag+SIo9E7sA/zGvvTLVfxeRlwc7uM9JnapNUpRB2yNS6FlrUX7rTF3FrsrYHdg707FJZDQG2UFYf4qMc0pv1oi/DcAAP//XeSCQA==" + return "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" } diff --git a/metricbeat/module/php_fpm/pool/_meta/data.json b/metricbeat/module/php_fpm/pool/_meta/data.json index 6845096a33cd..0fa62df18697 100644 --- a/metricbeat/module/php_fpm/pool/_meta/data.json +++ b/metricbeat/module/php_fpm/pool/_meta/data.json @@ -1,19 +1,21 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, + "event": { + "dataset": "php_fpm.pool", + "duration": 115000, + "module": "php_fpm" + }, "metricset": { - "host": "phpfpm:81", - "module": "php_fpm", - "name": "pool", - "rtt": 115 + "name": "pool" }, "php_fpm": { "pool": { "connections": { - "accepted": 1, + "accepted": 10, "listen_queue_len": 0, "max_listen_queue": 0, "queued": 0 @@ -28,8 +30,12 @@ "total": 2 }, "slow_requests": 0, - "start_since": 670, - "start_time": 1512631228 + "start_since": 600, + "start_time": 1548749474 } + }, + "service": { + "address": "127.0.0.1:81", + "type": "php_fpm" } -} +} \ No newline at end of file diff --git a/metricbeat/module/php_fpm/pool/pool_integration_test.go b/metricbeat/module/php_fpm/pool/pool_integration_test.go index 24b4ae4c5859..0fc2e43e10d1 100644 --- a/metricbeat/module/php_fpm/pool/pool_integration_test.go +++ b/metricbeat/module/php_fpm/pool/pool_integration_test.go @@ -23,10 +23,27 @@ import ( "os" "testing" + "github.com/stretchr/testify/assert" + "github.com/elastic/beats/libbeat/tests/compose" mbtest "github.com/elastic/beats/metricbeat/mb/testing" ) +func TestFetch(t *testing.T) { + compose.EnsureUp(t, "phpfpm") + + f := mbtest.NewReportingMetricSetV2(t, getConfig()) + events, errs := mbtest.ReportingFetchV2(f) + + assert.Empty(t, errs) + if !assert.NotEmpty(t, events) { + t.FailNow() + } + + t.Logf("%s/%s event: %+v", f.Module().Name(), f.Name(), + events[0].BeatEvent("haproxy", "info").Fields.StringToPrint()) + +} func TestData(t *testing.T) { compose.EnsureUp(t, "phpfpm") f := mbtest.NewReportingMetricSetV2(t, getConfig()) diff --git a/metricbeat/module/php_fpm/process/_meta/data.json b/metricbeat/module/php_fpm/process/_meta/data.json index 8de0329a8324..612fa24f87f2 100644 --- a/metricbeat/module/php_fpm/process/_meta/data.json +++ b/metricbeat/module/php_fpm/process/_meta/data.json @@ -1,9 +1,25 @@ { - "@timestamp": "2018-09-25T16:47:04.998Z", + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { + "hostname": "host.example.com", + "name": "host.example.com" + }, + "event": { + "dataset": "php_fpm.process", + "duration": 115000, + "module": "php_fpm" + }, + "http": { + "request": { + "method": "get" + }, + "response": { + "body": { + "bytes": 0 + } + } + }, "metricset": { - "module": "php_fpm", - "host": "phpfpm:81", - "rtt": 24681267, "name": "process" }, "php_fpm": { @@ -13,25 +29,25 @@ "process": { "last_request_cpu": 0, "last_request_memory": 2097152, - "request_duration": 1404, + "request_duration": 204, + "requests": 6, "script": "-", - "pid": 6, - "start_time": 1537974596, - "user": "-", - "state": "Idle", - "start_since": 3946, - "requests": 28, - "request_method": "GET", - "request_uri": "/status?json=", - "content_length": 0 + "start_since": 128, + "start_time": 1548769887, + "state": "Idle" } }, - "beat": { - "name": "host.example.com", - "hostname": "host.example.com", - "version": "7.0.0-alpha1" + "process": { + "pid": 17 + }, + "service": { + "address": "127.0.0.1:81", + "type": "php_fpm" + }, + "url": { + "original": "/status?full=\u0026json=" }, - "host": { - "name": "DESKTOP-RFOOE09" + "user": { + "name": "-" } -} +} \ No newline at end of file diff --git a/metricbeat/module/php_fpm/process/_meta/fields.yml b/metricbeat/module/php_fpm/process/_meta/fields.yml index 284b96fd1480..252c75455c3c 100644 --- a/metricbeat/module/php_fpm/process/_meta/fields.yml +++ b/metricbeat/module/php_fpm/process/_meta/fields.yml @@ -5,7 +5,9 @@ release: ga fields: - name: pid - type: integer + type: alias + path: process.pid + migration: true description: > The PID of the process - name: state @@ -30,19 +32,27 @@ description: > The duration in microseconds (1 million in a second) of the current request (my own definition) - name: request_method - type: keyword + type: alias + path: http.request.method + migration: true description: > The request method (GET, POST, etc) (of the current request) - name: request_uri - type: text + type: alias + path: url.original + migration: true description: > The request URI with the query string (of the current request) - name: content_length - type: integer + type: alias + path: http.response.body.bytes + migration: true description: > The content length of the request (only with POST) (of the current request) - name: user - type: keyword + type: alias + path: user.name + migration: true description: > The user (PHP_AUTH_USER) (or - if not set) (for the current request) - name: script diff --git a/metricbeat/module/php_fpm/process/data.go b/metricbeat/module/php_fpm/process/data.go index 4082180b7102..bb8e6c5cacb1 100644 --- a/metricbeat/module/php_fpm/process/data.go +++ b/metricbeat/module/php_fpm/process/data.go @@ -19,6 +19,7 @@ package process import ( "encoding/json" + "strings" "github.com/elastic/beats/metricbeat/mb" @@ -55,22 +56,40 @@ func eventsMapping(r mb.ReporterV2, content []byte) { } //remapping process details to match the naming format for _, process := range status.Processes { - proc := common.MapStr{ - "pid": process.PID, - "state": process.State, - "start_time": process.StartTime, - "start_since": process.StartSince, - "requests": process.Requests, - "request_duration": process.RequestDuration, - "request_method": process.RequestMethod, - "request_uri": process.RequestURI, - "content_length": process.ContentLength, - "user": process.User, - "script": process.Script, - "last_request_cpu": process.LastRequestCPU, - "last_request_memory": process.LastRequestMemory, + event := mb.Event{ + RootFields: common.MapStr{ + "http": common.MapStr{ + "request": common.MapStr{ + "method": strings.ToLower(process.RequestMethod), + }, + "response": common.MapStr{ + "body": common.MapStr{ + "bytes": process.ContentLength, + }, + }, + }, + "user": common.MapStr{ + "name": process.User, + }, + "process": common.MapStr{ + "pid": process.PID, + }, + "url": common.MapStr{ + "original": process.RequestURI, + }, + }, + MetricSetFields: common.MapStr{ + "state": process.State, + "start_time": process.StartTime, + "start_since": process.StartSince, + "requests": process.Requests, + "request_duration": process.RequestDuration, + "script": process.Script, + "last_request_cpu": process.LastRequestCPU, + "last_request_memory": process.LastRequestMemory, + }, } - event := mb.Event{MetricSetFields: proc} + event.ModuleFields = common.MapStr{} event.ModuleFields.Put("pool.name", status.Name) r.Event(event) diff --git a/metricbeat/module/php_fpm/process/process_integration_test.go b/metricbeat/module/php_fpm/process/process_integration_test.go index 182f4815de4f..6894b2c0e96f 100644 --- a/metricbeat/module/php_fpm/process/process_integration_test.go +++ b/metricbeat/module/php_fpm/process/process_integration_test.go @@ -23,14 +23,32 @@ import ( "os" "testing" + "github.com/stretchr/testify/assert" + "github.com/elastic/beats/libbeat/tests/compose" mbtest "github.com/elastic/beats/metricbeat/mb/testing" ) +func TestFetch(t *testing.T) { + compose.EnsureUp(t, "phpfpm") + + f := mbtest.NewReportingMetricSetV2(t, getConfig()) + events, errs := mbtest.ReportingFetchV2(f) + + assert.Empty(t, errs) + if !assert.NotEmpty(t, events) { + t.FailNow() + } + + t.Logf("%s/%s event: %+v", f.Module().Name(), f.Name(), + events[0].BeatEvent("php_fpm", "process").Fields.StringToPrint()) + +} + func TestData(t *testing.T) { compose.EnsureUp(t, "phpfpm") f := mbtest.NewReportingMetricSetV2(t, getConfig()) - err := mbtest.WriteEventsReporterV2(f, t, "") + err := mbtest.WriteEventsReporterV2(f, t, ".") if err != nil { t.Fatal("write", err) } From fd149bb6ec8eaec296a9800f004afc86ae30fe14 Mon Sep 17 00:00:00 2001 From: Pier-Hugues Pellerin Date: Tue, 29 Jan 2019 11:56:25 -0500 Subject: [PATCH 06/66] Correctly bubble up errors when an integration test fails in a docker container. (#10380) As a retrospect leaving the invocation of `docker-compose logs` was a bad idea, first it could hide some error in the integration suite and it could add unnecessary long logs line in the CI job making debugging even harder. So instead, I've remove it completely and leave up to the person debugging to enabled it back. --- libbeat/scripts/Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libbeat/scripts/Makefile b/libbeat/scripts/Makefile index 0aba68b88d62..47196dd5f9cd 100755 --- a/libbeat/scripts/Makefile +++ b/libbeat/scripts/Makefile @@ -202,7 +202,12 @@ integration-tests: prepare-tests .PHONY: integration-tests-environment integration-tests-environment: ## @testing Runs the integration inside a virtual environment. This can be run on any docker-machine (local, remote) integration-tests-environment: prepare-tests build-image - ${DOCKER_COMPOSE} run beat make integration-tests RACE_DETECTOR=$(RACE_DETECTOR) DOCKER_COMPOSE_PROJECT_NAME=${DOCKER_COMPOSE_PROJECT_NAME} || ${DOCKER_COMPOSE} logs --tail 200 + # If you want to get logs on CI when the `docker-compose` fails, you can + # add `|| ${DOCKER_COMPOSE} logs --tail 200` after the command. + # + # This will make docker-compose command to display the logs on stdout on error, It's not enabled + # by default because it can create noise if the test inside the container fails. + ${DOCKER_COMPOSE} run beat make integration-tests RACE_DETECTOR=$(RACE_DETECTOR) DOCKER_COMPOSE_PROJECT_NAME=${DOCKER_COMPOSE_PROJECT_NAME} # Runs the system tests .PHONY: system-tests From 5e460edb3f0b973bc07224eb63c346196a3df4ce Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 29 Jan 2019 09:49:50 -0800 Subject: [PATCH 07/66] Ingest ES structured audit logs (#10352) This is a "forward port" of https://github.com/elastic/beats/pull/8852. In https://github.com/elastic/beats/pull/8852, we taught Filebeat to ingest either structured or unstructured ES audit logs but the resulting fields conformed to the 6.x mapping structure. In this PR we also teach Filebeat to ingest either structured or unstructured ES audit logs but the resulting fields conform to the 7.0 (ECS-based) mapping structure. --- CHANGELOG.next.asciidoc | 3 + filebeat/docs/fields.asciidoc | 35 +++-- .../module/elasticsearch/_meta/fields.yml | 4 + .../elasticsearch/audit/_meta/fields.yml | 16 +- .../audit/ingest/pipeline-json.json | 132 ++++++++++++++++ .../audit/ingest/pipeline-plaintext.json | 63 ++++++++ .../elasticsearch/audit/ingest/pipeline.json | 60 +++----- .../module/elasticsearch/audit/manifest.yml | 9 +- .../audit/test/{test.log => test-access.log} | 0 ...ted.json => test-access.log-expected.json} | 16 +- .../elasticsearch/audit/test/test-audit.log | 6 + .../audit/test/test-audit.log-expected.json | 145 ++++++++++++++++++ filebeat/module/elasticsearch/fields.go | 2 +- 13 files changed, 421 insertions(+), 70 deletions(-) create mode 100644 filebeat/module/elasticsearch/audit/ingest/pipeline-json.json create mode 100644 filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json rename filebeat/module/elasticsearch/audit/test/{test.log => test-access.log} (100%) rename filebeat/module/elasticsearch/audit/test/{test.log-expected.json => test-access.log-expected.json} (93%) create mode 100644 filebeat/module/elasticsearch/audit/test/test-audit.log create mode 100644 filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 29546291fe49..d169156345f6 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -58,6 +58,8 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d including `http.response.elapsed_time` (ECS). {pull}10188[10188], {pull}10274[10274] - Rename multiple fields to `http.response.body.bytes`, from modules "apache", "iis", "kibana", "nginx" and "traefik", including `http.response.content_length` (ECS). {pull}10188[10188] +- Ingesting Elasticsearch audit logs is only supported with Elasticsearch 6.5.0 and above {pull}10352[10352] +- Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] *Heartbeat* @@ -191,6 +193,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Teach elasticsearch/audit fileset to parse out some more fields. {issue}10134[10134] {pull}10137[10137] - Add convert_timezone to nginx module. {issue}9839[9839] {pull}10148[10148] - Add support for Percona in the `slowlog` fileset of `mysql` module. {issue}6665[6665] {pull}10227[10227] +- Added support for ingesting structured Elasticsearch audit logs {pull}10352[10352] *Heartbeat* diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 055cf62d30b4..ab2c6ea9b5c1 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -3911,6 +3911,17 @@ elasticsearch Module +*`elasticsearch.node.id`*:: ++ +-- +type: keyword + +example: DSiWcTyeThWtUXLB9J0BMw + +ID of the node + +-- + *`elasticsearch.node.name`*:: + -- @@ -3972,7 +3983,7 @@ The layer from which this event originated: rest, transport or ip_filter -- -*`elasticsearch.audit.origin_type`*:: +*`elasticsearch.audit.origin.type`*:: + -- type: keyword @@ -3983,7 +3994,7 @@ Where the request originated: rest (request originated from a REST API request), -- -*`elasticsearch.audit.realm`*:: +*`elasticsearch.audit.user.realm`*:: + -- type: keyword @@ -3992,7 +4003,7 @@ The authentication realm -- -*`elasticsearch.audit.roles`*:: +*`elasticsearch.audit.user.roles`*:: + -- type: keyword @@ -4025,7 +4036,7 @@ Indices accessed by action -- -*`elasticsearch.audit.request`*:: +*`elasticsearch.audit.request.name`*:: + -- type: keyword @@ -4036,39 +4047,39 @@ The type of request that was executed -- -*`elasticsearch.audit.event_type`*:: +*`elasticsearch.audit.request_body`*:: + -- type: alias -alias to: event.type +alias to: http.request.body.content -- -*`elasticsearch.audit.origin_address`*:: +*`elasticsearch.audit.event_type`*:: + -- type: alias -alias to: source.ip +alias to: event.type -- -*`elasticsearch.audit.uri`*:: +*`elasticsearch.audit.origin_address`*:: + -- type: alias -alias to: url.original +alias to: source.ip -- -*`elasticsearch.audit.request_body`*:: +*`elasticsearch.audit.uri`*:: + -- type: alias -alias to: http.request.body.content +alias to: url.original -- diff --git a/filebeat/module/elasticsearch/_meta/fields.yml b/filebeat/module/elasticsearch/_meta/fields.yml index a22b241f68d9..3bfea37be8e0 100644 --- a/filebeat/module/elasticsearch/_meta/fields.yml +++ b/filebeat/module/elasticsearch/_meta/fields.yml @@ -7,6 +7,10 @@ type: group description: > fields: + - name: node.id + description: "ID of the node" + example: "DSiWcTyeThWtUXLB9J0BMw" + type: keyword - name: node.name description: "Name of the node" example: "vWNJsZ3" diff --git a/filebeat/module/elasticsearch/audit/_meta/fields.yml b/filebeat/module/elasticsearch/audit/_meta/fields.yml index 46e0b0530a02..add12776b465 100644 --- a/filebeat/module/elasticsearch/audit/_meta/fields.yml +++ b/filebeat/module/elasticsearch/audit/_meta/fields.yml @@ -6,15 +6,15 @@ description: "The layer from which this event originated: rest, transport or ip_filter" example: "rest" type: keyword - - name: origin_type + - name: origin.type description: "Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)" example: "local_node" type: keyword - - name: realm + - name: user.realm description: "The authentication realm" example": "active_directory" type: keyword - - name: roles + - name: user.roles description: "Roles to which the principal belongs" example: [ "kibana_user", "beats_admin" ] type: keyword @@ -26,10 +26,14 @@ description: "Indices accessed by action" example: [ "foo-2019.01.04", "foo-2019.01.03", "foo-2019.01.06" ] type: keyword - - name: request + - name: request.name description: "The type of request that was executed" example: "ClearScrollRequest" type: keyword + - name: request_body + type: alias + path: http.request.body.content + migration: true - name: event_type type: alias path: event.type @@ -42,10 +46,6 @@ type: alias path: url.original migration: true - - name: request_body - type: alias - path: http.request.body.content - migration: true - name: principal type: alias path: user.name diff --git a/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json b/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json new file mode 100644 index 000000000000..0ef3601bbd0d --- /dev/null +++ b/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json @@ -0,0 +1,132 @@ +{ + "description": "Pipeline for parsing elasticsearch audit logs in JSON format", + "processors": [ + { + "json": { + "field": "message", + "target_field": "elasticsearch.audit" + } + }, + { + "dot_expander": { + "field": "event.action", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.event.action", + "target_field": "event.action" + } + }, + { + "dot_expander": { + "field": "event.type", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.event.type", + "target_field": "elasticsearch.audit.layer" + } + }, + { + "dot_expander": { + "field": "origin.address", + "path": "elasticsearch.audit" + } + }, + { + "grok": { + "field": "elasticsearch.audit.origin.address", + "patterns": [ + "\\[%{IPORHOST:source.ip}\\]:%{INT:source.port:int}", + "%{IPORHOST:source.ip}:%{INT:source.port:int}" + ] + } + }, + { + "rename": { + "field": "elasticsearch.audit.origin.address", + "target_field": "source.address" + } + }, + { + "dot_expander": { + "field": "url.path", + "path": "elasticsearch.audit" + } + }, + { + "dot_expander": { + "field": "url.query", + "path": "elasticsearch.audit" + } + }, + { + "set": { + "if": "ctx.elasticsearch.audit?.url?.path != null && ctx.elasticsearch.audit?.url?.query == null", + "field": "url.original", + "value": "{{elasticsearch.audit.url.path}}" + } + }, + { + "set": { + "if": "ctx.elasticsearch.audit?.url?.path != null && ctx.elasticsearch.audit?.url?.query != null", + "field": "url.original", + "value": "{{elasticsearch.audit.url.path}}?{{elasticsearch.audit.url.query}}" + } + }, + { + "remove": { + "if": "ctx.elasticsearch.audit?.url?.path != null", + "field": "elasticsearch.audit.url.path" + } + }, + { + "remove": { + "if": "ctx.elasticsearch.audit?.url?.query != null", + "field": "elasticsearch.audit.url.query" + } + }, + { + "dot_expander": { + "field": "node.id", + "path": "elasticsearch.audit" + } + }, + { + "dot_expander": { + "field": "node.name", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.node", + "target_field": "elasticsearch.node" + } + }, + { + "dot_expander": { + "field": "user.name", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.user.name", + "target_field": "user.name" + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] +} diff --git a/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json b/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json new file mode 100644 index 000000000000..1e37f253dacc --- /dev/null +++ b/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json @@ -0,0 +1,63 @@ +{ + "description": "Pipeline for parsing elasticsearch audit logs in plaintext format", + "processors": [ + { + "grok": { + "field": "message", + "pattern_definitions": { + "ES_TIMESTAMP": "\\[%{TIMESTAMP_ISO8601:elasticsearch.audit.@timestamp}\\]", + "ES_NODE_NAME": "(\\[%{DATA:elasticsearch.node.name}\\])?", + "ES_AUDIT_LAYER": "\\[%{WORD:elasticsearch.audit.layer}\\]", + "ES_AUDIT_EVENT_TYPE": "\\[%{WORD:event.type}\\]", + "ES_AUDIT_ORIGIN_TYPE": "(origin_type\\=\\[%{WORD:elasticsearch.audit.origin.type}\\])?", + "ES_AUDIT_ORIGIN_ADDRESS": "(origin_address\\=\\[%{IPORHOST:source.ip}\\])?", + "ES_AUDIT_PRINCIPAL": "(principal\\=\\[%{WORD:user.name}\\])?", + "ES_AUDIT_REALM": "(realm\\=\\[%{WORD:elasticsearch.audit.user.realm}\\])?", + "ES_AUDIT_ROLES": "(roles\\=\\[%{DATA:elasticsearch.audit.user.roles}\\])?", + "ES_AUDIT_ACTION": "(action\\=\\[%{DATA:elasticsearch.audit.action}(\\[%{DATA:elasticsearch.audit.sub_action}\\])?\\])?", + "ES_AUDIT_URI": "(uri=\\[%{DATA:url.original}\\])?", + "ES_AUDIT_INDICES": "(indices\\=\\[%{DATA:elasticsearch.audit.indices}\\])?", + "ES_AUDIT_REQUEST": "(request\\=\\[%{WORD:elasticsearch.audit.request.name}\\])?", + "ES_AUDIT_REQUEST_BODY": "(request_body\\=\\[%{DATA:http.request.body.content}\\])?" + }, + "patterns": [ + "%{ES_TIMESTAMP}\\s*%{ES_NODE_NAME}\\s*%{ES_AUDIT_LAYER}\\s*%{ES_AUDIT_EVENT_TYPE}\\s*%{ES_AUDIT_ORIGIN_TYPE},?\\s*%{ES_AUDIT_ORIGIN_ADDRESS},?\\s*%{ES_AUDIT_PRINCIPAL},?\\s*%{ES_AUDIT_REALM},?\\s*%{ES_AUDIT_ROLES},?\\s*%{ES_AUDIT_ACTION},?\\s*%{ES_AUDIT_INDICES},?\\s*%{ES_AUDIT_URI},?\\s*%{ES_AUDIT_REQUEST},?\\s*%{ES_AUDIT_REQUEST_BODY},?" + ] + } + }, + { + "split": { + "field": "elasticsearch.audit.user.roles", + "separator": ",", + "ignore_missing": true + } + }, + { + "split": { + "field": "elasticsearch.audit.indices", + "separator": ",", + "ignore_missing": true + } + }, + { + "script": { + "lang": "painless", + "source": "if (ctx.elasticsearch.audit.sub_action != null) { ctx.elasticsearch.audit.action += '[' + ctx.elasticsearch.audit.sub_action + ']' }" + } + }, + { + "remove": { + "field": "elasticsearch.audit.sub_action", + "ignore_missing": true + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] +} diff --git a/filebeat/module/elasticsearch/audit/ingest/pipeline.json b/filebeat/module/elasticsearch/audit/ingest/pipeline.json index 9c97beb45741..25d5c464d7dc 100644 --- a/filebeat/module/elasticsearch/audit/ingest/pipeline.json +++ b/filebeat/module/elasticsearch/audit/ingest/pipeline.json @@ -10,56 +10,29 @@ { "grok": { "field": "message", - "pattern_definitions": { - "ES_TIMESTAMP": "\\[%{TIMESTAMP_ISO8601:elasticsearch.audit.timestamp}\\]", - "ES_NODE_NAME": "(\\[%{DATA:elasticsearch.node.name}\\])?", - "ES_AUDIT_LAYER": "\\[%{WORD:elasticsearch.audit.layer}\\]", - "ES_AUDIT_EVENT_TYPE": "\\[%{WORD:event.type}\\]", - "ES_AUDIT_ORIGIN_TYPE": "(origin_type\\=\\[%{WORD:elasticsearch.audit.origin_type}\\])?", - "ES_AUDIT_ORIGIN_ADDRESS": "(origin_address\\=\\[%{IPORHOST:source.ip}\\])?", - "ES_AUDIT_PRINCIPAL": "(principal\\=\\[%{WORD:user.name}\\])?", - "ES_AUDIT_REALM": "(realm\\=\\[%{WORD:elasticsearch.audit.realm}\\])?", - "ES_AUDIT_ROLES": "(roles\\=\\[%{DATA:elasticsearch.audit.roles}\\])?", - "ES_AUDIT_ACTION": "(action\\=\\[%{DATA:elasticsearch.audit.action}(\\[%{DATA:elasticsearch.audit.sub_action}\\])?\\])?", - "ES_AUDIT_URI": "(uri=\\[%{DATA:url.original}\\])?", - "ES_AUDIT_INDICES": "(indices\\=\\[%{DATA:elasticsearch.audit.indices}\\])?", - "ES_AUDIT_REQUEST": "(request\\=\\[%{WORD:elasticsearch.audit.request}\\])?", - "ES_AUDIT_REQUEST_BODY": "(request_body\\=\\[%{DATA:http.request.body.content}\\])?" - }, "patterns": [ - "%{ES_TIMESTAMP}\\s*%{ES_NODE_NAME}\\s*%{ES_AUDIT_LAYER}\\s*%{ES_AUDIT_EVENT_TYPE}\\s*%{ES_AUDIT_ORIGIN_TYPE},?\\s*%{ES_AUDIT_ORIGIN_ADDRESS},?\\s*%{ES_AUDIT_PRINCIPAL},?\\s*%{ES_AUDIT_REALM},?\\s*%{ES_AUDIT_ROLES},?\\s*%{ES_AUDIT_ACTION},?\\s*%{ES_AUDIT_INDICES},?\\s*%{ES_AUDIT_URI},?\\s*%{ES_AUDIT_REQUEST},?\\s*%{ES_AUDIT_REQUEST_BODY},?" - ] - } - }, - { - "split": { - "field": "elasticsearch.audit.roles", - "separator": ",", - "ignore_missing": true - } - }, - { - "split": { - "field": "elasticsearch.audit.indices", - "separator": ",", - "ignore_missing": true + "^%{CHAR:first_char}" + ], + "pattern_definitions": { + "CHAR": "." + } } }, { - "script": { - "lang": "painless", - "source": "if (ctx.elasticsearch.audit.sub_action != null) { ctx.elasticsearch.audit.action += '[' + ctx.elasticsearch.audit.sub_action + ']' }" + "pipeline": { + "if": "ctx.first_char != '{'", + "name": "{< IngestPipeline "pipeline-plaintext" >}" } }, { - "remove": { - "field": "elasticsearch.audit.sub_action", - "ignore_missing": true + "pipeline": { + "if": "ctx.first_char == '{'", + "name": "{< IngestPipeline "pipeline-json" >}" } }, { "date": { - "field": "elasticsearch.audit.timestamp", + "field": "elasticsearch.audit.@timestamp", "target_field": "@timestamp", "formats": [ "ISO8601" @@ -70,7 +43,14 @@ }, { "remove": { - "field": "elasticsearch.audit.timestamp" + "field": "elasticsearch.audit.@timestamp" + } + }, + { + "remove": { + "field": [ + "first_char" + ] } } ], diff --git a/filebeat/module/elasticsearch/audit/manifest.yml b/filebeat/module/elasticsearch/audit/manifest.yml index 7ccb68c7e434..677b47eb590f 100644 --- a/filebeat/module/elasticsearch/audit/manifest.yml +++ b/filebeat/module/elasticsearch/audit/manifest.yml @@ -4,10 +4,13 @@ var: - name: paths default: - /var/log/elasticsearch/*_access.log + - /var/log/elasticsearch/*_audit.log os.darwin: - /usr/local/var/lib/elasticsearch/*_access.log + - /usr/local/var/lib/elasticsearch/*_audit.log os.windows: - c:/ProgramData/Elastic/Elasticsearch/logs/*_access.log + - c:/ProgramData/Elastic/Elasticsearch/logs/*_audit.log - name: convert_timezone default: false # if ES < 6.1.0, this flag switches to false automatically when evaluating the @@ -16,5 +19,9 @@ var: version: 6.1.0 value: false -ingest_pipeline: ingest/pipeline.json +ingest_pipeline: + - ingest/pipeline.json + - ingest/pipeline-json.json + - ingest/pipeline-plaintext.json + input: config/audit.yml diff --git a/filebeat/module/elasticsearch/audit/test/test.log b/filebeat/module/elasticsearch/audit/test/test-access.log similarity index 100% rename from filebeat/module/elasticsearch/audit/test/test.log rename to filebeat/module/elasticsearch/audit/test/test-access.log diff --git a/filebeat/module/elasticsearch/audit/test/test.log-expected.json b/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json similarity index 93% rename from filebeat/module/elasticsearch/audit/test/test.log-expected.json rename to filebeat/module/elasticsearch/audit/test/test-access.log-expected.json index 5511a09e38c3..07caf481db24 100644 --- a/filebeat/module/elasticsearch/audit/test/test.log-expected.json +++ b/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json @@ -37,8 +37,8 @@ "ecs.version": "1.0.0-beta2", "elasticsearch.audit.action": "indices:data/read/scroll/clear", "elasticsearch.audit.layer": "transport", - "elasticsearch.audit.origin_type": "local_node", - "elasticsearch.audit.request": "ClearScrollRequest", + "elasticsearch.audit.origin.type": "local_node", + "elasticsearch.audit.request.name": "ClearScrollRequest", "event.dataset": "elasticsearch.audit", "event.module": "elasticsearch", "event.type": "access_granted", @@ -87,8 +87,8 @@ "ecs.version": "1.0.0-beta2", "elasticsearch.audit.action": "cluster:monitor/main", "elasticsearch.audit.layer": "transport", - "elasticsearch.audit.origin_type": "rest", - "elasticsearch.audit.request": "MainRequest", + "elasticsearch.audit.origin.type": "rest", + "elasticsearch.audit.request.name": "MainRequest", "event.dataset": "elasticsearch.audit", "event.module": "elasticsearch", "event.type": "access_denied", @@ -131,10 +131,10 @@ "servicelog-2019.01.07" ], "elasticsearch.audit.layer": "transport", - "elasticsearch.audit.origin_type": "transport", - "elasticsearch.audit.realm": "active_directory", - "elasticsearch.audit.request": "SearchFreeContextRequest", - "elasticsearch.audit.roles": [ + "elasticsearch.audit.origin.type": "transport", + "elasticsearch.audit.request.name": "SearchFreeContextRequest", + "elasticsearch.audit.user.realm": "active_directory", + "elasticsearch.audit.user.roles": [ "kibana_user", "my_custom_role_1", "foo_reader" diff --git a/filebeat/module/elasticsearch/audit/test/test-audit.log b/filebeat/module/elasticsearch/audit/test/test-audit.log new file mode 100644 index 000000000000..2c74b5cbee95 --- /dev/null +++ b/filebeat/module/elasticsearch/audit/test/test-audit.log @@ -0,0 +1,6 @@ +{"@timestamp":"2018-10-31T09:34:25,109", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"rest", "event.action":"authentication_failed", "user.name":"elastic", "origin.type":"rest", "origin.address":"[::1]:61598", "url.path":"/_xpack/security/user/beats_system/_password"} +{"@timestamp":"2018-10-31T09:34:25,207", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"rest", "event.action":"authentication_failed", "user.name":"elastic", "origin.type":"rest", "origin.address":"[::1]:61599", "url.path":"/_xpack/security/user/remote_monitoring_user/_password"} +{"@timestamp":"2018-10-31T09:35:11,428", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"_xpack_security", "user.realm":"__attach", "user.roles":["superuser"], "origin.type":"local_node", "origin.address":"127.0.0.1:9300", "action":"cluster:admin/xpack/security/realm/cache/clear", "request.name":"ClearRealmCacheRequest"} +{"@timestamp":"2018-10-31T09:35:11,430", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"_xpack_security", "user.realm":"__attach", "user.roles":["superuser"], "origin.type":"local_node", "origin.address":"127.0.0.1:9300", "action":"cluster:admin/xpack/security/realm/cache/clear[n]", "request.name":"Node"} +{"@timestamp":"2018-10-31T09:35:12,303", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"elastic", "user.realm":"reserved", "user.roles":["superuser"], "origin.type":"rest","origin.address":"[::1]:61711", "action":"cluster:admin/xpack/security/user/change_password", "request.name":"ChangePasswordRequest"} +{"@timestamp":"2018-10-31T09:35:12,314", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"_xpack_security", "user.realm":"__attach", "user.roles":["superuser"], "origin.type":"local_node", "origin.address":"127.0.0.1:9300", "action":"indices:admin/create", "request.name":"CreateIndexRequest", "indices":[".security-6"]} diff --git a/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json b/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json new file mode 100644 index 000000000000..9d46c4f18007 --- /dev/null +++ b/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json @@ -0,0 +1,145 @@ +[ + { + "@timestamp": "2018-10-31T09:34:25.109Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.layer": "rest", + "elasticsearch.audit.origin.type": "rest", + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "authentication_failed", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 0, + "message": "{\"@timestamp\":\"2018-10-31T09:34:25,109\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"rest\", \"event.action\":\"authentication_failed\", \"user.name\":\"elastic\", \"origin.type\":\"rest\", \"origin.address\":\"[::1]:61598\", \"url.path\":\"/_xpack/security/user/beats_system/_password\"}", + "service.type": "elasticsearch", + "source.address": "[::1]:61598", + "source.ip": "::1", + "source.port": 61598, + "url.original": "/_xpack/security/user/beats_system/_password", + "user.name": "elastic" + }, + { + "@timestamp": "2018-10-31T09:34:25.207Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.layer": "rest", + "elasticsearch.audit.origin.type": "rest", + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "authentication_failed", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 274, + "message": "{\"@timestamp\":\"2018-10-31T09:34:25,207\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"rest\", \"event.action\":\"authentication_failed\", \"user.name\":\"elastic\", \"origin.type\":\"rest\", \"origin.address\":\"[::1]:61599\", \"url.path\":\"/_xpack/security/user/remote_monitoring_user/_password\"}", + "service.type": "elasticsearch", + "source.address": "[::1]:61599", + "source.ip": "::1", + "source.port": 61599, + "url.original": "/_xpack/security/user/remote_monitoring_user/_password", + "user.name": "elastic" + }, + { + "@timestamp": "2018-10-31T09:35:11.428Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.action": "cluster:admin/xpack/security/realm/cache/clear", + "elasticsearch.audit.layer": "transport", + "elasticsearch.audit.origin.type": "local_node", + "elasticsearch.audit.request.name": "ClearRealmCacheRequest", + "elasticsearch.audit.user.realm": "__attach", + "elasticsearch.audit.user.roles": [ + "superuser" + ], + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "access_granted", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 558, + "message": "{\"@timestamp\":\"2018-10-31T09:35:11,428\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"transport\", \"event.action\":\"access_granted\", \"user.name\":\"_xpack_security\", \"user.realm\":\"__attach\", \"user.roles\":[\"superuser\"], \"origin.type\":\"local_node\", \"origin.address\":\"127.0.0.1:9300\", \"action\":\"cluster:admin/xpack/security/realm/cache/clear\", \"request.name\":\"ClearRealmCacheRequest\"}", + "service.type": "elasticsearch", + "source.address": "127.0.0.1:9300", + "source.ip": "127.0.0.1", + "source.port": 9300, + "user.name": "_xpack_security" + }, + { + "@timestamp": "2018-10-31T09:35:11.430Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.action": "cluster:admin/xpack/security/realm/cache/clear[n]", + "elasticsearch.audit.layer": "transport", + "elasticsearch.audit.origin.type": "local_node", + "elasticsearch.audit.request.name": "Node", + "elasticsearch.audit.user.realm": "__attach", + "elasticsearch.audit.user.roles": [ + "superuser" + ], + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "access_granted", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 941, + "message": "{\"@timestamp\":\"2018-10-31T09:35:11,430\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"transport\", \"event.action\":\"access_granted\", \"user.name\":\"_xpack_security\", \"user.realm\":\"__attach\", \"user.roles\":[\"superuser\"], \"origin.type\":\"local_node\", \"origin.address\":\"127.0.0.1:9300\", \"action\":\"cluster:admin/xpack/security/realm/cache/clear[n]\", \"request.name\":\"Node\"}", + "service.type": "elasticsearch", + "source.address": "127.0.0.1:9300", + "source.ip": "127.0.0.1", + "source.port": 9300, + "user.name": "_xpack_security" + }, + { + "@timestamp": "2018-10-31T09:35:12.303Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.action": "cluster:admin/xpack/security/user/change_password", + "elasticsearch.audit.layer": "transport", + "elasticsearch.audit.origin.type": "rest", + "elasticsearch.audit.request.name": "ChangePasswordRequest", + "elasticsearch.audit.user.realm": "reserved", + "elasticsearch.audit.user.roles": [ + "superuser" + ], + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "access_granted", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 1309, + "message": "{\"@timestamp\":\"2018-10-31T09:35:12,303\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"transport\", \"event.action\":\"access_granted\", \"user.name\":\"elastic\", \"user.realm\":\"reserved\", \"user.roles\":[\"superuser\"], \"origin.type\":\"rest\",\"origin.address\":\"[::1]:61711\", \"action\":\"cluster:admin/xpack/security/user/change_password\", \"request.name\":\"ChangePasswordRequest\"}", + "service.type": "elasticsearch", + "source.address": "[::1]:61711", + "source.ip": "::1", + "source.port": 61711, + "user.name": "elastic" + }, + { + "@timestamp": "2018-10-31T09:35:12.314Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.action": "indices:admin/create", + "elasticsearch.audit.indices": [ + ".security-6" + ], + "elasticsearch.audit.layer": "transport", + "elasticsearch.audit.origin.type": "local_node", + "elasticsearch.audit.request.name": "CreateIndexRequest", + "elasticsearch.audit.user.realm": "__attach", + "elasticsearch.audit.user.roles": [ + "superuser" + ], + "elasticsearch.node.id": "DSiWcTyeThWtUXLB9J0BMw", + "event.action": "access_granted", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "input.type": "log", + "log.offset": 1676, + "message": "{\"@timestamp\":\"2018-10-31T09:35:12,314\", \"node.id\":\"DSiWcTyeThWtUXLB9J0BMw\", \"event.type\":\"transport\", \"event.action\":\"access_granted\", \"user.name\":\"_xpack_security\", \"user.realm\":\"__attach\", \"user.roles\":[\"superuser\"], \"origin.type\":\"local_node\", \"origin.address\":\"127.0.0.1:9300\", \"action\":\"indices:admin/create\", \"request.name\":\"CreateIndexRequest\", \"indices\":[\".security-6\"]}", + "service.type": "elasticsearch", + "source.address": "127.0.0.1:9300", + "source.ip": "127.0.0.1", + "source.port": 9300, + "user.name": "_xpack_security" + } +] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/fields.go b/filebeat/module/elasticsearch/fields.go index 013167c476eb..f556467c7104 100644 --- a/filebeat/module/elasticsearch/fields.go +++ b/filebeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" } From 1b094b7785ac9d9821eb04eccc65088d8e88b3bc Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Tue, 29 Jan 2019 19:44:44 +0100 Subject: [PATCH 08/66] Use default path for data.json if no other path is set (#10402) --- metricbeat/mb/testing/data_generator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metricbeat/mb/testing/data_generator.go b/metricbeat/mb/testing/data_generator.go index 0619a3a54e39..4fc76dd1fdab 100644 --- a/metricbeat/mb/testing/data_generator.go +++ b/metricbeat/mb/testing/data_generator.go @@ -170,7 +170,7 @@ func WriteEventToDataJSON(t testing.TB, fullEvent beat.Event, postfixPath string t.Fatal(err) } - if stat, err := os.Stat(postfixPath); err == nil && stat.IsDir() { + if stat, err := os.Stat(postfixPath); postfixPath == "" || (err == nil && stat.IsDir()) { p = path.Join(p, postfixPath, "_meta", "data.json") } else { p = postfixPath From d7c14dfbe89e3ed6c8bf0904e77331e4d89edeb7 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Tue, 29 Jan 2019 20:24:00 +0100 Subject: [PATCH 09/66] Iptables module for Filebeat (#10176) This adds a new x-pack module to parse iptables logs from a file. The module understands additional fields added by Ubiquiti firewalls. Example iptables event: ``` "iptables": { "ether_type": 2048, "input_device": "eth0", "output_device": "wan1", "tcp": { "reserved_bits": 0, "flags": "ACK", "window": 128 }, "precedence_bits": 0, "length": 123, "tos": 0, "output_device": "lo", "id": 12345, "ttl": 255 }, ``` For Ubiquiti logs, it parses the Ubiquiti tag before iptables logs. Format: RuleSet-RuleNumber-Action It's a common pattern to format the RuleSet as "InputDevice-OutputDevice". Action can be A for allow and D for Deny. RuleNumber can be a number or "default". For [source-dest-42-D]: ``` "iptables.ubiquiti.input_zone": "source", "iptables.ubiquiti.output_zone": "dest", "iptables.ubiquiti.rule_number": "42", "iptables.ubiquiti.rule_set": "source-dest", "event.outcome": "deny", ``` The following ECS fields are populated: ``` "destination.ip": "10.4.0.5", "destination.mac": "90:10:20:76:8d:20", "destination.port": 443, "ecs.version": "1.0.0-beta2", "event.dataset": "iptables.log", "event.module": "iptables", "event.outcome": "deny", (only when Ubiquiti extension found) "fileset.name": "log", "network.transport": "tcp", "network.type": "ipv4", "source.geo.city_name": "Bellaterra", "source.geo.continent_name": "Europe", "source.geo.country_iso_code": "ES", "source.geo.location.lat": 41.5026, "source.geo.location.lon": 2.0875, "source.geo.region_iso_code": "ES-B", "source.geo.region_name": "Barcelona", "source.ip": "158.109.0.1", "source.mac": "90:10:65:29:b6:2a", "source.port": 38842 ``` Closes #8781 Co-Authored-by: James Spiteri --- filebeat/docs/fields.asciidoc | 321 +++++++ .../docs/images/kibana-iptables-ubiquiti.png | Bin 0 -> 722736 bytes filebeat/docs/images/kibana-iptables.png | Bin 0 -> 676017 bytes filebeat/docs/modules/iptables.asciidoc | 85 ++ filebeat/docs/modules_list.asciidoc | 2 + x-pack/filebeat/filebeat.reference.yml | 12 + x-pack/filebeat/include/list.go | 1 + x-pack/filebeat/module/iptables/README.md | 6 + .../filebeat/module/iptables/_meta/config.yml | 10 + .../module/iptables/_meta/docs.asciidoc | 72 ++ .../filebeat/module/iptables/_meta/fields.yml | 10 + .../dashboard/Filebeat-Iptables-Overview.json | 759 ++++++++++++++++ ...t-Iptables-Ubiquiti-Firewall-Overview.json | 848 ++++++++++++++++++ x-pack/filebeat/module/iptables/fields.go | 23 + .../module/iptables/log/_meta/fields.yml | 163 ++++ .../module/iptables/log/config/file.yml | 11 + .../module/iptables/log/config/syslog.yml | 8 + .../module/iptables/log/ingest/pipeline.json | 180 ++++ .../filebeat/module/iptables/log/manifest.yml | 28 + .../filebeat/module/iptables/log/test/geo.log | 1 + .../iptables/log/test/geo.log-expected.json | 48 + .../module/iptables/log/test/icmp.log | 1 + .../iptables/log/test/icmp.log-expected.json | 32 + .../module/iptables/log/test/iptables.log | 10 + .../log/test/iptables.log-expected.json | 338 +++++++ .../module/iptables/log/test/ipv6.log | 11 + .../iptables/log/test/ipv6.log-expected.json | 301 +++++++ .../module/iptables/log/test/ubiquiti.log | 5 + .../log/test/ubiquiti.log-expected.json | 186 ++++ x-pack/filebeat/module/iptables/module.yml | 5 + .../filebeat/modules.d/iptables.yml.disabled | 13 + 31 files changed, 3490 insertions(+) create mode 100644 filebeat/docs/images/kibana-iptables-ubiquiti.png create mode 100644 filebeat/docs/images/kibana-iptables.png create mode 100644 filebeat/docs/modules/iptables.asciidoc create mode 100644 x-pack/filebeat/module/iptables/README.md create mode 100644 x-pack/filebeat/module/iptables/_meta/config.yml create mode 100644 x-pack/filebeat/module/iptables/_meta/docs.asciidoc create mode 100644 x-pack/filebeat/module/iptables/_meta/fields.yml create mode 100644 x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Overview.json create mode 100644 x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Ubiquiti-Firewall-Overview.json create mode 100644 x-pack/filebeat/module/iptables/fields.go create mode 100644 x-pack/filebeat/module/iptables/log/_meta/fields.yml create mode 100644 x-pack/filebeat/module/iptables/log/config/file.yml create mode 100644 x-pack/filebeat/module/iptables/log/config/syslog.yml create mode 100644 x-pack/filebeat/module/iptables/log/ingest/pipeline.json create mode 100644 x-pack/filebeat/module/iptables/log/manifest.yml create mode 100644 x-pack/filebeat/module/iptables/log/test/geo.log create mode 100644 x-pack/filebeat/module/iptables/log/test/geo.log-expected.json create mode 100644 x-pack/filebeat/module/iptables/log/test/icmp.log create mode 100644 x-pack/filebeat/module/iptables/log/test/icmp.log-expected.json create mode 100644 x-pack/filebeat/module/iptables/log/test/iptables.log create mode 100644 x-pack/filebeat/module/iptables/log/test/iptables.log-expected.json create mode 100644 x-pack/filebeat/module/iptables/log/test/ipv6.log create mode 100644 x-pack/filebeat/module/iptables/log/test/ipv6.log-expected.json create mode 100644 x-pack/filebeat/module/iptables/log/test/ubiquiti.log create mode 100644 x-pack/filebeat/module/iptables/log/test/ubiquiti.log-expected.json create mode 100644 x-pack/filebeat/module/iptables/module.yml create mode 100644 x-pack/filebeat/modules.d/iptables.yml.disabled diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index ab2c6ea9b5c1..ab170a65c443 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -23,6 +23,7 @@ grouped in the following categories: * <> * <> * <> +* <> * <> * <> * <> @@ -5594,6 +5595,326 @@ alias to: source.geo.region_iso_code -- +[[exported-fields-iptables]] +== iptables fields + +Module for handling the iptables logs. + + + +[float] +== iptables fields + +Fields from the iptables logs. + + + +*`iptables.ether_type`*:: ++ +-- +type: long + +Value of the ethernet type field identifying the network layer protocol. + + +-- + +*`iptables.flow_label`*:: ++ +-- +type: integer + +IPv6 flow label. + + +-- + +*`iptables.fragment_flags`*:: ++ +-- +type: keyword + +IP fragment flags. A combination of CE, DF and MF. + + +-- + +*`iptables.fragment_offset`*:: ++ +-- +type: long + +Offset of the current IP fragment. + + +-- + +[float] +== icmp fields + +ICMP fields. + + + +*`iptables.icmp.code`*:: ++ +-- +type: long + +ICMP code. + + +-- + +*`iptables.icmp.id`*:: ++ +-- +type: long + +ICMP ID. + + +-- + +*`iptables.icmp.parameter`*:: ++ +-- +type: long + +ICMP parameter. + + +-- + +*`iptables.icmp.redirect`*:: ++ +-- +type: ip + +ICMP redirect address. + + +-- + +*`iptables.icmp.seq`*:: ++ +-- +type: long + +ICMP sequence number. + + +-- + +*`iptables.icmp.type`*:: ++ +-- +type: long + +ICMP type. + + +-- + +*`iptables.id`*:: ++ +-- +type: long + +Packet identifier. + + +-- + +*`iptables.incomplete_bytes`*:: ++ +-- +type: long + +Number of incomplete bytes. + + +-- + +*`iptables.input_device`*:: ++ +-- +type: keyword + +Device that received the packet. + + +-- + +*`iptables.precedence_bits`*:: ++ +-- +type: short + +IP precedence bits. + + +-- + +*`iptables.tos`*:: ++ +-- +type: long + +IP Type of Service field. + + +-- + +*`iptables.length`*:: ++ +-- +type: long + +Packet length. + + +-- + +*`iptables.output_device`*:: ++ +-- +type: keyword + +Device that output the packet. + + +-- + +[float] +== tcp fields + +TCP fields. + + + +*`iptables.tcp.flags`*:: ++ +-- +type: keyword + +TCP flags. + + +-- + +*`iptables.tcp.reserved_bits`*:: ++ +-- +type: short + +TCP reserved bits. + + +-- + +*`iptables.tcp.seq`*:: ++ +-- +type: long + +TCP sequence number. + + +-- + +*`iptables.tcp.ack`*:: ++ +-- +type: long + +TCP Acknowledgment number. + + +-- + +*`iptables.tcp.window`*:: ++ +-- +type: long + +Advertised TCP window size. + + +-- + +*`iptables.ttl`*:: ++ +-- +type: integer + +Time To Live field. + + +-- + +[float] +== udp fields + +UDP fields. + + + +*`iptables.udp.length`*:: ++ +-- +type: long + +Length of the UDP header and payload. + + +-- + +[float] +== ubiquiti fields + +Fields for Ubiquiti network devices. + + + +*`iptables.ubiquiti.input_zone`*:: ++ +-- +type: keyword + +Input zone. + + +-- + +*`iptables.ubiquiti.output_zone`*:: ++ +-- +type: keyword + +Output zone. + + +-- + +*`iptables.ubiquiti.rule_number`*:: ++ +-- +type: keyword + +The rule number within the rule set. + +-- + +*`iptables.ubiquiti.rule_set`*:: ++ +-- +type: keyword + +The rule set name. + +-- + [[exported-fields-kafka]] == Kafka fields diff --git a/filebeat/docs/images/kibana-iptables-ubiquiti.png b/filebeat/docs/images/kibana-iptables-ubiquiti.png new file mode 100644 index 0000000000000000000000000000000000000000..246f2ace263093ab45d8b045ac052143ea1f7ca3 GIT binary patch literal 722736 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%0Aen`Bm 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

;@uQmhOg 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

uOY1? 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 z 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 T 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 z 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 literal 0 HcmV?d00001 diff --git a/filebeat/docs/images/kibana-iptables.png b/filebeat/docs/images/kibana-iptables.png new file mode 100644 index 0000000000000000000000000000000000000000..a12929d11d55ea859278ca8db0f040db253cdc5a GIT binary patch literal 676017 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�IVfKoHti1ck(pFpJhW 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 ByVWvnlSw$~O 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%0AY&EhA|pi7P%&vE2jjQ}ZQX$D%jWt`e3 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

*9&$@VzpED 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 z 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

^G{w0DRpO42vHAAp2k6(Ehg(F5r_d>% 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%0DIk^_h3X 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

?}cTl96GznBA^r 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 literal 0 HcmV?d00001 diff --git a/filebeat/docs/modules/iptables.asciidoc b/filebeat/docs/modules/iptables.asciidoc new file mode 100644 index 000000000000..4edcae95a079 --- /dev/null +++ b/filebeat/docs/modules/iptables.asciidoc @@ -0,0 +1,85 @@ +//// +This file is generated! See scripts/docs_collector.py +//// + +[[filebeat-module-iptables]] +[role="xpack"] + +:modulename: iptables +:has-dashboards: true + +== Iptables module + +This is a module for iptables and ip6tables logs. It parses logs received +over the network via syslog or from a file. Also, it understands the prefix added +by some Ubiquiti firewalls, which includes the rule set name, rule number and +the action performed on the traffic (allow/deny). + +When you run the module, it performs a few tasks under the hood: + +* Sets the default input to `syslog` and binds to `localhost` port `9001` + (but don’t worry, you can override the defaults). + +* Uses ingest node to parse and process the log lines, shaping the data into + a structure suitable for visualizing in Kibana. + +* Deploys dashboards for visualizing the log data. + +[float] +=== Compatibility + +This module requires the {elasticsearch-plugins}/ingest-geoip.html[ingest-geoip] +Elasticsearch plugins. + +include::../include/running-modules.asciidoc[] + +[float] +=== Example dashboard + +This module comes with sample dashboards showing geolocation and network +protocols used. One for all iptables logs: + +[role="screenshot"] +image::./images/kibana-iptables.png[] + +and one specific for Ubiquiti Firewall logs: + +[role="screenshot"] +image::./images/kibana-iptables-ubiquiti.png[] + +include::../include/configuring-intro.asciidoc[] + +The module is by default configured to run via syslog on port 9001. However +it can also be configured to read from a file path. See the following example. + +["source","yaml",subs="attributes"] +----- +- module: iptables + log: + enabled: true + var.paths: ["/var/log/iptables.log"] + var.input: "file" +----- + +:fileset_ex: log + +include::../include/config-option-intro.asciidoc[] + +[float] +==== `log` log fileset settings + +include::../include/var-paths.asciidoc[] + +:has-dashboards!: + +:fileset_ex!: + +:modulename!: + + +[float] +=== Fields + +For a description of each field in the module, see the +<> section. + diff --git a/filebeat/docs/modules_list.asciidoc b/filebeat/docs/modules_list.asciidoc index b8712ccdb55f..8af5a7858b0c 100644 --- a/filebeat/docs/modules_list.asciidoc +++ b/filebeat/docs/modules_list.asciidoc @@ -9,6 +9,7 @@ This file is generated! See scripts/docs_collector.py * <> * <> * <> + * <> * <> * <> * <> @@ -34,6 +35,7 @@ include::modules/elasticsearch.asciidoc[] include::modules/haproxy.asciidoc[] include::modules/icinga.asciidoc[] include::modules/iis.asciidoc[] +include::modules/iptables.asciidoc[] include::modules/kafka.asciidoc[] include::modules/kibana.asciidoc[] include::modules/logstash.asciidoc[] diff --git a/x-pack/filebeat/filebeat.reference.yml b/x-pack/filebeat/filebeat.reference.yml index e84f3acdb1ef..7400a56d3efc 100644 --- a/x-pack/filebeat/filebeat.reference.yml +++ b/x-pack/filebeat/filebeat.reference.yml @@ -206,6 +206,18 @@ filebeat.modules: # can be added under this section. #input: +#------------------------------- Iptables Module ------------------------------- +- module: iptables + log: + enabled: true + + # Set which input to use between syslog (default) or file. + #var.input: + + # Set custom paths for the log files. If left empty, + # Filebeat will choose the paths depending on your OS. + #var.paths: + #-------------------------------- Kafka Module -------------------------------- - module: kafka # All logs diff --git a/x-pack/filebeat/include/list.go b/x-pack/filebeat/include/list.go index 529f23b9c1f8..f4550a6e8989 100644 --- a/x-pack/filebeat/include/list.go +++ b/x-pack/filebeat/include/list.go @@ -9,6 +9,7 @@ package include import ( // Import packages that need to register themselves. _ "github.com/elastic/beats/x-pack/filebeat/input/netflow" + _ "github.com/elastic/beats/x-pack/filebeat/module/iptables" _ "github.com/elastic/beats/x-pack/filebeat/module/suricata" _ "github.com/elastic/beats/x-pack/filebeat/module/zeek" ) diff --git a/x-pack/filebeat/module/iptables/README.md b/x-pack/filebeat/module/iptables/README.md new file mode 100644 index 000000000000..10ca22ff33c7 --- /dev/null +++ b/x-pack/filebeat/module/iptables/README.md @@ -0,0 +1,6 @@ +# iptables module + +## Caveats + +* Module is to be considered _beta_. + diff --git a/x-pack/filebeat/module/iptables/_meta/config.yml b/x-pack/filebeat/module/iptables/_meta/config.yml new file mode 100644 index 000000000000..0de64687f6eb --- /dev/null +++ b/x-pack/filebeat/module/iptables/_meta/config.yml @@ -0,0 +1,10 @@ +- module: iptables + log: + enabled: true + + # Set which input to use between syslog (default) or file. + #var.input: + + # Set custom paths for the log files. If left empty, + # Filebeat will choose the paths depending on your OS. + #var.paths: diff --git a/x-pack/filebeat/module/iptables/_meta/docs.asciidoc b/x-pack/filebeat/module/iptables/_meta/docs.asciidoc new file mode 100644 index 000000000000..c158cf3e1bcf --- /dev/null +++ b/x-pack/filebeat/module/iptables/_meta/docs.asciidoc @@ -0,0 +1,72 @@ +[role="xpack"] + +:modulename: iptables +:has-dashboards: true + +== Iptables module + +This is a module for iptables and ip6tables logs. It parses logs received +over the network via syslog or from a file. Also, it understands the prefix added +by some Ubiquiti firewalls, which includes the rule set name, rule number and +the action performed on the traffic (allow/deny). + +When you run the module, it performs a few tasks under the hood: + +* Sets the default input to `syslog` and binds to `localhost` port `9001` + (but don’t worry, you can override the defaults). + +* Uses ingest node to parse and process the log lines, shaping the data into + a structure suitable for visualizing in Kibana. + +* Deploys dashboards for visualizing the log data. + +[float] +=== Compatibility + +This module requires the {elasticsearch-plugins}/ingest-geoip.html[ingest-geoip] +Elasticsearch plugins. + +include::../include/running-modules.asciidoc[] + +[float] +=== Example dashboard + +This module comes with sample dashboards showing geolocation and network +protocols used. One for all iptables logs: + +[role="screenshot"] +image::./images/kibana-iptables.png[] + +and one specific for Ubiquiti Firewall logs: + +[role="screenshot"] +image::./images/kibana-iptables-ubiquiti.png[] + +include::../include/configuring-intro.asciidoc[] + +The module is by default configured to run via syslog on port 9001. However +it can also be configured to read from a file path. See the following example. + +["source","yaml",subs="attributes"] +----- +- module: iptables + log: + enabled: true + var.paths: ["/var/log/iptables.log"] + var.input: "file" +----- + +:fileset_ex: log + +include::../include/config-option-intro.asciidoc[] + +[float] +==== `log` log fileset settings + +include::../include/var-paths.asciidoc[] + +:has-dashboards!: + +:fileset_ex!: + +:modulename!: diff --git a/x-pack/filebeat/module/iptables/_meta/fields.yml b/x-pack/filebeat/module/iptables/_meta/fields.yml new file mode 100644 index 000000000000..797e069697d9 --- /dev/null +++ b/x-pack/filebeat/module/iptables/_meta/fields.yml @@ -0,0 +1,10 @@ +- key: iptables + title: iptables + description: > + Module for handling the iptables logs. + fields: + - name: iptables + type: group + description: > + Fields from the iptables logs. + fields: diff --git a/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Overview.json b/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Overview.json new file mode 100644 index 000000000000..e10f783d7645 --- /dev/null +++ b/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Overview.json @@ -0,0 +1,759 @@ +{ + "objects": [ + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Events Timeline [Filebeat Iptables]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customInterval": "2h", + "drop_partials": false, + "extended_bounds": {}, + "field": "@timestamp", + "interval": "auto", + "min_doc_count": 1, + "time_zone": "Europe/Berlin", + "useNormalizedEsInterval": true + }, + "schema": "segment", + "type": "date_histogram" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "interpolate": "linear", + "mode": "stacked", + "show": "true", + "showCircles": true, + "type": "area", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "area", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Events Timeline [Filebeat Iptables]", + "type": "area" + } + }, + "id": "4c913eb0-1f51-11e9-93ed-f7e068f4aebb", + "type": "visualization", + "updated_at": "2019-01-23T20:56:04.891Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Top Source Countries [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "params": { + "sort": { + "columnIndex": null, + "direction": null + } + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customLabel": "Country", + "field": "source.geo.country_iso_code", + "missingBucket": false, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": false, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "bucket", + "type": "terms" + } + ], + "params": { + "perPage": 10, + "showMetricsAtAllLevels": false, + "showPartialRows": false, + "showTotal": false, + "sort": { + "columnIndex": null, + "direction": null + }, + "totalFunc": "sum" + }, + "title": "Top Source Countries [Filebeat Iptables]", + "type": "table" + } + }, + "id": "2599f5e0-1e98-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Source Map [Filebeat Iptables]", + "uiStateJSON": { + "mapCenter": [ + 45.02695045318546, + -44.82421875000001 + ], + "mapZoom": 3 + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "autoPrecision": true, + "field": "source.geo.location", + "isFilteredByCollar": true, + "mapCenter": [ + 0, + 0 + ], + "mapZoom": 2, + "precision": 2, + "useGeocentroid": true + }, + "schema": "segment", + "type": "geohash_grid" + } + ], + "params": { + "addTooltip": true, + "colorSchema": "Yellow to Red", + "heatClusterSize": 1.5, + "isDesaturated": true, + "legendPosition": "bottomright", + "mapCenter": [ + 0, + 0 + ], + "mapType": "Scaled Circle Markers", + "mapZoom": 2, + "wms": { + "enabled": false, + "options": { + "format": "image/png", + "transparent": true + }, + "selectedTmsLayer": { + "attribution": "\u003cp\u003e\u0026#169; \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors | \u003ca href=\"https://www.elastic.co/elastic-maps-service\"\u003eElastic Maps Service\u003c/a\u003e\u003c/p\u003e\u0026#10;", + "id": "road_map", + "maxZoom": 18, + "minZoom": 0, + "origin": "elastic_maps_service" + } + } + }, + "title": "Source Map [Filebeat Iptables]", + "type": "tile_map" + } + }, + "id": "c4394ec0-1efd-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Destination Map [Filebeat Iptables]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "autoPrecision": true, + "field": "destination.geo.location", + "isFilteredByCollar": true, + "mapCenter": [ + 0, + 0 + ], + "mapZoom": 2, + "precision": 2, + "useGeocentroid": true + }, + "schema": "segment", + "type": "geohash_grid" + } + ], + "params": { + "addTooltip": true, + "colorSchema": "Yellow to Red", + "heatClusterSize": 1.5, + "isDesaturated": true, + "legendPosition": "bottomright", + "mapCenter": [ + 0, + 0 + ], + "mapType": "Scaled Circle Markers", + "mapZoom": 2, + "wms": { + "enabled": false, + "options": { + "format": "image/png", + "transparent": true + }, + "selectedTmsLayer": { + "attribution": "\u003cp\u003e\u0026#169; \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors | \u003ca href=\"https://www.elastic.co/elastic-maps-service\"\u003eElastic Maps Service\u003c/a\u003e\u003c/p\u003e\u0026#10;", + "id": "road_map", + "maxZoom": 18, + "minZoom": 0, + "origin": "elastic_maps_service" + } + } + }, + "title": "Destination Map [Filebeat Iptables]", + "type": "tile_map" + } + }, + "id": "d8cea010-1efd-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Network Type Breakdown [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "legendOpen": false + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "network.type", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "segment", + "type": "terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": true, + "show": true, + "truncate": 100, + "values": true + }, + "legendPosition": "right", + "type": "pie" + }, + "title": "Network Type Breakdown [Filebeat Iptables]", + "type": "pie" + } + }, + "id": "b57b7370-1f1d-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Network Transport Breakdown [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "legendOpen": false + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "network.transport", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "segment", + "type": "terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": true, + "show": true, + "truncate": 100, + "values": true + }, + "legendPosition": "right", + "type": "pie" + }, + "title": "Network Transport Breakdown [Filebeat Iptables]", + "type": "pie" + } + }, + "id": "35fe0910-1f26-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "iptables.length:*" + } + } + }, + "savedSearchId": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "title": "Top Destination Ports [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "params": { + "sort": { + "columnIndex": null, + "direction": null + } + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customLabel": "Port", + "field": "destination.port", + "missingBucket": false, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": false, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "bucket", + "type": "terms" + } + ], + "params": { + "perPage": 10, + "showMetricsAtAllLevels": false, + "showPartialRows": false, + "showTotal": false, + "sort": { + "columnIndex": null, + "direction": null + }, + "totalFunc": "sum" + }, + "title": "Top Destination Ports [Filebeat Iptables]", + "type": "table" + } + }, + "id": "683402b0-1f29-11e9-8ec4-cf5d91a864b3", + "type": "visualization", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "columns": [ + "_source" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "highlightAll": true, + "index": "filebeat-*", + "query": { + "language": "kuery", + "query": "iptables.length :*" + }, + "version": true + } + }, + "sort": [ + "@timestamp", + "desc" + ], + "title": "Events Search [Filebeat Iptables]", + "version": 1 + }, + "id": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "type": "search", + "updated_at": "2019-01-23T20:51:02.293Z", + "version": 1 + }, + { + "attributes": { + "description": "Overview of the iptables events dashboard.", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "darkTheme": false, + "hidePanelTitles": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "vis": { + "legendOpen": false + } + }, + "gridData": { + "h": 15, + "i": "1", + "w": 37, + "x": 0, + "y": 0 + }, + "id": "4c913eb0-1f51-11e9-93ed-f7e068f4aebb", + "panelIndex": "1", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "2", + "w": 11, + "x": 37, + "y": 0 + }, + "id": "2599f5e0-1e98-11e9-8ec4-cf5d91a864b3", + "panelIndex": "2", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": { + "mapCenter": [ + 47.15984001304432, + -47.02148437500001 + ], + "mapZoom": 2 + }, + "gridData": { + "h": 15, + "i": "3", + "w": 24, + "x": 0, + "y": 15 + }, + "id": "c4394ec0-1efd-11e9-8ec4-cf5d91a864b3", + "panelIndex": "3", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": { + "mapCenter": [ + 49.15296965617042, + -27.949218750000004 + ], + "mapZoom": 2 + }, + "gridData": { + "h": 15, + "i": "4", + "w": 24, + "x": 24, + "y": 15 + }, + "id": "d8cea010-1efd-11e9-8ec4-cf5d91a864b3", + "panelIndex": "4", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "5", + "w": 19, + "x": 0, + "y": 30 + }, + "id": "b57b7370-1f1d-11e9-8ec4-cf5d91a864b3", + "panelIndex": "5", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "6", + "w": 18, + "x": 19, + "y": 30 + }, + "id": "35fe0910-1f26-11e9-8ec4-cf5d91a864b3", + "panelIndex": "6", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "7", + "w": 11, + "x": 37, + "y": 30 + }, + "id": "683402b0-1f29-11e9-8ec4-cf5d91a864b3", + "panelIndex": "7", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 19, + "i": "8", + "w": 48, + "x": 0, + "y": 45 + }, + "id": "b3f1b010-1f26-11e9-8ec4-cf5d91a864b3", + "panelIndex": "8", + "type": "search", + "version": "6.6.0" + } + ], + "timeRestore": false, + "title": "[Filebeat Iptables] Overview", + "version": 1 + }, + "id": "ceefb9e0-1f51-11e9-93ed-f7e068f4aebb", + "type": "dashboard", + "updated_at": "2019-01-23T20:59:43.614Z", + "version": 1 + } + ], + "version": "6.6.0" +} diff --git a/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Ubiquiti-Firewall-Overview.json b/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Ubiquiti-Firewall-Overview.json new file mode 100644 index 000000000000..000a1bdcd931 --- /dev/null +++ b/x-pack/filebeat/module/iptables/_meta/kibana/6/dashboard/Filebeat-Iptables-Ubiquiti-Firewall-Overview.json @@ -0,0 +1,848 @@ +{ + "objects": [ + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "c4e80aa0-1fd4-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Event Timeline [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "colors": { + "allow": "#64B0C8", + "deny": "#E24D42" + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customInterval": "2h", + "drop_partials": false, + "extended_bounds": {}, + "field": "@timestamp", + "interval": "auto", + "min_doc_count": 1, + "timeRange": { + "from": "2019-01-24T15:47:12.171Z", + "mode": "absolute", + "to": "2019-01-24T15:47:52.785Z" + }, + "time_zone": "Europe/Berlin", + "useNormalizedEsInterval": true + }, + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "event.outcome", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "_key", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "group", + "type": "terms" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "top", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "mode": "stacked", + "show": "true", + "showCircles": true, + "type": "histogram", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "histogram", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Ubiquiti Firewall Event Timeline [Filebeat Iptables]", + "type": "histogram" + } + }, + "id": "758b3620-1fda-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T16:37:11.788Z", + "version": 2 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "9f7d97c0-1fe9-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Top Blocked IPs [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "params": { + "sort": { + "columnIndex": null, + "direction": null + } + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customLabel": "Source IP", + "field": "source.ip", + "missingBucket": false, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": false, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "bucket", + "type": "terms" + } + ], + "params": { + "perPage": 10, + "showMetricsAtAllLevels": false, + "showPartialRows": false, + "showTotal": false, + "sort": { + "columnIndex": null, + "direction": null + }, + "totalFunc": "sum" + }, + "title": "Ubiquiti Firewall Top Blocked IPs [Filebeat Iptables]", + "type": "table" + } + }, + "id": "1ba82fd0-1ff0-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T16:06:20.635Z", + "version": 2 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "7862cab0-1fdb-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Allowed Traffic Map [Filebeat Iptables]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "autoPrecision": true, + "field": "source.geo.location", + "isFilteredByCollar": true, + "mapCenter": [ + 0, + 0 + ], + "mapZoom": 2, + "precision": 2, + "useGeocentroid": true + }, + "schema": "segment", + "type": "geohash_grid" + } + ], + "params": { + "addTooltip": true, + "colorSchema": "Yellow to Red", + "heatClusterSize": 1.5, + "isDesaturated": true, + "legendPosition": "bottomright", + "mapCenter": [ + 0, + 0 + ], + "mapType": "Scaled Circle Markers", + "mapZoom": 2, + "wms": { + "enabled": false, + "options": { + "format": "image/png", + "transparent": true + }, + "selectedTmsLayer": { + "attribution": "\u003cp\u003e\u0026#169; \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors | \u003ca href=\"https://www.elastic.co/elastic-maps-service\"\u003eElastic Maps Service\u003c/a\u003e\u003c/p\u003e\u0026#10;", + "id": "road_map", + "maxZoom": 18, + "minZoom": 0, + "origin": "elastic_maps_service" + } + } + }, + "title": "Ubiquiti Firewall Allowed Traffic Map [Filebeat Iptables]", + "type": "tile_map" + } + }, + "id": "5bd53050-1fe9-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T15:04:34.005Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "9f7d97c0-1fe9-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Blocked Traffic Map [Filebeat Iptables]", + "uiStateJSON": { + "mapCenter": [ + 19.228176737766262, + -22.851562500000004 + ], + "mapZoom": 3 + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "autoPrecision": true, + "field": "source.geo.location", + "isFilteredByCollar": true, + "mapCenter": [ + 0, + 0 + ], + "mapZoom": 2, + "precision": 2, + "useGeocentroid": true + }, + "schema": "segment", + "type": "geohash_grid" + } + ], + "params": { + "addTooltip": true, + "colorSchema": "Yellow to Red", + "heatClusterSize": 1.5, + "isDesaturated": true, + "legendPosition": "bottomright", + "mapCenter": [ + 0, + 0 + ], + "mapType": "Scaled Circle Markers", + "mapZoom": 2, + "wms": { + "enabled": false, + "options": { + "format": "image/png", + "transparent": true + }, + "selectedTmsLayer": { + "attribution": "\u003cp\u003e\u0026#169; \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors | \u003ca href=\"https://www.elastic.co/elastic-maps-service\"\u003eElastic Maps Service\u003c/a\u003e\u003c/p\u003e\u0026#10;", + "id": "road_map", + "maxZoom": 18, + "minZoom": 0, + "origin": "elastic_maps_service" + } + } + }, + "title": "Ubiquiti Firewall Blocked Traffic Map [Filebeat Iptables]", + "type": "tile_map" + } + }, + "id": "8853aa20-1fef-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T15:50:31.689Z", + "version": 2 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "c4e80aa0-1fd4-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Traffic Breakdown [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "colors": { + "deny": "#E24D42", + "icmp": "#F29191", + "ipv4": "#65C5DB", + "ipv6": "#D683CE", + "ipv6-icmp": "#EA6460", + "tcp": "#447EBC", + "udp": "#F2C96D" + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "event.outcome", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "segment", + "type": "terms" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "network.type", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "segment", + "type": "terms" + }, + { + "enabled": true, + "id": "4", + "params": { + "field": "network.transport", + "missingBucket": true, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": true, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "segment", + "type": "terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": false, + "show": true, + "truncate": 100, + "values": false + }, + "legendPosition": "top", + "type": "pie" + }, + "title": "Ubiquiti Firewall Traffic Breakdown [Filebeat Iptables]", + "type": "pie" + } + }, + "id": "fdea1ad0-1ff4-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T16:27:50.397Z", + "version": 1 + }, + { + "attributes": { + "columns": [ + "_source" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "highlightAll": true, + "index": "filebeat-*", + "query": { + "language": "kuery", + "query": "iptables.ubiquiti.rule_set :*" + }, + "version": true + } + }, + "sort": [ + "@timestamp", + "desc" + ], + "title": "Ubiquiti Firewall Events [Filebeat Iptables]", + "version": 1 + }, + "id": "c4e80aa0-1fd4-11e9-ae2a-939083c6a64e", + "type": "search", + "updated_at": "2019-01-24T12:37:10.858Z", + "version": 1 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "savedSearchId": "c4e80aa0-1fd4-11e9-ae2a-939083c6a64e", + "title": "Ubiquiti Firewall Traffic by Port [Filebeat Iptables]", + "uiStateJSON": { + "vis": { + "params": { + "sort": { + "columnIndex": null, + "direction": null + } + } + } + }, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "customLabel": "event.outcome", + "field": "event.outcome", + "missingBucket": false, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": false, + "otherBucketLabel": "Other", + "row": false, + "size": 5 + }, + "schema": "split", + "type": "terms" + }, + { + "enabled": true, + "id": "3", + "params": { + "customLabel": "Destination port", + "field": "destination.port", + "missingBucket": false, + "missingBucketLabel": "Missing", + "order": "desc", + "orderBy": "1", + "otherBucket": false, + "otherBucketLabel": "Other", + "size": 5 + }, + "schema": "bucket", + "type": "terms" + } + ], + "params": { + "perPage": 10, + "showMetricsAtAllLevels": false, + "showPartialRows": false, + "showTotal": false, + "sort": { + "columnIndex": null, + "direction": null + }, + "totalFunc": "sum" + }, + "title": "Ubiquiti Firewall Traffic by Port [Filebeat Iptables]", + "type": "table" + } + }, + "id": "190bcb50-1ff6-11e9-ae2a-939083c6a64e", + "type": "visualization", + "updated_at": "2019-01-24T16:35:45.413Z", + "version": 1 + }, + { + "attributes": { + "columns": [ + "_source" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "highlightAll": true, + "index": "filebeat-*", + "query": { + "language": "kuery", + "query": "iptables.ubiquiti.rule_set :* and event.outcome : \"deny\"" + }, + "version": true + } + }, + "sort": [ + "@timestamp", + "desc" + ], + "title": "Ubiquiti Firewall Blocked Events [Filebeat Iptables]", + "version": 1 + }, + "id": "9f7d97c0-1fe9-11e9-ae2a-939083c6a64e", + "type": "search", + "updated_at": "2019-01-24T15:35:33.942Z", + "version": 2 + }, + { + "attributes": { + "columns": [ + "_source" + ], + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "highlightAll": true, + "index": "filebeat-*", + "query": { + "language": "kuery", + "query": "iptables.ubiquiti.rule_set :* and event.outcome : \"allow\"" + }, + "version": true + } + }, + "sort": [ + "@timestamp", + "desc" + ], + "title": "Ubiquiti Firewall Allowed Events [Filebeat Iptables]", + "version": 1 + }, + "id": "7862cab0-1fdb-11e9-ae2a-939083c6a64e", + "type": "search", + "updated_at": "2019-01-24T15:04:12.010Z", + "version": 3 + }, + { + "attributes": { + "description": "Overview of the Ubiquiti Firewall iptables events dashboard.", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "darkTheme": false, + "hidePanelTitles": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "vis": { + "colors": { + "allow": "#64B0C8", + "deny": "#E24D42" + }, + "legendOpen": true + } + }, + "gridData": { + "h": 15, + "i": "1", + "w": 33, + "x": 0, + "y": 0 + }, + "id": "758b3620-1fda-11e9-ae2a-939083c6a64e", + "panelIndex": "1", + "title": "Event Timeline", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "2", + "w": 15, + "x": 33, + "y": 0 + }, + "id": "1ba82fd0-1ff0-11e9-ae2a-939083c6a64e", + "panelIndex": "2", + "title": "Top Blocked by source IP", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": { + "mapCenter": [ + 39.095962936305476, + -22.148437500000004 + ], + "mapZoom": 2 + }, + "gridData": { + "h": 15, + "i": "3", + "w": 24, + "x": 0, + "y": 15 + }, + "id": "5bd53050-1fe9-11e9-ae2a-939083c6a64e", + "panelIndex": "3", + "title": "Allowed Traffic Map", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": { + "mapCenter": [ + 46.31658418182218, + -34.10156250000001 + ], + "mapZoom": 2 + }, + "gridData": { + "h": 15, + "i": "4", + "w": 24, + "x": 24, + "y": 15 + }, + "id": "8853aa20-1fef-11e9-ae2a-939083c6a64e", + "panelIndex": "4", + "title": "Blocked Traffic Map", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": { + "vis": { + "colors": { + "allow": "#7EB26D", + "deny": "#E24D42", + "icmp": "#F29191", + "ipv4": "#65C5DB", + "ipv6": "#D683CE", + "ipv6-icmp": "#EA6460", + "tcp": "#447EBC", + "udp": "#F2C96D" + } + } + }, + "gridData": { + "h": 18, + "i": "5", + "w": 24, + "x": 0, + "y": 30 + }, + "id": "fdea1ad0-1ff4-11e9-ae2a-939083c6a64e", + "panelIndex": "5", + "title": "Traffic Breakdown by Protocol", + "type": "visualization", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 27, + "i": "6", + "w": 48, + "x": 0, + "y": 48 + }, + "id": "c4e80aa0-1fd4-11e9-ae2a-939083c6a64e", + "panelIndex": "6", + "title": "Event View", + "type": "search", + "version": "6.6.0" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 18, + "i": "7", + "w": 24, + "x": 24, + "y": 30 + }, + "id": "190bcb50-1ff6-11e9-ae2a-939083c6a64e", + "panelIndex": "7", + "title": "Traffic Breakdown by Port", + "type": "visualization", + "version": "6.6.0" + } + ], + "timeRestore": false, + "title": "[Filebeat Iptables] Ubiquiti Firewall Overview", + "version": 1 + }, + "id": "d39f0980-1ff3-11e9-ae2a-939083c6a64e", + "type": "dashboard", + "updated_at": "2019-01-24T16:38:35.174Z", + "version": 4 + } + ], + "version": "6.6.0" +} diff --git a/x-pack/filebeat/module/iptables/fields.go b/x-pack/filebeat/module/iptables/fields.go new file mode 100644 index 000000000000..3fe34ea12685 --- /dev/null +++ b/x-pack/filebeat/module/iptables/fields.go @@ -0,0 +1,23 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// Code generated by beats/dev-tools/cmd/asset/asset.go - DO NOT EDIT. + +package iptables + +import ( + "github.com/elastic/beats/libbeat/asset" +) + +func init() { + if err := asset.SetFields("filebeat", "iptables", asset.ModuleFieldsPri, AssetIptables); err != nil { + panic(err) + } +} + +// AssetIptables returns asset data. +// This is the base64 encoded gzipped contents of module/iptables. +func AssetIptables() string { + return "eJy0l09vozwQxu/5FPMB3ub4HnJYqWq2UqV2W2nTvUaOPYAVY1N7SEQ//comUBKIQ0OWI3+e38x4/Ay+gy1WC5AFsY1CNwMgSQqP7gh03MqCpNEL+DEDAHgxolQIibGQMS2U1ClQhu1XoEzq5jOARKISbhE+ugPN8mNpf1FV4AJSa8ricGcA6K/HoAWJNfkwzF9dYBeKlKFde1b7qEEro9POzTN0f/1hqkQwScAHRY0UVGouSIGaZFI19dBIe2O3oFiFFgpryHCj5q1oL8xEmf1asQ2qXphSE6Zox0X69Lb7P4hBEIsRLUtz1LROFEtdj7rFam+sGEtt5SDIzeEeuMk3UjP/vi/dw8//YPkITAt4eRwTl0kShzRh1V6DQLNsvLTWx9eJNRKF5HnRQ3d79VJFHl7eDj057zw47dLOo4bMjcAjqcG0o/AD3isNpNhJUtwG9LSMYgpmWY501MITaK1cFGpRSIucBpiy+Cax0QImhEXnomCHH7fJ0+FHiZoj6DLfXMj2xN8mUP2HsX0hJmzIN8a3SI1ZysGcWpDmJi8UEq43FWHfoMZjf4X6eR/4EoUgGuUXJa0F7iTvT45vmeMyaABljMAiR7lDERypCOWIxFD414XvgfVGUr8ELjOWRjv0lxp4tQiXzJRyB9jKz0aTwG+0IftgfBGkQp1SNr23ap0IyJT0Lxa2lh23rMQnjZbVw5WT5XTQn0/6wvqGCMKYjzuwQ7tDcdq757p3BLSRPNfAt3VhT/yOCTO+vQnznm+12SsU9Q/VCPJeamH2k+H3YoeWpEMR4qhVwcnP2EQgmvjLupI5wsrAs9xd9olSTNo778sr907Pn66r8HOQaX5JfTQZMoE2/BYXrFKGRbPfyI9SkpxSguY0ZSy8H+Ta40rtimNrczosP43Gk3zPG8yFQgE8eU3wmoOt33P029Jfaz8fgbelwnW9R6/E9+CrDIPsYevDXlImdWiZcNsNjpdeUMenp9tE5A9UHjGf/Q0AAP//R0INxw==" +} diff --git a/x-pack/filebeat/module/iptables/log/_meta/fields.yml b/x-pack/filebeat/module/iptables/log/_meta/fields.yml new file mode 100644 index 000000000000..6b1617ab450a --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/_meta/fields.yml @@ -0,0 +1,163 @@ +- name: ether_type + type: long + description: > + Value of the ethernet type field identifying the network layer protocol. + +- name: flow_label + type: integer + description: > + IPv6 flow label. + +- name: fragment_flags + type: keyword + description: > + IP fragment flags. A combination of CE, DF and MF. + +- name: fragment_offset + type: long + description: > + Offset of the current IP fragment. + +- name: icmp + type: group + description: > + ICMP fields. + fields: + + - name: code + type: long + description: > + ICMP code. + + - name: id + type: long + description: > + ICMP ID. + + - name: parameter + type: long + description: > + ICMP parameter. + + - name: redirect + type: ip + description: > + ICMP redirect address. + + - name: seq + type: long + description: > + ICMP sequence number. + + - name: type + type: long + description: > + ICMP type. + +- name: id + type: long + description: > + Packet identifier. + +- name: incomplete_bytes + type: long + description: > + Number of incomplete bytes. + +- name: input_device + type: keyword + description: > + Device that received the packet. + +- name: precedence_bits + type: short + description: > + IP precedence bits. + +- name: tos + type: long + description: > + IP Type of Service field. + +- name: length + type: long + description: > + Packet length. + +- name: output_device + type: keyword + description: > + Device that output the packet. + +- name: tcp + type: group + description: > + TCP fields. + fields: + + - name: flags + type: keyword + description: > + TCP flags. + + - name: reserved_bits + type: short + description: > + TCP reserved bits. + + - name: seq + type: long + description: > + TCP sequence number. + + - name: ack + type: long + description: > + TCP Acknowledgment number. + + - name: window + type: long + description: > + Advertised TCP window size. + +- name: ttl + type: integer + description: > + Time To Live field. + +- name: udp + type: group + description: > + UDP fields. + fields: + + - name: length + type: long + description: > + Length of the UDP header and payload. + +- name: ubiquiti + type: group + description: > + Fields for Ubiquiti network devices. + fields: + + - name: input_zone + type: keyword + description: > + Input zone. + + - name: output_zone + type: keyword + description: > + Output zone. + + - name: rule_number + type: keyword + description: + The rule number within the rule set. + + - name: rule_set + type: keyword + description: + The rule set name. diff --git a/x-pack/filebeat/module/iptables/log/config/file.yml b/x-pack/filebeat/module/iptables/log/config/file.yml new file mode 100644 index 000000000000..21045d973934 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/config/file.yml @@ -0,0 +1,11 @@ +type: log +paths: +{{ range $i, $path := .paths }} + - {{$path}} +{{ end }} +exclude_files: [".gz$"] +tags: {{.tags}} +{{ if .convert_timezone }} +processors: + - add_locale: ~ +{{ end }} diff --git a/x-pack/filebeat/module/iptables/log/config/syslog.yml b/x-pack/filebeat/module/iptables/log/config/syslog.yml new file mode 100644 index 000000000000..896b4441de96 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/config/syslog.yml @@ -0,0 +1,8 @@ +type: syslog + {{ if .convert_timezone }} +processors: + - add_locale: ~ + {{ end }} + +protocol.udp: + host: "{{.syslog_host}}:{{.syslog_port}}" diff --git a/x-pack/filebeat/module/iptables/log/ingest/pipeline.json b/x-pack/filebeat/module/iptables/log/ingest/pipeline.json new file mode 100644 index 000000000000..1678df94c5e2 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/ingest/pipeline.json @@ -0,0 +1,180 @@ +{ + "description" : "Pipeline for IPTables", + "processors" : [ + { + "grok": { + "field": "message", + "patterns": [ + "%{SYSLOGTIMESTAMP:iptables.raw_date}%{GREEDYDATA}\\[%{UBIQUITI_LABEL}\\]%{IPTABLES}%{SPACE}", + "%{SYSLOGTIMESTAMP:iptables.raw_date}%{GREEDYDATA}%{IPTABLES}%{SPACE}", + "%{GREEDYDATA}\\[%{UBIQUITI_LABEL}\\]%{IPTABLES}%{SPACE}", + "%{GREEDYDATA}%{IPTABLES}%{SPACE}" + ], + "pattern_definitions": { + "UNSIGNED_INT": "[0-9]+", + "ETHTYPE": "(?:[A-Fa-f0-9]{2}):(?:[A-Fa-f0-9]{2})", + "ETHTYPE_DISCARD": "(?::[A-Fa-f0-9]{2})*", + "NETFILTERMAC": "(?:%{MAC:destination.mac}:%{MAC:source.mac}:%{ETHTYPE:iptables.ether_type}?%{ETHTYPE_DISCARD}|%{MAC:destination.mac}%{ETHTYPE_DISCARD}:%{ETHTYPE:iptables.ether_type}?)", + "IPTABLES_ETHERNET": "IN=%{DATA:iptables.input_device} OUT=%{DATA:iptables.output_device}?(?: MAC=%{NETFILTERMAC})?", + "IPTABLES_PORT_PAIR": "SPT=%{UNSIGNED_INT:source.port:int} DPT=%{UNSIGNED_INT:destination.port:int}", + "IPTABLES_TCP_FLAGS": "((?<= )(CWR|ECE|URG|ACK|PSH|RST|SYN|FIN))*", + "IPTABLES_TCP_SEQ": "SEQ=%{UNSIGNED_INT:iptables.tcp.seq:int} ACK=%{UNSIGNED_INT:iptables.tcp.ack:int}", + "IPTABLES_TCP_DETAILS": "(?:%{IPTABLES_TCP_SEQ} )?WINDOW=%{UNSIGNED_INT:iptables.tcp.window:int} RES=0x%{BASE16NUM:iptables.tcp_reserved_bits} %{IPTABLES_TCP_FLAGS:iptables.tcp.flags}", + "IPTABLES_INCOMPLETE_PACKET": "INCOMPLETE \\[%{UNSIGNED_INT:iptables.incomplete_bytes:int} bytes\\]", + "IPTABLES_UDP_DETAILS": "LEN=%{UNSIGNED_INT:iptables.udp.length:int}", + "IPTABLES_ICMP_EXTRA_ECHO": "ID=%{UNSIGNED_INT:iptables.icmp.id:int} SEQ=%{UNSIGNED_INT:iptables.icmp.seq:int}", + "IPTABLES_ICMP_EXTRA_PARAM": "PARAMETER=%{UNSIGNED_INT:iptables.icmp.parameter:int}", + "IPTABLES_ICMP_EXTRA_REDIRECT": "GATEWAY=%{IP:iptables.icmp.redirect}", + "IPTABLES_ICMP_EXTRA": "( (?:%{IPTABLES_ICMP_EXTRA_ECHO}|%{IPTABLES_ICMP_EXTRA_PARAM}|%{IPTABLES_ICMP_EXTRA_REDIRECT}))*", + "IPTABLES_ICMP_DETAILS": "TYPE=%{UNSIGNED_INT:iptables.icmp.type:int} CODE=%{UNSIGNED_INT:iptables.icmp.code:int}(( %{IPTABLES_INCOMPLETE_PACKET})|%{IPTABLES_ICMP_EXTRA})", + "IPTABLES_PROTOCOL": "PROTO=(?[a-zA-Z0-9]+)", + "IPTABLES_IP_PAYLOAD": "%{IPTABLES_PROTOCOL}( %{IPTABLES_PORT_PAIR})?( (%{IPTABLES_TCP_DETAILS}|%{IPTABLES_UDP_DETAILS}|%{IPTABLES_ICMP_DETAILS}|%{IPTABLES_INCOMPLETE_PACKET}))?", + "IPTABLES_IP_FRAGFLAG": "((?<= )(CE|DF|MF))*", + "IPTABLES_IP_START": "SRC=%{IPV4:source.ip} DST=%{IPV4:destination.ip} LEN=%{UNSIGNED_INT:iptables.length:int} TOS=0x%{BASE16NUM:iptables.tos} PREC=0x%{BASE16NUM:iptables.precedence_bits} TTL=%{UNSIGNED_INT:iptables.ttl:int} ID=%{UNSIGNED_INT:iptables.id:int}(?: %{IPTABLES_IP_FRAGFLAG:iptables.fragment_flags})?(?: FRAG: %{UNSIGNED_INT:iptables.fragment_offset:int})?", + "IPTABLES_IP": "%{IPTABLES_IP_START} %{IPTABLES_IP_PAYLOAD}", + "IPTABLES_IPV6_START": "SRC=%{IPV6:source.ip} DST=%{IPV6:destination.ip} LEN=%{UNSIGNED_INT:iptables.length:int} TC=%{UNSIGNED_INT:iptables.tos} HOPLIMIT=%{UNSIGNED_INT:iptables.ttl:int} FLOWLBL=%{UNSIGNED_INT:iptables.flow_label:int}", + "IPTABLES_IPV6": "%{IPTABLES_IPV6_START} %{IPTABLES_IP_PAYLOAD}", + "IPTABLES": "%{IPTABLES_ETHERNET} (:?%{IPTABLES_IP}|%{IPTABLES_IPV6})", + "UBIQUITI_FIELD": "[^-\\]]*", + "UBIQUITI_RULESET_NAME": "[^\\]]*", + "UBIQUITI_LABEL": "%{UBIQUITI_RULESET_NAME:iptables.ubiquiti.rule_set}-%{UBIQUITI_FIELD:iptables.ubiquiti.rule_number}-%{UBIQUITI_FIELD:event.outcome}" + } + } + }, + { + "rename": { + "field": "message", + "target_field": "log.original" + } + }, + { + "grok": { + "field": "iptables.ubiquiti.rule_set", + "ignore_missing": true, + "ignore_failure": true, + "patterns": [ + "%{UBIQUITI_FIELD:iptables.ubiquiti.input_zone}-%{UBIQUITI_FIELD:iptables.ubiquiti.output_zone}" + ], + "pattern_definitions": { + "UBIQUITI_FIELD": "[^-]*" + } + } + }, + { + "date": { + "field": "iptables.raw_date", + "ignore_failure": true, + {< if .convert_timezone >}"timezone": "{{ beat.timezone }}",{< end >} + "formats": [ + "MMM d HH:mm:ss", + "MMM dd HH:mm:ss" + ] + } + }, + { + "remove": { + "field": "iptables.raw_date", + "ignore_missing": true + } + }, + + { + "lowercase": { + "field": "network.transport", + "ignore_missing": true + } + }, + { + "geoip": { + "field": "source.ip", + "target_field": "source.geo", + "ignore_missing": true + } + }, + { + "geoip": { + "field": "destination.ip", + "target_field": "destination.geo", + "ignore_missing": true + } + }, + { + "script": { + "lang": "painless", + "params": { + "mappings": [ + { + "source": { + "object": "iptables", + "key": "ether_type" + }, + "destination": { + "object": "network", + "key": "type" + }, + "map": { + "08:00": "ipv4", + "86:dd": "ipv6" + } + }, + { + "source": { + "object": "event", + "key": "outcome" + }, + "destination": { + "object": "event", + "key": "outcome" + }, + "map": { + "D": "deny", + "A": "allow" + } + }, + { + "source": { + "object": "network", + "key": "transport" + }, + "destination": { + "object": "network", + "key": "transport" + }, + "map": { + "icmpv6": "ipv6-icmp" + } + } + ] + }, + "source": "for (action in params.mappings) { def src = ctx[action.source.object]; if (src != null) { Map map = action.map; String key = src[action.source.key]; String mapping = map[key]; if (mapping != null) { Map dst = ctx[action.destination.object]; if (dst == null) { dst = new HashMap(); ctx[action.destination.object] = dst;} dst[action.destination.key] = mapping; } } }" + } + }, + { + "script": { + "lang": "painless", + "params": { + "hex_fields_to_convert": [ + "ether_type", + "tos", + "precedence_bits", + "tcp_reserved_bits" + ] + }, + "source": "def iptables = ctx['iptables']; if (iptables != null) { for (key in params.hex_fields_to_convert) { long value = 0; def field = iptables[key]; if (field == null) continue; char[] hex = field.toLowerCase().toCharArray(); for (chr in hex) { long v = -1; if (chr >= (char)'a' && chr <= (char)'f') v = (long)chr - (char)'a' + 10; else if (chr >= (char)'0' && chr <= (char)'9') v = (long)chr - (char)'0'; if (v >= 0) {value = value*16 + v;} } iptables[key] = value; } }" + } + }, + { + "rename": { + "field": "iptables.tcp_reserved_bits", + "target_field": "iptables.tcp.reserved_bits", + "ignore_missing": true + } + } + ], + "on_failure" : [{ + "set" : { + "field" : "error.message", + "value" : "{{ _ingest.on_failure_message }}" + } + }] +} diff --git a/x-pack/filebeat/module/iptables/log/manifest.yml b/x-pack/filebeat/module/iptables/log/manifest.yml new file mode 100644 index 000000000000..0262a19f5fb3 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/manifest.yml @@ -0,0 +1,28 @@ +module_version: "1.0" + +var: + - name: paths + default: + - /var/log/iptables.log + - name: tags + default: [iptables] + - name: syslog_host + default: localhost + - name: syslog_port + default: 9001 + - name: input + default: syslog + - name: convert_timezone + default: false + # if ES < 6.1.0, this flag switches to false automatically when evaluating the + # pipeline + min_elasticsearch_version: + version: 6.1.0 + value: false + +ingest_pipeline: ingest/pipeline.json +input: config/{{.input}}.yml + +requires.processors: +- name: geoip + plugin: ingest-geoip diff --git a/x-pack/filebeat/module/iptables/log/test/geo.log b/x-pack/filebeat/module/iptables/log/test/geo.log new file mode 100644 index 000000000000..1755a7853c00 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/geo.log @@ -0,0 +1 @@ +Oct 10 07:25:12 Hostname kernel: [wan-lan-default-D]IN=eth0 OUT= MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=158.109.0.1 DST=10.4.0.5 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=38842 DPT=443 WINDOW=2853 RES=0x00 ACK URGP=0 diff --git a/x-pack/filebeat/module/iptables/log/test/geo.log-expected.json b/x-pack/filebeat/module/iptables/log/test/geo.log-expected.json new file mode 100644 index 000000000000..b7c0182599c5 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/geo.log-expected.json @@ -0,0 +1,48 @@ +[ + { + "@timestamp": "2019-10-10T07:25:12.000Z", + "destination.ip": "10.4.0.5", + "destination.mac": "90:10:20:76:8d:20", + "destination.port": 443, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "deny", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 0, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "ACK", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 2853, + "iptables.tos": 0, + "iptables.ttl": 63, + "iptables.ubiquiti.input_zone": "wan", + "iptables.ubiquiti.output_zone": "lan", + "iptables.ubiquiti.rule_number": "default", + "iptables.ubiquiti.rule_set": "wan-lan", + "log.offset": 0, + "log.original": "Oct 10 07:25:12 Hostname kernel: [wan-lan-default-D]IN=eth0 OUT= MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=158.109.0.1 DST=10.4.0.5 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=38842 DPT=443 WINDOW=2853 RES=0x00 ACK URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.geo.city_name": "Bellaterra", + "source.geo.continent_name": "Europe", + "source.geo.country_iso_code": "ES", + "source.geo.location.lat": 41.5026, + "source.geo.location.lon": 2.0875, + "source.geo.region_iso_code": "ES-B", + "source.geo.region_name": "Barcelona", + "source.ip": "158.109.0.1", + "source.mac": "90:10:65:29:b6:2a", + "source.port": 38842, + "tags": [ + "iptables" + ] + } +] \ No newline at end of file diff --git a/x-pack/filebeat/module/iptables/log/test/icmp.log b/x-pack/filebeat/module/iptables/log/test/icmp.log new file mode 100644 index 000000000000..6ab1f8c7ee6f --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/icmp.log @@ -0,0 +1 @@ +Jan 8 03:37:09 DENY: IN=eth0 OUT= MAC=90:10:28:5f:62:24:90:10:18:5a:89:2a:08:00 SRC=192.0.2.71 DST=192.0.2.83 LEN=88 TOS=0x00 PREC=0x00 TTL=118 ID=21684 PROTO=ICMP TYPE=3 CODE=3 [SRC=192.0.2.83 DST=192.168.173.191 LEN=60 TOS=0x00 PREC=0x00 TTL=54 ID=0 DF PROTO=UDP SPT=21458 DPT=62936 LEN=40 ] diff --git a/x-pack/filebeat/module/iptables/log/test/icmp.log-expected.json b/x-pack/filebeat/module/iptables/log/test/icmp.log-expected.json new file mode 100644 index 000000000000..689ad1548560 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/icmp.log-expected.json @@ -0,0 +1,32 @@ +[ + { + "@timestamp": "2019-01-08T03:37:09.000Z", + "destination.ip": "192.0.2.83", + "destination.mac": "90:10:28:5f:62:24", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.icmp.code": 3, + "iptables.icmp.type": 3, + "iptables.id": 21684, + "iptables.input_device": "eth0", + "iptables.length": 88, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tos": 0, + "iptables.ttl": 118, + "log.offset": 0, + "log.original": "Jan 8 03:37:09 DENY: IN=eth0 OUT= MAC=90:10:28:5f:62:24:90:10:18:5a:89:2a:08:00 SRC=192.0.2.71 DST=192.0.2.83 LEN=88 TOS=0x00 PREC=0x00 TTL=118 ID=21684 PROTO=ICMP TYPE=3 CODE=3 [SRC=192.0.2.83 DST=192.168.173.191 LEN=60 TOS=0x00 PREC=0x00 TTL=54 ID=0 DF PROTO=UDP SPT=21458 DPT=62936 LEN=40 ]", + "network.transport": "icmp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.0.2.71", + "source.mac": "90:10:18:5a:89:2a", + "tags": [ + "iptables" + ] + } +] \ No newline at end of file diff --git a/x-pack/filebeat/module/iptables/log/test/iptables.log b/x-pack/filebeat/module/iptables/log/test/iptables.log new file mode 100644 index 000000000000..26a169f56ff9 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/iptables.log @@ -0,0 +1,10 @@ +Jan 8 03:37:09 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.36 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=15743 DF PROTO=TCP SPT=17805 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 +Jan 8 03:37:57 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.198 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=243 ID=17703 PROTO=TCP SPT=47091 DPT=1433 WINDOW=1024 RES=0x00 SYN URGP=0 +Jan 8 03:38:45 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.201 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=19619 DF PROTO=TCP SPT=59319 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 +Jan 8 03:39:25 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.246 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=240 ID=4255 DF PROTO=TCP SPT=44181 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 +Jan 8 03:40:21 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=203.0.113.208 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=110 ID=27150 DF PROTO=TCP SPT=64358 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 +Jan 8 03:40:25 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=198.51.100.160 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=7264 PROTO=TCP SPT=58830 DPT=445 WINDOW=1024 RES=0x00 SYN URGP=0 +Jan 8 03:41:17 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.115 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=6101 DF PROTO=TCP SPT=51985 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 +Jan 8 03:41:23 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.167 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=45 ID=6319 DF PROTO=TCP SPT=4099 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 +Jan 8 03:43:18 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=198.51.100.19 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=48624 PROTO=TCP SPT=59287 DPT=139 WINDOW=1024 RES=0x00 SYN URGP=0 +Jan 8 03:43:42 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00:45:00:00:00:00 SRC=198.51.100.68 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=250 ID=54321 PROTO=TCP SPT=53296 DPT=8088 WINDOW=65535 RES=0x00 SYN URGP=0 diff --git a/x-pack/filebeat/module/iptables/log/test/iptables.log-expected.json b/x-pack/filebeat/module/iptables/log/test/iptables.log-expected.json new file mode 100644 index 000000000000..ff646faf78bb --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/iptables.log-expected.json @@ -0,0 +1,338 @@ +[ + { + "@timestamp": "2019-01-08T03:37:09.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 15743, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 8192, + "iptables.tos": 0, + "iptables.ttl": 115, + "log.offset": 0, + "log.original": "Jan 8 03:37:09 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.36 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=15743 DF PROTO=TCP SPT=17805 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "203.0.113.36", + "source.mac": "90:10:9e:ec:2c:71", + "source.port": 17805, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:37:57.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 1433, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.id": 17703, + "iptables.input_device": "eth0", + "iptables.length": 40, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 1024, + "iptables.tos": 0, + "iptables.ttl": 243, + "log.offset": 259, + "log.original": "Jan 8 03:37:57 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.198 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=243 ID=17703 PROTO=TCP SPT=47091 DPT=1433 WINDOW=1024 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.198", + "source.mac": "90:10:76:e0:e2:d5", + "source.port": 47091, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:38:45.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 19619, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 8192, + "iptables.tos": 0, + "iptables.ttl": 115, + "log.offset": 518, + "log.original": "Jan 8 03:38:45 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.201 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=19619 DF PROTO=TCP SPT=59319 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "203.0.113.201", + "source.mac": "90:10:9e:ec:2c:71", + "source.port": 59319, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:39:25.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 80, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 4255, + "iptables.input_device": "eth0", + "iptables.length": 40, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 14600, + "iptables.tos": 0, + "iptables.ttl": 240, + "log.offset": 778, + "log.original": "Jan 8 03:39:25 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=203.0.113.246 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=240 ID=4255 DF PROTO=TCP SPT=44181 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "203.0.113.246", + "source.mac": "90:10:9e:ec:2c:71", + "source.port": 44181, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:40:21.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 27150, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 8192, + "iptables.tos": 0, + "iptables.ttl": 110, + "log.offset": 1037, + "log.original": "Jan 8 03:40:21 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=203.0.113.208 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=110 ID=27150 DF PROTO=TCP SPT=64358 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "203.0.113.208", + "source.mac": "90:10:76:e0:e2:d5", + "source.port": 64358, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:40:25.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.id": 7264, + "iptables.input_device": "eth0", + "iptables.length": 40, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 1024, + "iptables.tos": 0, + "iptables.ttl": 242, + "log.offset": 1297, + "log.original": "Jan 8 03:40:25 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=198.51.100.160 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=7264 PROTO=TCP SPT=58830 DPT=445 WINDOW=1024 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.160", + "source.mac": "90:10:9e:ec:2c:71", + "source.port": 58830, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:41:17.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 6101, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 8192, + "iptables.tos": 0, + "iptables.ttl": 117, + "log.offset": 1554, + "log.original": "Jan 8 03:41:17 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.115 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=117 ID=6101 DF PROTO=TCP SPT=51985 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.115", + "source.mac": "90:10:76:e0:e2:d5", + "source.port": 51985, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:41:23.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 445, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 6319, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 8192, + "iptables.tos": 0, + "iptables.ttl": 45, + "log.offset": 1814, + "log.original": "Jan 8 03:41:23 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00 SRC=198.51.100.167 DST=172.16.54.114 LEN=52 TOS=0x00 PREC=0x00 TTL=45 ID=6319 DF PROTO=TCP SPT=4099 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.167", + "source.mac": "90:10:76:e0:e2:d5", + "source.port": 4099, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:43:18.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 139, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.id": 48624, + "iptables.input_device": "eth0", + "iptables.length": 40, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 1024, + "iptables.tos": 0, + "iptables.ttl": 245, + "log.offset": 2072, + "log.original": "Jan 8 03:43:18 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:9e:ec:2c:71:08:00 SRC=198.51.100.19 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=48624 PROTO=TCP SPT=59287 DPT=139 WINDOW=1024 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.19", + "source.mac": "90:10:9e:ec:2c:71", + "source.port": 59287, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-08T03:43:42.000Z", + "destination.ip": "172.16.54.114", + "destination.mac": "90:10:35:5a:1e:3a", + "destination.port": 8088, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.id": 54321, + "iptables.input_device": "eth0", + "iptables.length": 40, + "iptables.output_device": "", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "SYN", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 65535, + "iptables.tos": 0, + "iptables.ttl": 250, + "log.offset": 2329, + "log.original": "Jan 8 03:43:42 example-host kernel: iptables DROP_INPUT: IN=eth0 OUT= MAC=90:10:35:5a:1e:3a:90:10:76:e0:e2:d5:08:00:45:00:00:00:00 SRC=198.51.100.68 DST=172.16.54.114 LEN=40 TOS=0x00 PREC=0x00 TTL=250 ID=54321 PROTO=TCP SPT=53296 DPT=8088 WINDOW=65535 RES=0x00 SYN URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "198.51.100.68", + "source.mac": "90:10:76:e0:e2:d5", + "source.port": 53296, + "tags": [ + "iptables" + ] + } +] \ No newline at end of file diff --git a/x-pack/filebeat/module/iptables/log/test/ipv6.log b/x-pack/filebeat/module/iptables/log/test/ipv6.log new file mode 100644 index 000000000000..5541c8106441 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/ipv6.log @@ -0,0 +1,11 @@ +Jan 22 09:05:05 ubuntu-bionic kernel: [16571.459614] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=1 +Jan 22 09:05:05 ubuntu-bionic kernel: [16571.459695] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=1 +Jan 22 09:05:06 ubuntu-bionic kernel: [16572.482458] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=2 +Jan 22 09:05:06 ubuntu-bionic kernel: [16572.482476] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=2 +Jan 22 09:05:07 ubuntu-bionic kernel: [16573.506336] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=3 +Jan 22 09:05:07 ubuntu-bionic kernel: [16573.506356] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=3 +Jan 22 09:05:08 ubuntu-bionic kernel: [16574.533989] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=4 +Jan 22 09:05:08 ubuntu-bionic kernel: [16574.534007] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=4 +Jan 22 09:05:09 ubuntu-bionic kernel: [16575.553704] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=5 +Jan 22 09:05:09 ubuntu-bionic kernel: [16575.553722] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=5 +Jan 22 10:52:34 ubuntu-bionic kernel: [ 307.757925] IN= OUT=enp0s3 MAC=90:10:12:34:56:78:90:10:aa:bb:cc:dd:86:dd:ff:ff SRC=fe80:0000:0000:0000:0084:88ff:feae:790a DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=96 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=ICMPv6 TYPE=143 CODE=0 MARK=0xd4 diff --git a/x-pack/filebeat/module/iptables/log/test/ipv6.log-expected.json b/x-pack/filebeat/module/iptables/log/test/ipv6.log-expected.json new file mode 100644 index 000000000000..5c662ddd178d --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/ipv6.log-expected.json @@ -0,0 +1,301 @@ +[ + { + "@timestamp": "2019-01-22T09:05:05.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 868225, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 1, + "iptables.icmp.type": 128, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 0, + "log.original": "Jan 22 09:05:05 ubuntu-bionic kernel: [16571.459614] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=1 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:05.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 770819, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 1, + "iptables.icmp.type": 129, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 236, + "log.original": "Jan 22 09:05:05 ubuntu-bionic kernel: [16571.459695] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=1 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:06.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 868225, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 2, + "iptables.icmp.type": 128, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 472, + "log.original": "Jan 22 09:05:06 ubuntu-bionic kernel: [16572.482458] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=2 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:06.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 770819, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 2, + "iptables.icmp.type": 129, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 708, + "log.original": "Jan 22 09:05:06 ubuntu-bionic kernel: [16572.482476] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=2 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:07.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 868225, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 3, + "iptables.icmp.type": 128, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 944, + "log.original": "Jan 22 09:05:07 ubuntu-bionic kernel: [16573.506336] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=3 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:07.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 770819, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 3, + "iptables.icmp.type": 129, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 1180, + "log.original": "Jan 22 09:05:07 ubuntu-bionic kernel: [16573.506356] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=3 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:08.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 868225, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 4, + "iptables.icmp.type": 128, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 1416, + "log.original": "Jan 22 09:05:08 ubuntu-bionic kernel: [16574.533989] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=4 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:08.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 770819, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 4, + "iptables.icmp.type": 129, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 1652, + "log.original": "Jan 22 09:05:08 ubuntu-bionic kernel: [16574.534007] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=4 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:09.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 868225, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 5, + "iptables.icmp.type": 128, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 1888, + "log.original": "Jan 22 09:05:09 ubuntu-bionic kernel: [16575.553704] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=868225 PROTO=ICMPv6 TYPE=128 CODE=0 ID=3427 SEQ=5 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T09:05:09.000Z", + "destination.ip": "2001:0db8:0000:0000:0000:0000:0000:0002", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.flow_label": 770819, + "iptables.icmp.code": 0, + "iptables.icmp.id": 3427, + "iptables.icmp.seq": 5, + "iptables.icmp.type": 129, + "iptables.input_device": "", + "iptables.length": 104, + "iptables.output_device": "lo", + "iptables.tos": 0, + "iptables.ttl": 64, + "log.offset": 2124, + "log.original": "Jan 22 09:05:09 ubuntu-bionic kernel: [16575.553722] IN= OUT=lo SRC=2001:0db8:0000:0000:0000:0000:0000:0001 DST=2001:0db8:0000:0000:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=770819 PROTO=ICMPv6 TYPE=129 CODE=0 ID=3427 SEQ=5 ", + "network.transport": "ipv6-icmp", + "service.type": "iptables", + "source.ip": "2001:0db8:0000:0000:0000:0000:0000:0001", + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-22T10:52:34.000Z", + "destination.ip": "ff02:0000:0000:0000:0000:0000:0000:0016", + "destination.mac": "90:10:12:34:56:78", + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 34525, + "iptables.flow_label": 0, + "iptables.icmp.code": 0, + "iptables.icmp.type": 143, + "iptables.input_device": "", + "iptables.length": 96, + "iptables.output_device": "enp0s3", + "iptables.tos": 0, + "iptables.ttl": 1, + "log.offset": 2360, + "log.original": "Jan 22 10:52:34 ubuntu-bionic kernel: [ 307.757925] IN= OUT=enp0s3 MAC=90:10:12:34:56:78:90:10:aa:bb:cc:dd:86:dd:ff:ff SRC=fe80:0000:0000:0000:0084:88ff:feae:790a DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=96 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=ICMPv6 TYPE=143 CODE=0 MARK=0xd4", + "network.transport": "ipv6-icmp", + "network.type": "ipv6", + "service.type": "iptables", + "source.ip": "fe80:0000:0000:0000:0084:88ff:feae:790a", + "source.mac": "90:10:aa:bb:cc:dd", + "tags": [ + "iptables" + ] + } +] \ No newline at end of file diff --git a/x-pack/filebeat/module/iptables/log/test/ubiquiti.log b/x-pack/filebeat/module/iptables/log/test/ubiquiti.log new file mode 100644 index 000000000000..c795c77a5168 --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/ubiquiti.log @@ -0,0 +1,5 @@ +Jan 5 20:17:05 MainFirewall kernel: [LAN_LOCAL-default-A]IN=eth0.90 OUT= MAC=90:10:92:6e:ea:a7:90:10:73:ba:d6:77:08:00:45:fc:02:1c SRC=192.168.48.137 DST=255.55.174.225 LEN=540 TOS=0x1C PREC=0xE0 TTL=64 ID=27223 PROTO=UDP SPT=48689 DPT=48689 LEN=520 +Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:24:67:f4:89:08:00 SRC=192.168.134.158 DST=192.0.2.25 LEN=265 TOS=0x00 PREC=0x00 TTL=63 ID=51768 DF PROTO=TCP SPT=43189 DPT=443 WINDOW=159 RES=0x00 ACK PSH URGP=0 +Jan 5 20:17:01 MainFirewall kernel: [source-dest-default-D]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2857 RES=0x00 ACK URGP=0 +Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2853 RES=0x00 ACK URGP=0 +Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2850 RES=0x00 ACK URGP=0 diff --git a/x-pack/filebeat/module/iptables/log/test/ubiquiti.log-expected.json b/x-pack/filebeat/module/iptables/log/test/ubiquiti.log-expected.json new file mode 100644 index 000000000000..f268a98822ef --- /dev/null +++ b/x-pack/filebeat/module/iptables/log/test/ubiquiti.log-expected.json @@ -0,0 +1,186 @@ +[ + { + "@timestamp": "2019-01-05T20:17:05.000Z", + "destination.ip": "255.55.174.225", + "destination.mac": "90:10:92:6e:ea:a7", + "destination.port": 48689, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "allow", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.id": 27223, + "iptables.input_device": "eth0.90", + "iptables.length": 540, + "iptables.output_device": "", + "iptables.precedence_bits": 224, + "iptables.tos": 28, + "iptables.ttl": 64, + "iptables.ubiquiti.rule_number": "default", + "iptables.ubiquiti.rule_set": "LAN_LOCAL", + "iptables.udp.length": 520, + "log.offset": 0, + "log.original": "Jan 5 20:17:05 MainFirewall kernel: [LAN_LOCAL-default-A]IN=eth0.90 OUT= MAC=90:10:92:6e:ea:a7:90:10:73:ba:d6:77:08:00:45:fc:02:1c SRC=192.168.48.137 DST=255.55.174.225 LEN=540 TOS=0x1C PREC=0xE0 TTL=64 ID=27223 PROTO=UDP SPT=48689 DPT=48689 LEN=520 ", + "network.transport": "udp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.168.48.137", + "source.mac": "90:10:73:ba:d6:77", + "source.port": 48689, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-05T20:17:01.000Z", + "destination.ip": "192.0.2.25", + "destination.mac": "90:10:20:76:8d:20", + "destination.port": 443, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "allow", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 51768, + "iptables.input_device": "eth0", + "iptables.length": 265, + "iptables.output_device": "eth2", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "ACK", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 159, + "iptables.tos": 0, + "iptables.ttl": 63, + "iptables.ubiquiti.rule_number": "2000", + "iptables.ubiquiti.rule_set": "WAN_OUT", + "log.offset": 252, + "log.original": "Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:24:67:f4:89:08:00 SRC=192.168.134.158 DST=192.0.2.25 LEN=265 TOS=0x00 PREC=0x00 TTL=63 ID=51768 DF PROTO=TCP SPT=43189 DPT=443 WINDOW=159 RES=0x00 ACK PSH URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.168.134.158", + "source.mac": "90:10:24:67:f4:89", + "source.port": 43189, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-05T20:17:01.000Z", + "destination.ip": "192.0.2.25", + "destination.mac": "90:10:20:76:8d:20", + "destination.port": 1443, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "deny", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 0, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "eth2", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "ACK", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 2857, + "iptables.tos": 0, + "iptables.ttl": 63, + "iptables.ubiquiti.input_zone": "source", + "iptables.ubiquiti.output_zone": "dest", + "iptables.ubiquiti.rule_number": "default", + "iptables.ubiquiti.rule_set": "source-dest", + "log.offset": 513, + "log.original": "Jan 5 20:17:01 MainFirewall kernel: [source-dest-default-D]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2857 RES=0x00 ACK URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.168.110.116", + "source.mac": "90:10:65:29:b6:2a", + "source.port": 50093, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-05T20:17:01.000Z", + "destination.ip": "192.0.2.25", + "destination.mac": "90:10:20:76:8d:20", + "destination.port": 1443, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "allow", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 0, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "eth2", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "ACK", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 2853, + "iptables.tos": 0, + "iptables.ttl": 63, + "iptables.ubiquiti.rule_number": "2000", + "iptables.ubiquiti.rule_set": "WAN_OUT", + "log.offset": 774, + "log.original": "Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2853 RES=0x00 ACK URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.168.110.116", + "source.mac": "90:10:65:29:b6:2a", + "source.port": 50093, + "tags": [ + "iptables" + ] + }, + { + "@timestamp": "2019-01-05T20:17:01.000Z", + "destination.ip": "192.0.2.25", + "destination.mac": "90:10:20:76:8d:20", + "destination.port": 1443, + "ecs.version": "1.0.0-beta2", + "event.dataset": "iptables.log", + "event.module": "iptables", + "event.outcome": "allow", + "fileset.name": "log", + "input.type": "log", + "iptables.ether_type": 2048, + "iptables.fragment_flags": "DF", + "iptables.id": 0, + "iptables.input_device": "eth0", + "iptables.length": 52, + "iptables.output_device": "eth2", + "iptables.precedence_bits": 0, + "iptables.tcp.flags": "ACK", + "iptables.tcp.reserved_bits": 0, + "iptables.tcp.window": 2850, + "iptables.tos": 0, + "iptables.ttl": 63, + "iptables.ubiquiti.rule_number": "2000", + "iptables.ubiquiti.rule_set": "WAN_OUT", + "log.offset": 1028, + "log.original": "Jan 5 20:17:01 MainFirewall kernel: [WAN_OUT-2000-A]IN=eth0 OUT=eth2 MAC=90:10:20:76:8d:20:90:10:65:29:b6:2a:08:00 SRC=192.168.110.116 DST=192.0.2.25 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50093 DPT=1443 WINDOW=2850 RES=0x00 ACK URGP=0 ", + "network.transport": "tcp", + "network.type": "ipv4", + "service.type": "iptables", + "source.ip": "192.168.110.116", + "source.mac": "90:10:65:29:b6:2a", + "source.port": 50093, + "tags": [ + "iptables" + ] + } +] \ No newline at end of file diff --git a/x-pack/filebeat/module/iptables/module.yml b/x-pack/filebeat/module/iptables/module.yml new file mode 100644 index 000000000000..3129ecbdbc30 --- /dev/null +++ b/x-pack/filebeat/module/iptables/module.yml @@ -0,0 +1,5 @@ +dashboards: +- id: ceefb9e0-1f51-11e9-93ed-f7e068f4aebb + file: Filebeat-Iptables-Overview.json +- id: d39f0980-1ff3-11e9-ae2a-939083c6a64e + file: Filebeat-Iptables-Ubiquiti-Firewall-Overview.json diff --git a/x-pack/filebeat/modules.d/iptables.yml.disabled b/x-pack/filebeat/modules.d/iptables.yml.disabled new file mode 100644 index 000000000000..833fd91537b9 --- /dev/null +++ b/x-pack/filebeat/modules.d/iptables.yml.disabled @@ -0,0 +1,13 @@ +# Module: iptables +# Docs: https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-module-iptables.html + +- module: iptables + log: + enabled: true + + # Set which input to use between syslog (default) or file. + #var.input: + + # Set custom paths for the log files. If left empty, + # Filebeat will choose the paths depending on your OS. + #var.paths: From 6f23ddfcddf01f6962ff075a1d5d291c669df555 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 20:26:45 +0100 Subject: [PATCH 10/66] Change type of field backend_url and frontend_name in traefik.access metricset to type keyword (#10401) --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 4 ++-- filebeat/module/traefik/access/_meta/fields.yml | 4 ++-- filebeat/module/traefik/fields.go | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index d169156345f6..8f14d413fd1f 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -58,6 +58,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d including `http.response.elapsed_time` (ECS). {pull}10188[10188], {pull}10274[10274] - Rename multiple fields to `http.response.body.bytes`, from modules "apache", "iis", "kibana", "nginx" and "traefik", including `http.response.content_length` (ECS). {pull}10188[10188] +- Change type of field backend_url and frontend_name in traefik.access metricset to type keyword. {pull}10401[10401] - Ingesting Elasticsearch audit logs is only supported with Elasticsearch 6.5.0 and above {pull}10352[10352] - Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index ab170a65c443..ccc353c41591 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -12898,7 +12898,7 @@ The number of requests *`traefik.access.frontend_name`*:: + -- -type: text +type: keyword The name of the frontend used @@ -12908,7 +12908,7 @@ The name of the frontend used *`traefik.access.backend_url`*:: + -- -type: text +type: keyword The url of the backend where request is forwarded diff --git a/filebeat/module/traefik/access/_meta/fields.yml b/filebeat/module/traefik/access/_meta/fields.yml index f9cc5a263ba9..0379c081e163 100644 --- a/filebeat/module/traefik/access/_meta/fields.yml +++ b/filebeat/module/traefik/access/_meta/fields.yml @@ -12,11 +12,11 @@ description: > The number of requests - name: frontend_name - type: text + type: keyword description: > The name of the frontend used - name: backend_url - type: text + type: keyword description: The url of the backend where request is forwarded diff --git a/filebeat/module/traefik/fields.go b/filebeat/module/traefik/fields.go index 60c1cd39b12f..d40a8182297f 100644 --- a/filebeat/module/traefik/fields.go +++ b/filebeat/module/traefik/fields.go @@ -32,5 +32,5 @@ func init() { // AssetTraefik returns asset data. // This is the base64 encoded gzipped contents of module/traefik. func AssetTraefik() string { - return "eJysls9uozAQxu95ilHvRap2TznspVKlPexl1TtyYSDeGA87Htrl7VcmIaVoTAmNb4H4+33zx2Pu4Yj9HoQNVva4AxArDvdw93x6crcDKDEUbFux5PfwYwcA8IvKziFUxNAaDtbXIAeE8yZwVENlHYZsB1BZdGXYD/vuwZsGp7y4pG9xDzVT156fKMi4ngYpqJiaNC+uKXPKNUWBIVwea+gFfFyP5MVYH86IIQVTKydCdHQxoxmamuoCcm5L9GIri/zhP6PDI/ZvxOXs3YLPuH6Gwdrvp0d4+P7wDU4M6YGq4UXhLHpRPTH+7TBIXlA3+8foyJGvr7PzfEDwXfOCHA2cCUHFV0xe0Jd5/KniBf/Nfa3BmwbH6EdGzH+pungxxTGa6Nht8aA66NiNBs7y8HZAxjEfYIeeejNcTlzp9qjs84BespdeMKgWjbNm/qY1ctjDQaTNGENLPmAWtVSZxtZsTikV7jDRLA0J5ra90kKgjgvMTFnyx1O5FjycnGSLpMFxX6bsW8NsUA40P4grkz1UOFMVVoWb6MOFQNllxLa23sy3rgFG2/krcrDkt0Ssb13XUqfGzAsqr63ux84OYqQLms46HxUyJ4byynonNNbgTT0f0OuaOx82Xlv69BlL+5hfnZC47KaSJb7aYl6N5dDU8BI6l5Nq/tA86RsouswFYv1NIKrMCGmNFIevQ3SZEaLMww0MVWVEkCZxJYBCVnXOaWN/CspvVH0KnzRARN2mByJqsQ0o6FFvIS2nT58bW0hzJXXG1EiJj4ct46UgL9ajl69k6/xtUiNln+i9Yzsv3Oc2kHbbbAJ/ojiiHRXDPP86Mqn0fiHWlvyNMrskdkmrlf5WhUxKzaK7XQlTgrv/AQAA//+snOpi" + return "eJyslk9vozwQxu/5FKPei1S97ymHvVSqtIe9rHpHLgzgjfGw43Ervv3KJKQU2ZQQfAvEz++ZPx7zCCfsjyCssNKnA4BoMXiEh9fzk4cDQImuYN2JJnuEHwcAgF9UeoNQEUOn2GlbgzQIl01gqIZKG3TZAaDSaEp3HPY9glUtTnlhSd/hEWom312eRJBhvQxSUDG1aV5YU+aUq4oCnbs+jqEX8GE9kxWlrbsghhRMrZwJwdHVTMzQ1JR3yLku0YquNPKX/4wOT9h/EJezdws+w/rpBmu/X57h6f+n/+DMkB6oGl4URqOVqCfGvx6d5AX52T9GR4ZsfZud1wbB+vYNORi4EFwUXzFZQVvm4ed+CRkcqBbHBIyYUIIyauRNFafgw7PZaCNqwrMZPVwI8NEg45gV0ENnfSguJ8biDqnsc4dWsrde0EVdKqPV/E2npDlCI9JljK4j6zALWlGZVteszlkV9phomZYEc93daMGR5wIzVZb89WyuBQ/nJ9koaXDYl0X2rWG2KA3Ny74y2UOFs6jCqnATrbgQKJuMWNfaqvnWNcBgO39HdprslojjW9e11Lkx84LKW6v7tbOdKPEuprPOR4XMidG8st4JjTV4Vc/H9LrmzoeNt5Y+fcbSPuYXKCSuvKlkie+6mFdjObRoeAmd60lVf2ie9A2UuMwVou0ukKjMCOmUFM39kLjMCInMww2MqMqIoJjEjQByWeWNiY39KSjfqfrkvmmAgNqnBwJqsQ3IxaPeQlpOX3xubCHNlaIzpkZKfDxsGS8FWdEWrdyTrcu3SY2UfaP3ifVWuM+1o9htswn8jeKINlQM8/x+ZFLp80KsNdmdMrskdk2rln6vQialZtHtV8KU4OFfAAAA///Vouzi" } From e01e7981420cc48e04dbe4087adad7554cd3a3d9 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Tue, 29 Jan 2019 20:38:36 +0100 Subject: [PATCH 11/66] [Filebeat] Replace Suricata/Eve fields with aliases to ECS fields (#10377) This PR avoids duplicate data in documents ingested via the Suricata Eve fileset by replacing a few fields with aliases to ECS fields. This allows to maintain the full set of fields Suricata users may expect while at the same time reducing the size of the events. Also, the following non-related fixes are performed: - "http.response.status_code" was being set from a string and not an integer. - "user_agent.original" was being inadvertently removed by the user_agent processor. - Reformatted the ingest pipeline with standard JSON formatting. --- dev-tools/ecs-migration.yml | 120 ++++ filebeat/docs/fields.asciidoc | 96 ++- .../Filebeat-Suricata-Alert-Overview.json | 8 +- .../dashboard/Filebeat-Suricata-Overview.json | 8 +- .../module/suricata/eve/_meta/fields.yml | 72 ++- .../module/suricata/eve/ingest/pipeline.json | 594 +++++++++--------- .../eve/test/eve-alerts.log-expected.json | 454 ++----------- .../eve/test/eve-small.log-expected.json | 78 +-- x-pack/filebeat/module/suricata/fields.go | 2 +- 9 files changed, 626 insertions(+), 806 deletions(-) diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index f44d47487985..c025a9d11029 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -171,6 +171,126 @@ alias: true beat: filebeat +- from: suricata.eve.alert.action + to: event.outcome + alias: true + beat: filebeat + +- from: suricata.eve.alert.severity + to: event.severity + alias: true + beat: filebeat + +- from: suricata.eve.app_proto + to: network.protocol + alias: true + beat: filebeat + +- from: suricata.eve.dest_ip + to: destination.ip + alias: true + beat: filebeat + +- from: suricata.eve.dest_port + to: destination.port + alias: true + beat: filebeat + +- from: suricata.eve.event_type + to: event.type + alias: true + beat: filebeat + +- from: suricata.eve.fileinfo.filename + to: file.path + alias: true + beat: filebeat + +- from: suricata.eve.fileinfo.size + to: file.size + alias: true + beat: filebeat + +- from: suricata.eve.flow.start + to: event.start + alias: true + beat: filebeat + +- from: suricata.eve.flow.bytes_toclient + to: destination.bytes + alias: true + beat: filebeat + +- from: suricata.eve.flow.bytes_toserver + to: source.bytes + alias: true + beat: filebeat + +- from: suricata.eve.flow.pkts_toclient + to: destination.packets + alias: true + beat: filebeat + +- from: suricata.eve.flow.pkts_toserver + to: source.packets + alias: true + beat: filebeat + +- from: suricata.eve.http.hostname + to: url.domain + alias: true + beat: filebeat + +- from: suricata.eve.http.http_method + to: http.request.method + alias: true + beat: filebeat + +- from: suricata.eve.http.http_refer + to: http.request.referrer + alias: true + beat: filebeat + +- from: suricata.eve.http.http_user_agent + to: user_agent.original + alias: true + beat: filebeat + +- from: suricata.eve.http.length + to: http.response.body.bytes + alias: true + beat: filebeat + +- from: suricata.eve.http.status + to: http.response.status_code + alias: true + beat: filebeat + +- from: suricata.eve.http.url + to: url.original + alias: true + beat: filebeat + +- from: suricata.eve.proto + to: network.transport + alias: true + beat: filebeat + +- from: suricata.eve.src_ip + to: source.ip + alias: true + beat: filebeat + +- from: suricata.eve.src_port + to: source.port + alias: true + beat: filebeat + +- from: suricata.eve.timestamp + to: '@timestamp' + alias: true + beat: filebeat + ## System module - from: system.syslog.hostname diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index ccc353c41591..018e01e5f724 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -11038,7 +11038,9 @@ Fields exported by the EVE JSON logs *`suricata.eve.event_type`*:: + -- -type: keyword +type: alias + +alias to: event.type -- @@ -11124,7 +11126,9 @@ type: keyword *`suricata.eve.fileinfo.filename`*:: + -- -type: keyword +type: alias + +alias to: file.path -- @@ -11173,7 +11177,9 @@ type: keyword *`suricata.eve.fileinfo.size`*:: + -- -type: long +type: alias + +alias to: file.size -- @@ -11187,21 +11193,27 @@ type: long *`suricata.eve.dest_port`*:: + -- -type: long +type: alias + +alias to: destination.port -- *`suricata.eve.src_port`*:: + -- -type: long +type: alias + +alias to: source.port -- *`suricata.eve.proto`*:: + -- -type: keyword +type: alias + +alias to: network.transport -- @@ -11215,7 +11227,9 @@ type: long *`suricata.eve.src_ip`*:: + -- -type: ip +type: alias + +alias to: source.ip -- @@ -11294,7 +11308,9 @@ type: keyword *`suricata.eve.dest_ip`*:: + -- -type: ip +type: alias + +alias to: destination.ip -- @@ -11309,7 +11325,9 @@ type: long *`suricata.eve.http.status`*:: + -- -type: long +type: alias + +alias to: http.response.status_code -- @@ -11323,7 +11341,9 @@ type: keyword *`suricata.eve.http.http_user_agent`*:: + -- -type: keyword +type: alias + +alias to: user_agent.original -- @@ -11337,35 +11357,45 @@ type: keyword *`suricata.eve.http.http_refer`*:: + -- -type: keyword +type: alias + +alias to: http.request.referrer -- *`suricata.eve.http.url`*:: + -- -type: keyword +type: alias + +alias to: url.original -- *`suricata.eve.http.hostname`*:: + -- -type: keyword +type: alias + +alias to: url.domain -- *`suricata.eve.http.length`*:: + -- -type: long +type: alias + +alias to: http.response.body.bytes -- *`suricata.eve.http.http_method`*:: + -- -type: keyword +type: alias + +alias to: http.request.method -- @@ -11379,7 +11409,9 @@ type: keyword *`suricata.eve.timestamp`*:: + -- -type: date +type: alias + +alias to: @timestamp -- @@ -11401,7 +11433,9 @@ type: keyword *`suricata.eve.alert.severity`*:: + -- -type: long +type: alias + +alias to: event.severity -- @@ -11429,7 +11463,9 @@ type: keyword *`suricata.eve.alert.action`*:: + -- -type: keyword +type: alias + +alias to: event.outcome -- @@ -12377,21 +12413,27 @@ type: keyword *`suricata.eve.flow.bytes_toclient`*:: + -- -type: long +type: alias + +alias to: destination.bytes -- *`suricata.eve.flow.start`*:: + -- -type: date +type: alias + +alias to: event.start -- *`suricata.eve.flow.pkts_toclient`*:: + -- -type: long +type: alias + +alias to: destination.packets -- @@ -12412,7 +12454,9 @@ type: keyword *`suricata.eve.flow.bytes_toserver`*:: + -- -type: long +type: alias + +alias to: source.bytes -- @@ -12426,7 +12470,9 @@ type: keyword *`suricata.eve.flow.pkts_toserver`*:: + -- -type: long +type: alias + +alias to: source.packets -- @@ -12447,7 +12493,9 @@ type: boolean *`suricata.eve.app_proto`*:: + -- -type: keyword +type: alias + +alias to: network.protocol -- diff --git a/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Alert-Overview.json b/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Alert-Overview.json index f6330c2d0d05..26be4f576166 100644 --- a/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Alert-Overview.json +++ b/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Alert-Overview.json @@ -226,10 +226,10 @@ "columns": [ "host.name", "suricata.eve.flow_id", - "suricata.eve.src_ip", - "suricata.eve.src_port", - "suricata.eve.dest_ip", - "suricata.eve.dest_port", + "source.ip", + "source.port", + "destination.ip", + "destination.port", "source.geo.country_iso_code", "destination.geo.country_iso_code" ], diff --git a/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Overview.json b/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Overview.json index 1b8597655efd..92a7047df8a0 100644 --- a/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Overview.json +++ b/x-pack/filebeat/module/suricata/_meta/kibana/7/dashboard/Filebeat-Suricata-Overview.json @@ -225,7 +225,7 @@ "enabled": true, "id": "2", "params": { - "field": "suricata.eve.app_proto", + "field": "network.protocol", "missingBucket": false, "missingBucketLabel": "Missing", "order": "desc", @@ -398,7 +398,7 @@ "host.name", "event.type", "suricata.eve.flow_id", - "suricata.eve.proto", + "network.transport", "source.ip", "source.port", "destination.ip", @@ -632,7 +632,7 @@ "enabled": true, "id": "2", "params": { - "field": "suricata.eve.proto", + "field": "network.transport", "missingBucket": false, "missingBucketLabel": "Missing", "order": "desc", @@ -916,4 +916,4 @@ } ], "version": "6.4.3" -} \ No newline at end of file +} diff --git a/x-pack/filebeat/module/suricata/eve/_meta/fields.yml b/x-pack/filebeat/module/suricata/eve/_meta/fields.yml index 4b481594ba39..eb2971b3888e 100644 --- a/x-pack/filebeat/module/suricata/eve/_meta/fields.yml +++ b/x-pack/filebeat/module/suricata/eve/_meta/fields.yml @@ -4,7 +4,8 @@ Fields exported by the EVE JSON logs fields: - name: event_type - type: keyword + type: alias + path: event.type - name: app_proto_orig type: keyword @@ -46,7 +47,8 @@ type: keyword - name: filename - type: keyword + type: alias + path: file.path - name: tx_id type: long @@ -67,25 +69,30 @@ type: keyword - name: size - type: long + type: alias + path: file.size - name: icmp_type type: long - name: dest_port - type: long + type: alias + path: destination.port - name: src_port - type: long + type: alias + path: source.port - name: proto - type: keyword + type: alias + path: network.transport - name: pcap_cnt type: long - name: src_ip - type: ip + type: alias + path: source.ip - name: dns type: group @@ -124,7 +131,8 @@ type: keyword - name: dest_ip - type: ip + type: alias + path: destination.ip - name: icmp_code type: long @@ -133,37 +141,45 @@ type: group fields: - name: status - type: long + type: alias + path: http.response.status_code - name: redirect type: keyword - name: http_user_agent - type: keyword + type: alias + path: user_agent.original - name: protocol type: keyword - name: http_refer - type: keyword + type: alias + path: http.request.referrer - name: url - type: keyword + type: alias + path: url.original - name: hostname - type: keyword + type: alias + path: url.domain - name: length - type: long + type: alias + path: http.response.body.bytes - name: http_method - type: keyword + type: alias + path: http.request.method - name: http_content_type type: keyword - name: timestamp - type: date + type: alias + path: '@timestamp' - name: in_iface type: keyword @@ -175,7 +191,8 @@ type: keyword - name: severity - type: long + type: alias + path: event.severity - name: rev type: long @@ -187,7 +204,8 @@ type: keyword - name: action - type: keyword + type: alias + path: event.outcome - name: signature_id type: long @@ -655,13 +673,16 @@ type: group fields: - name: bytes_toclient - type: long + type: alias + path: destination.bytes - name: start - type: date + type: alias + path: event.start - name: pkts_toclient - type: long + type: alias + path: destination.packets - name: age type: long @@ -670,13 +691,15 @@ type: keyword - name: bytes_toserver - type: long + type: alias + path: source.bytes - name: reason type: keyword - name: pkts_toserver - type: long + type: alias + path: source.packets - name: end type: date @@ -685,7 +708,8 @@ type: boolean - name: app_proto - type: keyword + type: alias + path: network.protocol - name: tx_id type: long diff --git a/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json b/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json index d117ae4564aa..5ce22d32818e 100644 --- a/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json +++ b/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json @@ -1,283 +1,315 @@ -{ "description": "Pipeline for parsing Suricata EVE logs" -, "processors": - [ { "script": - { "lang": "painless" - , "source": "ctx['suricata'] = new HashMap(); ctx['suricata']['eve'] = ctx['json']; ctx.remove('json');" - } - } - , {"convert": - {"field": "suricata.eve.src_ip" - ,"target_field": "source.ip" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.src_port" - ,"target_field": "source.port" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.dest_ip" - ,"target_field": "destination.ip" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.dest_port" - ,"target_field": "destination.port" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"lowercase": - {"field": "suricata.eve.http.http_method" - ,"target_field": "http.request.method" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.http.status" - ,"target_field": "http.response.status_code" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.http.hostname" - ,"target_field": "url.domain" - ,"type": "string" - ,"ignore_missing": true - } - } - , { "grok": - { "field": "suricata.eve.http.url" - , "patterns": ["%{PATH:url.path}(?:\\?%{QUERY:url.query})?(?:#%{ANY:url.fragment})?"] - , "ignore_missing": true - , "pattern_definitions": - { "PATH": "[^?#]*" - , "QUERY": "[^#]*" - , "ANY": ".*" +{ + "description": "Pipeline for parsing Suricata EVE logs", + "processors": [ + { + "script": { + "lang": "painless", + "source": "ctx['suricata'] = new HashMap(); ctx['suricata']['eve'] = ctx['json']; ctx.remove('json');" + } + }, + { + "rename": { + "field": "suricata.eve.src_ip", + "target_field": "source.ip", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.src_port", + "target_field": "source.port", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.dest_ip", + "target_field": "destination.ip", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.dest_port", + "target_field": "destination.port", + "ignore_missing": true + } + }, + { + "lowercase": { + "field": "suricata.eve.http.http_method", + "target_field": "http.request.method", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.http.status", + "target_field": "http.response.status_code", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.http.hostname", + "target_field": "destination.domain", + "ignore_missing": true + } + }, + { + "set": { + "field": "url.domain", + "value": "{{destination.domain}}", + "if": "ctx?.destination?.domain != null" + } + }, + { + "grok": { + "field": "suricata.eve.http.url", + "patterns": [ + "%{PATH:url.path}(?:\\?%{QUERY:url.query})?(?:#%{ANY:url.fragment})?" + ], + "ignore_missing": true, + "pattern_definitions": { + "PATH": "[^?#]*", + "QUERY": "[^#]*", + "ANY": ".*" + } + } + }, + { + "rename": { + "field": "suricata.eve.http.url", + "target_field": "url.original", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.http.http_refer", + "target_field": "http.request.referrer", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.http.length", + "target_field": "http.response.body.bytes", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.fileinfo.filename", + "target_field": "file.path", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.fileinfo.size", + "target_field": "file.size", + "ignore_missing": true + } + }, + { + "date": { + "field": "suricata.eve.timestamp", + "target_field": "@timestamp", + "formats": [ + "ISO8601" + ] + } + }, + { + "lowercase": { + "field": "suricata.eve.event_type", + "target_field": "event.type", + "ignore_missing": true + } + }, + { + "convert": { + "field": "suricata.eve.alert.category", + "target_field": "message", + "type": "string", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.alert.action", + "target_field": "event.outcome", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.alert.severity", + "target_field": "event.severity", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.flow.pkts_toclient", + "target_field": "destination.packets", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.flow.pkts_toserver", + "target_field": "source.packets", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.flow.bytes_toclient", + "target_field": "destination.bytes", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.flow.bytes_toserver", + "target_field": "source.bytes", + "ignore_missing": true + } + }, + { + "script": { + "lang": "painless", + "source": "long getOrZero(def map, def key) { if(map!=null && map[key]!=null) { return map[key]; } return 0; } def network=ctx['network'], source=ctx['source'], dest=ctx['destination']; def sp=getOrZero(source,'packets'), sb=getOrZero(source,'bytes'), dp=getOrZero(dest,'packets'), db=getOrZero(dest,'bytes'); if(sb+db+sp+dp > 0){if (network==null){network=new HashMap(); ctx['network']=network; } if(sb+db>0) network['bytes'] = sb+db; if(sp+dp>0) network['packets'] = sp+dp; }" + } + }, + { + "date": { + "field": "suricata.eve.flow.start", + "target_field": "event.start", + "formats": [ + "ISO8601" + ], + "ignore_failure": true + } + }, + { + "set": { + "field": "event.end", + "value": "{{@timestamp}}" + } + }, + { + "script": { + "lang": "painless", + "source": "Instant ins(def d){try{return Instant.parse(d);}catch(Exception e){return null;}}def ev=ctx['event'];if(ev!=null){def start=ins(ev['start']); def end=ins(ev['end']); if(start!=null && end!=null && !start.isAfter(end)) {ev['duration'] = Duration.between(start,end).toNanos();}}" + } + }, + { + "lowercase": { + "field": "suricata.eve.proto", + "target_field": "network.transport", + "ignore_missing": true + } + }, + { + "lowercase": { + "field": "suricata.eve.app_proto", + "target_field": "network.protocol", + "ignore_missing": true + } + }, + { + "user_agent": { + "field": "suricata.eve.http.http_user_agent", + "ignore_missing": true + } + }, + { + "rename": { + "field": "suricata.eve.http.http_user_agent", + "target_field": "user_agent.original", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.os", + "target_field": "user_agent.temp_os", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.temp_os", + "target_field": "user_agent.os.full_name", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.os_name", + "target_field": "user_agent.os.name", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.os_version", + "target_field": "user_agent.os.version", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.os_major", + "target_field": "user_agent.os.major", + "ignore_missing": true + } + }, + { + "rename": { + "field": "user_agent.os_minor", + "target_field": "user_agent.os.minor", + "ignore_missing": true + } + }, + { + "geoip": { + "field": "source.ip", + "target_field": "source.geo", + "ignore_missing": true + } + }, + { + "geoip": { + "field": "destination.ip", + "target_field": "destination.geo", + "ignore_missing": true + } + }, + { + "remove": { + "field": [ + "suricata.eve.app_proto", + "suricata.eve.event_type", + "suricata.eve.flow.end", + "suricata.eve.flow.start", + "suricata.eve.http.http_method", + "suricata.eve.proto", + "suricata.eve.timestamp" + ], + "ignore_missing": true + } } - } - } - , {"convert": - {"field": "suricata.eve.http.hostname" - ,"target_field": "destination.domain" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.http.http_refer" - ,"target_field": "http.request.referrer" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.http.length" - ,"target_field": "http.response.body.bytes" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.fileinfo.filename" - ,"target_field": "file.path" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.fileinfo.size" - ,"target_field": "file.size" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.http.http_user_agent" - ,"target_field": "user_agent.original" - ,"type": "string" - ,"ignore_missing": true - } - } - - , { "date": - { "field": "suricata.eve.timestamp" - , "target_field": "@timestamp" - , "formats": ["ISO8601"] - } - } - , {"remove": - {"field": "suricata.eve.timestamp" - } - } - , { "lowercase": - { "field": "suricata.eve.event_type" - , "target_field": "event.type" - , "ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.alert.category" - ,"target_field": "message" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.alert.action" - ,"target_field": "event.outcome" - ,"type": "string" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.alert.severity" - ,"target_field": "event.severity" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.flow.pkts_toclient" - ,"target_field": "destination.packets" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.flow.pkts_toserver" - ,"target_field": "source.packets" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.flow.bytes_toclient" - ,"target_field": "destination.bytes" - ,"type": "integer" - ,"ignore_missing": true - } - } - , {"convert": - {"field": "suricata.eve.flow.bytes_toserver" - ,"target_field": "source.bytes" - ,"type": "integer" - ,"ignore_missing": true - } - } - , { "script": - { "lang": "painless" - , "source": "long getOrZero(def map, def key) { if(map!=null && map[key]!=null) { return map[key]; } return 0; } def network=ctx['network'], source=ctx['source'], dest=ctx['destination']; def sp=getOrZero(source,'packets'), sb=getOrZero(source,'bytes'), dp=getOrZero(dest,'packets'), db=getOrZero(dest,'bytes'); if(sb+db+sp+dp > 0){if (network==null){network=new HashMap(); ctx['network']=network; } if(sb+db>0) network['bytes'] = sb+db; if(sp+dp>0) network['packets'] = sp+dp; }" - } - } - , {"date": - {"field": "suricata.eve.flow.start" - ,"target_field": "event.start" - ,"formats": ["ISO8601"] - ,"ignore_failure": true - } - } - , {"remove": - {"field": "suricata.eve.flow.start" - ,"ignore_missing": true - } - } - , {"remove": - {"field": "suricata.eve.flow.end" - ,"ignore_missing": true - } - } - , {"set": - {"field": "event.end" - ,"value": "{{@timestamp}}" - } - } - , { "script": - { "lang": "painless" - , "source": "Instant ins(def d){try{return Instant.parse(d);}catch(Exception e){return null;}}def ev=ctx['event'];if(ev!=null){def start=ins(ev['start']); def end=ins(ev['end']); if(start!=null && end!=null && !start.isAfter(end)) {ev['duration'] = Duration.between(start,end).toNanos();}}" - } - } - , { "lowercase": - { "field": "suricata.eve.proto" - , "target_field": "network.transport" - , "ignore_missing": true - } - } - , { "lowercase": - { "field": "suricata.eve.app_proto" - , "target_field": "network.protocol" - , "ignore_missing": true - } - } - , { "user_agent": - { "field": "user_agent.original" - , "target_field": "user_agent" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.os" - , "target_field": "user_agent.temp_os" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.temp_os" - , "target_field": "user_agent.os.full_name" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.os_name" - , "target_field": "user_agent.os.name" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.os_version" - , "target_field": "user_agent.os.version" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.os_major" - , "target_field": "user_agent.os.major" - , "ignore_missing": true - } - } - , { "rename": - { "field": "user_agent.os_minor" - , "target_field": "user_agent.os.minor" - , "ignore_missing": true - } - } - - , { "geoip": - { "field": "source.ip" - , "target_field": "source.geo" - , "ignore_missing": true - } - } - , { "geoip": - { "field": "destination.ip" - , "target_field": "destination.geo" - , "ignore_missing": true - } - } - - ] -, "on_failure": - [ { "set" : - { "field" : "error.message" - , "value" : "{{ _ingest.on_failure_message }}" - } - } - ] + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] } diff --git a/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json b/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json index 46371b017d55..e6ee641b6be8 100644 --- a/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json +++ b/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json @@ -25,7 +25,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1121, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 0, "message": "Attempted Information Leak", @@ -38,44 +38,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32858, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 2191386088856669, - "suricata.eve.http.hostname": "example.net", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1121, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32858, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.net", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -106,7 +89,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1121, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 723, "message": "Attempted Information Leak", @@ -119,44 +102,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32864, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 678269478904081, - "suricata.eve.http.hostname": "example.net", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1121, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32864, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.net", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -187,7 +153,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1126, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 1445, "message": "Attempted Information Leak", @@ -200,44 +166,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32870, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 1170030461115650, - "suricata.eve.http.hostname": "example.net", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1126, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32870, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.net", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -268,7 +217,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1121, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 2168, "message": "Attempted Information Leak", @@ -281,44 +230,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32872, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 49628113637132, - "suricata.eve.http.hostname": "example.org", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1121, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32872, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.org", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -349,7 +281,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1121, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 2889, "message": "Attempted Information Leak", @@ -362,44 +294,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32876, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 116307482565223, - "suricata.eve.http.hostname": "example.org", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1121, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32876, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.org", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -430,7 +345,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1126, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 3611, "message": "Attempted Information Leak", @@ -443,44 +358,27 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 32892, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Attempted Information Leak", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 4, - "suricata.eve.alert.severity": 2, "suricata.eve.alert.signature": "ET POLICY curl User-Agent Outbound", "suricata.eve.alert.signature_id": 2013028, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "93.184.216.34", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 347, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 1205867738178946, - "suricata.eve.http.hostname": "example.org", "suricata.eve.http.http_content_type": "text/html", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "curl/7.58.0", - "suricata.eve.http.length": 1126, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 32892, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "example.org", + "url.original": "/", "url.path": "/", "user_agent.device": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", + "user_agent.original": "curl/7.58.0", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", "user_agent.patch": "0" @@ -511,7 +409,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1138, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 4334, "message": "Not Suspicious Traffic", @@ -524,43 +422,26 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 37742, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.88.152", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1654, - "suricata.eve.flow.bytes_toserver": 497, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 764842923400056, - "suricata.eve.http.hostname": "security.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 1138, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-security/InRelease", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 37742, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "security.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-security/InRelease", "url.path": "/ubuntu/dists/bionic-security/InRelease", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -590,7 +471,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 0, - "http.response.status_code": "304", + "http.response.status_code": 304, "input.type": "log", "log.offset": 5140, "message": "Not Suspicious Traffic", @@ -603,43 +484,26 @@ "source.ip": "192.168.1.146", "source.packets": 4, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 417, - "suricata.eve.flow.bytes_toserver": 487, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 0, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 304, - "suricata.eve.http.url": "/ubuntu/dists/bionic/InRelease", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic/InRelease", "url.path": "/ubuntu/dists/bionic/InRelease", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -669,7 +533,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2601, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 5931, "message": "Not Suspicious Traffic", @@ -682,43 +546,26 @@ "source.ip": "192.168.1.146", "source.packets": 6, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 3445, - "suricata.eve.flow.bytes_toserver": 842, - "suricata.eve.flow.pkts_toclient": 5, - "suricata.eve.flow.pkts_toserver": 6, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2601, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/InRelease", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 1, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/InRelease", "url.path": "/ubuntu/dists/bionic-updates/InRelease", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -748,7 +595,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1241, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 6734, "message": "Not Suspicious Traffic", @@ -761,43 +608,26 @@ "source.ip": "192.168.1.146", "source.packets": 64, "source.port": 37742, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.88.152", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 90543, - "suricata.eve.flow.bytes_toserver": 4810, - "suricata.eve.flow.pkts_toclient": 62, - "suricata.eve.flow.pkts_toserver": 64, "suricata.eve.flow_id": 764842923400056, - "suricata.eve.http.hostname": "security.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 1241, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-security/main/source/by-hash/SHA256/f5ec03d97ca76c98162d9233c8b7c578c52897e2136428277baf2e7b633a8e72", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 37742, "suricata.eve.tx_id": 1, "tags": [ "suricata" ], "url.domain": "security.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-security/main/source/by-hash/SHA256/f5ec03d97ca76c98162d9233c8b7c578c52897e2136428277baf2e7b633a8e72", "url.path": "/ubuntu/dists/bionic-security/main/source/by-hash/SHA256/f5ec03d97ca76c98162d9233c8b7c578c52897e2136428277baf2e7b633a8e72", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -827,7 +657,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2687, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 7630, "message": "Not Suspicious Traffic", @@ -840,43 +670,26 @@ "source.ip": "192.168.1.146", "source.packets": 87, "source.port": 37742, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.88.152", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 145014, - "suricata.eve.flow.bytes_toserver": 6591, - "suricata.eve.flow.pkts_toclient": 98, - "suricata.eve.flow.pkts_toserver": 87, "suricata.eve.flow_id": 764842923400056, - "suricata.eve.http.hostname": "security.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2687, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-security/main/binary-amd64/by-hash/SHA256/c5b8346a3221bc9a23a79ba4dc4e730a6319a77fc9d63872dfc56539a0810015", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 37742, "suricata.eve.tx_id": 2, "tags": [ "suricata" ], "url.domain": "security.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-security/main/binary-amd64/by-hash/SHA256/c5b8346a3221bc9a23a79ba4dc4e730a6319a77fc9d63872dfc56539a0810015", "url.path": "/ubuntu/dists/bionic-security/main/binary-amd64/by-hash/SHA256/c5b8346a3221bc9a23a79ba4dc4e730a6319a77fc9d63872dfc56539a0810015", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -906,7 +719,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2688, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 8533, "message": "Not Suspicious Traffic", @@ -919,43 +732,26 @@ "source.ip": "192.168.1.146", "source.packets": 156, "source.port": 37742, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.88.152", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 330525, - "suricata.eve.flow.bytes_toserver": 11460, - "suricata.eve.flow.pkts_toclient": 221, - "suricata.eve.flow.pkts_toserver": 156, "suricata.eve.flow_id": 764842923400056, - "suricata.eve.http.hostname": "security.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2688, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-security/universe/binary-amd64/by-hash/SHA256/e5cc957139a25a0fee47cbf2c0fac8ad5cab50346d6a74abe031748924c5b558", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 37742, "suricata.eve.tx_id": 3, "tags": [ "suricata" ], "url.domain": "security.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-security/universe/binary-amd64/by-hash/SHA256/e5cc957139a25a0fee47cbf2c0fac8ad5cab50346d6a74abe031748924c5b558", "url.path": "/ubuntu/dists/bionic-security/universe/binary-amd64/by-hash/SHA256/e5cc957139a25a0fee47cbf2c0fac8ad5cab50346d6a74abe031748924c5b558", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -985,7 +781,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2601, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 9443, "message": "Not Suspicious Traffic", @@ -998,43 +794,26 @@ "source.ip": "192.168.1.146", "source.packets": 64, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 96554, - "suricata.eve.flow.bytes_toserver": 4895, - "suricata.eve.flow.pkts_toclient": 67, - "suricata.eve.flow.pkts_toserver": 64, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2601, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-backports/InRelease", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 2, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-backports/InRelease", "url.path": "/ubuntu/dists/bionic-backports/InRelease", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1064,7 +843,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2687, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 10252, "message": "Not Suspicious Traffic", @@ -1077,43 +856,26 @@ "source.ip": "192.168.1.146", "source.packets": 91, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 174843, - "suricata.eve.flow.bytes_toserver": 6932, - "suricata.eve.flow.pkts_toclient": 119, - "suricata.eve.flow.pkts_toserver": 91, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2687, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/main/source/by-hash/SHA256/65f2e3a4e9d89d9d4b5e3d42e586bc96f48a24466b0ad0b4a707255e44a26b03", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 3, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/main/source/by-hash/SHA256/65f2e3a4e9d89d9d4b5e3d42e586bc96f48a24466b0ad0b4a707255e44a26b03", "url.path": "/ubuntu/dists/bionic-updates/main/source/by-hash/SHA256/65f2e3a4e9d89d9d4b5e3d42e586bc96f48a24466b0ad0b4a707255e44a26b03", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1143,7 +905,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2688, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 11147, "message": "Not Suspicious Traffic", @@ -1156,43 +918,26 @@ "source.ip": "192.168.1.146", "source.packets": 159, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 376452, - "suricata.eve.flow.bytes_toserver": 11679, - "suricata.eve.flow.pkts_toclient": 253, - "suricata.eve.flow.pkts_toserver": 159, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2688, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/universe/source/by-hash/SHA256/56cfd9cc2efa61dff7428dddf921c3cd6047ab8e6484a7f1888e4c3f7252f1ef", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 4, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/universe/source/by-hash/SHA256/56cfd9cc2efa61dff7428dddf921c3cd6047ab8e6484a7f1888e4c3f7252f1ef", "url.path": "/ubuntu/dists/bionic-updates/universe/source/by-hash/SHA256/56cfd9cc2efa61dff7428dddf921c3cd6047ab8e6484a7f1888e4c3f7252f1ef", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1222,7 +967,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2687, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 12048, "message": "Not Suspicious Traffic", @@ -1235,43 +980,26 @@ "source.ip": "192.168.1.146", "source.packets": 190, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 468170, - "suricata.eve.flow.bytes_toserver": 13986, - "suricata.eve.flow.pkts_toclient": 314, - "suricata.eve.flow.pkts_toserver": 190, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2687, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/main/binary-amd64/by-hash/SHA256/4360137dc8f98b47648da1fef5472ef234fb02115bc2b29873bcaeee62637e70", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 5, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/main/binary-amd64/by-hash/SHA256/4360137dc8f98b47648da1fef5472ef234fb02115bc2b29873bcaeee62637e70", "url.path": "/ubuntu/dists/bionic-updates/main/binary-amd64/by-hash/SHA256/4360137dc8f98b47648da1fef5472ef234fb02115bc2b29873bcaeee62637e70", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1301,7 +1029,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2691, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 12951, "message": "Not Suspicious Traffic", @@ -1314,43 +1042,26 @@ "source.ip": "192.168.1.146", "source.packets": 328, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 880323, - "suricata.eve.flow.bytes_toserver": 23361, - "suricata.eve.flow.pkts_toclient": 588, - "suricata.eve.flow.pkts_toserver": 328, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2691, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/restricted/binary-amd64/by-hash/SHA256/c93fdc7f10cad1263349fd7b5bdd6a7f7163165b96ad263b3e12022e319d0d12", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 6, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/restricted/binary-amd64/by-hash/SHA256/c93fdc7f10cad1263349fd7b5bdd6a7f7163165b96ad263b3e12022e319d0d12", "url.path": "/ubuntu/dists/bionic-updates/restricted/binary-amd64/by-hash/SHA256/c93fdc7f10cad1263349fd7b5bdd6a7f7163165b96ad263b3e12022e319d0d12", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1380,7 +1091,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 2687, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 13860, "message": "Not Suspicious Traffic", @@ -1393,43 +1104,26 @@ "source.ip": "192.168.1.146", "source.packets": 330, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 884342, - "suricata.eve.flow.bytes_toserver": 23758, - "suricata.eve.flow.pkts_toclient": 591, - "suricata.eve.flow.pkts_toserver": 330, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 2687, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/universe/binary-amd64/by-hash/SHA256/5190f7afbee38b3cb32225db478fdbabd46f76eaa9c5921a13091891bf3e9bbc", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 7, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/universe/binary-amd64/by-hash/SHA256/5190f7afbee38b3cb32225db478fdbabd46f76eaa9c5921a13091891bf3e9bbc", "url.path": "/ubuntu/dists/bionic-updates/universe/binary-amd64/by-hash/SHA256/5190f7afbee38b3cb32225db478fdbabd46f76eaa9c5921a13091891bf3e9bbc", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1471,42 +1165,26 @@ "source.ip": "192.168.1.146", "source.packets": 524, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1467603, - "suricata.eve.flow.bytes_toserver": 36819, - "suricata.eve.flow.pkts_toclient": 979, - "suricata.eve.flow.pkts_toserver": 524, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 0, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/universe/i18n/by-hash/SHA256/9fe539b7036e51327cd85ca5e0a4dd4eb47f69168875de2ac9842a5e36ebd4a4", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 8, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/universe/i18n/by-hash/SHA256/9fe539b7036e51327cd85ca5e0a4dd4eb47f69168875de2ac9842a5e36ebd4a4", "url.path": "/ubuntu/dists/bionic-updates/universe/i18n/by-hash/SHA256/9fe539b7036e51327cd85ca5e0a4dd4eb47f69168875de2ac9842a5e36ebd4a4", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" }, @@ -1548,42 +1226,26 @@ "source.ip": "192.168.1.146", "source.packets": 575, "source.port": 52340, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Not Suspicious Traffic", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 5, - "suricata.eve.alert.severity": 3, "suricata.eve.alert.signature": "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management", "suricata.eve.alert.signature_id": 2013504, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "91.189.91.23", - "suricata.eve.dest_port": 80, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 1618380, - "suricata.eve.flow.bytes_toserver": 40452, - "suricata.eve.flow.pkts_toclient": 1079, - "suricata.eve.flow.pkts_toserver": 575, "suricata.eve.flow_id": 112424506237238, - "suricata.eve.http.hostname": "archive.ubuntu.com", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", - "suricata.eve.http.length": 0, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.url": "/ubuntu/dists/bionic-updates/multiverse/binary-amd64/by-hash/SHA256/8ab8cb220c0e50521c589acc2bc2b43a3121210f0b035a0605972bcffd73dd16", "suricata.eve.in_iface": "enp0s3", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.1.146", - "suricata.eve.src_port": 52340, "suricata.eve.tx_id": 9, "tags": [ "suricata" ], "url.domain": "archive.ubuntu.com", + "url.original": "/ubuntu/dists/bionic-updates/multiverse/binary-amd64/by-hash/SHA256/8ab8cb220c0e50521c589acc2bc2b43a3121210f0b035a0605972bcffd73dd16", "url.path": "/ubuntu/dists/bionic-updates/multiverse/binary-amd64/by-hash/SHA256/8ab8cb220c0e50521c589acc2bc2b43a3121210f0b035a0605972bcffd73dd16", "user_agent.device": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", + "user_agent.original": "Debian APT-HTTP/1.3 (1.6.3ubuntu0.1)", "user_agent.os.full_name": "Debian", "user_agent.os.name": "Debian" } diff --git a/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json b/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json index 5e648f23e626..c86a704ba849 100644 --- a/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json +++ b/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json @@ -15,14 +15,8 @@ "service.type": "suricata", "source.ip": "192.168.86.85", "source.port": 55406, - "suricata.eve.dest_ip": "192.168.253.112", - "suricata.eve.dest_port": 22, - "suricata.eve.event_type": "ssh", "suricata.eve.flow_id": 298824096901438, "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.86.85", - "suricata.eve.src_port": 55406, "suricata.eve.ssh.client.proto_version": "2.0", "suricata.eve.ssh.client.software_version": "OpenSSH_7.6", "suricata.eve.ssh.server.proto_version": "2.0", @@ -59,26 +53,13 @@ "source.ip": "192.168.86.85", "source.packets": 4, "source.port": 55641, - "suricata.eve.alert.action": "allowed", "suricata.eve.alert.category": "Potential Corporate Privacy Violation", "suricata.eve.alert.gid": 1, "suricata.eve.alert.rev": 3, - "suricata.eve.alert.severity": 1, "suricata.eve.alert.signature": "ET POLICY Observed IP Lookup Domain (l2 .io in TLS SNI)", "suricata.eve.alert.signature_id": 2024833, - "suricata.eve.app_proto": "tls", - "suricata.eve.dest_ip": "192.168.156.70", - "suricata.eve.dest_port": 443, - "suricata.eve.event_type": "alert", - "suricata.eve.flow.bytes_toclient": 343, - "suricata.eve.flow.bytes_toserver": 793, - "suricata.eve.flow.pkts_toclient": 3, - "suricata.eve.flow.pkts_toserver": 4, "suricata.eve.flow_id": 904992230150281, "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.86.85", - "suricata.eve.src_port": 55641, "suricata.eve.tls.session_resumed": true, "suricata.eve.tls.sni": "l2.io", "suricata.eve.tls.version": "TLS 1.2", @@ -100,39 +81,29 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1155, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 985, "network.transport": "tcp", "service.type": "suricata", "source.ip": "192.168.86.85", "source.port": 56119, - "suricata.eve.dest_ip": "192.168.86.28", - "suricata.eve.dest_port": 63963, - "suricata.eve.event_type": "http", "suricata.eve.flow_id": 2115002772430095, - "suricata.eve.http.hostname": "192.168.86.28", "suricata.eve.http.http_content_type": "text/xml", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", - "suricata.eve.http.length": 1155, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/dd.xml", "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.86.85", - "suricata.eve.src_port": 56119, "suricata.eve.tx_id": 0, "tags": [ "suricata" ], "url.domain": "192.168.86.28", + "url.original": "/dd.xml", "url.path": "/dd.xml", "user_agent.device": "Other", "user_agent.major": "67", "user_agent.minor": "0", "user_agent.name": "Chrome", + "user_agent.original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", "user_agent.os.full_name": "Mac OS X 10.13.5", "user_agent.os.major": "10", "user_agent.os.minor": "13", @@ -154,7 +125,7 @@ "fileset.name": "eve", "http.request.method": "get", "http.response.body.bytes": 1071, - "http.response.status_code": "200", + "http.response.status_code": 200, "input.type": "log", "log.offset": 1507, "network.protocol": "http", @@ -162,41 +133,28 @@ "service.type": "suricata", "source.ip": "192.168.86.28", "source.port": 8008, - "suricata.eve.app_proto": "http", - "suricata.eve.dest_ip": "192.168.86.85", - "suricata.eve.dest_port": 56118, - "suricata.eve.event_type": "fileinfo", - "suricata.eve.fileinfo.filename": "/ssdp/device-desc.xml", "suricata.eve.fileinfo.gaps": false, "suricata.eve.fileinfo.md5": "427b7337ff37eeb24d74f47d8e04cf21", "suricata.eve.fileinfo.sha1": "313573490192c685e9e53abef25453ed0d5e2aee", "suricata.eve.fileinfo.sha256": "f610428ebddf6f8cf9e39322e672583c45fcdcf885efad0ab48fd53a3dfc2c4b", - "suricata.eve.fileinfo.size": 1071, "suricata.eve.fileinfo.state": "CLOSED", "suricata.eve.fileinfo.stored": false, "suricata.eve.fileinfo.tx_id": 0, "suricata.eve.flow_id": 2211411903323127, - "suricata.eve.http.hostname": "192.168.86.28", "suricata.eve.http.http_content_type": "application/xml", - "suricata.eve.http.http_method": "GET", - "suricata.eve.http.http_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", - "suricata.eve.http.length": 1071, "suricata.eve.http.protocol": "HTTP/1.1", - "suricata.eve.http.status": 200, - "suricata.eve.http.url": "/ssdp/device-desc.xml", "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.86.28", - "suricata.eve.src_port": 8008, "tags": [ "suricata" ], "url.domain": "192.168.86.28", + "url.original": "/ssdp/device-desc.xml", "url.path": "/ssdp/device-desc.xml", "user_agent.device": "Other", "user_agent.major": "67", "user_agent.minor": "0", "user_agent.name": "Chrome", + "user_agent.original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", "user_agent.os.full_name": "Mac OS X 10.13.5", "user_agent.os.major": "10", "user_agent.os.minor": "13", @@ -219,8 +177,6 @@ "service.type": "suricata", "source.ip": "192.168.86.1", "source.port": 53, - "suricata.eve.dest_ip": "192.168.86.85", - "suricata.eve.dest_port": 39464, "suricata.eve.dns.id": 12308, "suricata.eve.dns.rcode": "NOERROR", "suricata.eve.dns.rdata": "172.217.13.110", @@ -228,12 +184,8 @@ "suricata.eve.dns.rrtype": "A", "suricata.eve.dns.ttl": 299, "suricata.eve.dns.type": "answer", - "suricata.eve.event_type": "dns", "suricata.eve.flow_id": 1684780223079543, "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "UDP", - "suricata.eve.src_ip": "192.168.86.1", - "suricata.eve.src_port": 53, "tags": [ "suricata" ] @@ -249,7 +201,6 @@ "input.type": "log", "log.offset": 2687, "service.type": "suricata", - "suricata.eve.event_type": "stats", "suricata.eve.stats.app_layer.flow.dcerpc_tcp": 0, "suricata.eve.stats.app_layer.flow.dcerpc_udp": 0, "suricata.eve.stats.app_layer.flow.dns_tcp": 0, @@ -390,14 +341,8 @@ "service.type": "suricata", "source.ip": "192.168.86.85", "source.port": 56187, - "suricata.eve.dest_ip": "17.142.164.13", - "suricata.eve.dest_port": 443, - "suricata.eve.event_type": "tls", "suricata.eve.flow_id": 89751777876473, "suricata.eve.in_iface": "en0", - "suricata.eve.proto": "TCP", - "suricata.eve.src_ip": "192.168.86.85", - "suricata.eve.src_port": 56187, "suricata.eve.tls.fingerprint": "6a:ff:ac:a6:5f:8a:05:e7:a9:8c:76:29:b9:08:c7:69:ad:dc:72:47", "suricata.eve.tls.issuerdn": "CN=Apple IST CA 2 - G1/OU=Certification Authority/O=Apple Inc./C=US", "suricata.eve.tls.notafter": "2019-03-29T17:54:31", @@ -435,22 +380,11 @@ "source.ip": "fe80:0000:0000:0000:fada:0cff:fedc:87f1", "source.packets": 1, "source.port": 546, - "suricata.eve.app_proto": "failed", - "suricata.eve.dest_ip": "ff02:0000:0000:0000:0000:0000:0001:0002", - "suricata.eve.dest_port": 547, - "suricata.eve.event_type": "flow", "suricata.eve.flow.age": 0, "suricata.eve.flow.alerted": false, - "suricata.eve.flow.bytes_toclient": 0, - "suricata.eve.flow.bytes_toserver": 110, - "suricata.eve.flow.pkts_toclient": 0, - "suricata.eve.flow.pkts_toserver": 1, "suricata.eve.flow.reason": "timeout", "suricata.eve.flow.state": "new", "suricata.eve.flow_id": 1828507008887644, - "suricata.eve.proto": "UDP", - "suricata.eve.src_ip": "fe80:0000:0000:0000:fada:0cff:fedc:87f1", - "suricata.eve.src_port": 546, "tags": [ "suricata" ] diff --git a/x-pack/filebeat/module/suricata/fields.go b/x-pack/filebeat/module/suricata/fields.go index 35e16147a4ad..66e8b7e5c759 100644 --- a/x-pack/filebeat/module/suricata/fields.go +++ b/x-pack/filebeat/module/suricata/fields.go @@ -19,5 +19,5 @@ func init() { // AssetSuricata returns asset data. // This is the base64 encoded gzipped contents of module/suricata. func AssetSuricata() string { - return "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" + return "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" } From b96936ec44181dc6eaf130fb99b956e868583e15 Mon Sep 17 00:00:00 2001 From: Andrew Kroh Date: Tue, 29 Jan 2019 14:53:35 -0500 Subject: [PATCH 12/66] Use packages from x-pack/metricbeat (#10396) This changes the metricbeat/ build do not create Elastic licensed packages any longer because those are being build from x-pack/metricbeat. --- Makefile | 4 ++-- metricbeat/magefile.go | 9 ++------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 9d7122784cb5..257c92ed9043 100644 --- a/Makefile +++ b/Makefile @@ -16,12 +16,12 @@ XPACK_SUFFIX=x-pack/ # PROJECTS_XPACK_PKG is a list of Beats that have independent packaging support # in the x-pack directory (rather than having the OSS build produce both sets # of artifacts). This will be removed once we complete the transition. -PROJECTS_XPACK_PKG=x-pack/auditbeat x-pack/filebeat +PROJECTS_XPACK_PKG=x-pack/auditbeat x-pack/filebeat x-pack/metricbeat # PROJECTS_XPACK_MAGE is a list of Beats whose primary build logic is based in # Mage. For compatibility with CI testing these projects support a subset of the # makefile targets. After all Beats converge to primarily using Mage we can # remove this and treat all sub-projects the same. -PROJECTS_XPACK_MAGE=x-pack/metricbeat $(PROJECTS_XPACK_PKG) +PROJECTS_XPACK_MAGE=$(PROJECTS_XPACK_PKG) # # Includes diff --git a/metricbeat/magefile.go b/metricbeat/magefile.go index 981a681f465a..39de5fa4704b 100644 --- a/metricbeat/magefile.go +++ b/metricbeat/magefile.go @@ -47,11 +47,6 @@ func GolangCrossBuild() error { return mage.GolangCrossBuild(mage.DefaultGolangCrossBuildArgs()) } -// CrossBuildXPack cross-builds the beat with XPack for all target platforms. -func CrossBuildXPack() error { - return mage.CrossBuildXPack() -} - // BuildGoDaemon builds the go-daemon binary (use crossBuildGoDaemon). func BuildGoDaemon() error { return mage.BuildGoDaemon() @@ -80,11 +75,11 @@ func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() - mage.UseElasticBeatPackaging() + mage.UseElasticBeatOSSPackaging() customizePackaging() mg.Deps(Update) - mg.Deps(CrossBuild, CrossBuildXPack, CrossBuildGoDaemon) + mg.Deps(CrossBuild, CrossBuildGoDaemon) mg.SerialDeps(mage.Package, TestPackages) } From f6dbd524e36552d982521af232cb5c55c4430227 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 21:00:12 +0100 Subject: [PATCH 13/66] [Filebeat] Change type from haproxy.log fileset fields from text to keyword (#10397) Fields changed: - response.captured_headers - request.captured_headers - raw_request_line - mode --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 8 ++++---- filebeat/module/haproxy/_meta/fields.yml | 2 +- filebeat/module/haproxy/fields.go | 2 +- filebeat/module/haproxy/log/_meta/fields.yml | 6 +++--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 8f14d413fd1f..878d44724b65 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -58,6 +58,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d including `http.response.elapsed_time` (ECS). {pull}10188[10188], {pull}10274[10274] - Rename multiple fields to `http.response.body.bytes`, from modules "apache", "iis", "kibana", "nginx" and "traefik", including `http.response.content_length` (ECS). {pull}10188[10188] +- Change type from haproxy.log fileset fields from text to keyword: response.captured_headers, request.captured_headers, `raw_request_line`, `mode`. {pull}10397[10397] - Change type of field backend_url and frontend_name in traefik.access metricset to type keyword. {pull}10401[10401] - Ingesting Elasticsearch audit logs is only supported with Elasticsearch 6.5.0 and above {pull}10352[10352] - Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 018e01e5f724..6e2229b6af82 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4694,7 +4694,7 @@ Condition the session was in when the session ended. *`haproxy.mode`*:: + -- -type: text +type: keyword mode that the frontend is operating (TCP or HTTP) @@ -4901,7 +4901,7 @@ Optional "name=value" entry indicating that the client had this cookie in the re *`haproxy.http.response.captured_headers`*:: + -- -type: text +type: keyword List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. @@ -4934,7 +4934,7 @@ Optional "name=value" entry indicating that the server has returned a cookie wit *`haproxy.http.request.captured_headers`*:: + -- -type: text +type: keyword List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. @@ -4944,7 +4944,7 @@ List of headers captured in the request due to the presence of the "capture requ *`haproxy.http.request.raw_request_line`*:: + -- -type: text +type: keyword Complete HTTP request line, including the method, request and HTTP version string. diff --git a/filebeat/module/haproxy/_meta/fields.yml b/filebeat/module/haproxy/_meta/fields.yml index 674d20f29be8..7f4f038393f1 100644 --- a/filebeat/module/haproxy/_meta/fields.yml +++ b/filebeat/module/haproxy/_meta/fields.yml @@ -60,7 +60,7 @@ description: Condition the session was in when the session ended. - name: mode - type: text + type: keyword description: mode that the frontend is operating (TCP or HTTP) - name: connections diff --git a/filebeat/module/haproxy/fields.go b/filebeat/module/haproxy/fields.go index c541a242e12a..861f38444353 100644 --- a/filebeat/module/haproxy/fields.go +++ b/filebeat/module/haproxy/fields.go @@ -32,5 +32,5 @@ func init() { // AssetHaproxy returns asset data. // This is the base64 encoded gzipped contents of module/haproxy. func AssetHaproxy() string { - return "eJzMWc2O2zYQvu9TDPbSBEj8AAs0QLFNmwBtsoe9G2NyLBGhSIUc7cZvX/BHsn5ta9dB6pslzszH+fk4Q72Hb3S4gxJrZ38cbgBYsaY7uM1Pbm8AJHnhVM3Kmjv4cAMA7Xr418pG0w3AXpGW/i6+fA8GK+orDT8+1HQHhbNNnZ/M6D0qyn+P2vbOGiYjt+Fv93ak5QtWBHYPXFInAG+sA608kyH3Fp5LJUpwJEg9kQQ0EmpnBXlPMsoJawyJoG8zRbFD8W0NiLx+FsMzevCkSXCwbKFCgwWNMIQX4Ykn90RuBlF6cTEgjZ6zTFCdkIxMJmCGZ6yxZdTbZ1SsTLFlVdG28kt2H8NiCItAGaiU1sqTsEZ68DUZhqwnvA0QntAp23j43lBDfa0pd7Q1xRTREXeEdTVMe+tmQkGecaeVL9u47JVBnR16IeLdgclvHaE8DdI01Y5cCFyUAHZofKU4p0sEp1XEXFLyoLYFKA+UVm0uBBRdFp3+cyK5CkdbYdnvvyKO70AZoRsZxB2xU5dvIVfjBc48RtfR94Y8+5YWyFGPkna0ty6wgvJgDbUeziUcDV0KrnXtz0eXLf3modB2h3olTrWCYROrhlChlI68HzP8WU4n56zbVuQ9FosmP4ZFkBeFOivC7g/w6Y+HeBIqAwJ9RBX1TffK9INnEsY2TtD84qUIldSZTeKdL+xcVZGrlMHIkJ6RF7d4b41UqUBignnfHgbKHCmmfU5GBoaZmKusXLedIABcIg9P7ZBQNTmMRfzm8f4BrINPj48Pb0+dAYu8f28NozK+oyZhG8M+eK4nDShYPXVpnPN8Gst+GwMwbH/G4JLKwaszJSesEY1zgcX62OwA1DQiIVIpMTcja3PFBjO91fVAdmG8IspMKlcAWaKROtVvv0m7ItZJQ/BSqJ6V1m1a2gH3XxFuPuVO4f3SR9qepFkO6EdNTpERrVOVP6KKMN0h1DHbVnrc157H2xV77HmW6vyz2VtXRbYD3NmG+32StBFESe2p9oLCbmGo+maKGLXCoRdr5LJl+U0+oQYLKlU4TNjZDY7l1lJtHa+3NZEaG5o4NhPL+OSdt5ZstQQ5EjlvSsmVFoYSZw1I8pwPvaVM+fO4BNQxa16REisD1cN4PlpTa6sSsG9rJHjWlwXZgci8W2an+fTrzt6/yX5+6DsbCuSSXGANDO1kJrhUrhtVJ2cP2eGr0QeoHYUJFVRqfJLij2G4VcITOlFCrZtCmdBH4BMqjTtNYdof6Gr8kCtPnePCGlaGDI8L5JT3R0VZkN2c1LMc9j6QxrA7bJW3WzHstlZDOanpEjDainHZrASxoOES446K0NW+Lh7LSi4KhuLDaxNiQcUKD7w+FU4rWoLSXfUxL3LBg6YwGKGU/eeraXaGAR352ho/BDuw/VdUAo409m5NwhQxLzwP5QwvYM2NI7kV1n5TJxv9D6OXAF/jG9RwG5T9/oS6oVugUJWgjFQizT/deJQbmRJlarKSzXZeafe0mfPaDOKSUJI72fZNIf+jPIc2MAt32sYgQDbUejzR9XFQvc1Cx8VJ2y3ECbWK1D6cJOZbxMFgOd+JM3LjX1IdIak3nUuX9SwVx2zGjtvONQk7lf3f52seVUoMe+LGGZKAbdY+Ky5BsW+39ovTNmK4MGvT2p+WtA6ft9nIVitzMkj3tqo18TBLIEj17zEDqoq4tPJdtwaNTEJP5OKo5tkpU7wUdLy+jXfwIbC24a1ExuFd/AT96nvc47cLH2Z2hH2j9ZDS34GxnNqkIBlQnBgwL9zTFbcxxJxisXe26jP8m8EWdlYe3gLumVy+rXae42eBOPS3d51rdtntUCye3I/3D/GLQmrXXzEYjb7RzH86moW7xtGksU530vxM+WoEhaA6ZXr39Uto6+nmvwAAAP//o2OPYg==" + return "eJzMWc2O2zYQvu9TDPbSBEj8AAs0QLFNmwBtsoe9G2NyLBFLkQo52o3fvuCPZP3aVtZB6pslzszH+fk4Q72HJzrcQYm1s98PNwCsWNMd3OYntzcAkrxwqmZlzR18uAGAdj38a2Wj6QZgr0hLfxdfvgeDFfWVhh8farqDwtmmzk9m9B4V5b9HbXtnDZOR2/C3ezvS8gUrArsHLqkTgDfWgVaeyZB7Cy+lEiU4EqSeSQIaCbWzgrwnGeWENYZE0LeZotiheFoDIq+fxfCCHjxpEhwsW6jQYEEjDOFFeOLJPZObQZReXAxIo+csE1QnJCOTCZjhGWtsGfX2BRUrU2xZVbSt/JLdx7AYwiJQBiqltfIkrJEefE2GIesJbwOEZ3TKNh6+NdRQX2vKHW1NMUV0xB1hXQ3T3rqZUJBn3GnlyzYue2VQZ4deiHh3YPJbRyhPgzRNtSMXAhclgB0aXynO6RLBaRUxl5Q8qG0BygOlVZsLAUWXRaf/nEiuwtFWWPb7r4jjO1BG6EYGcUfs1OVbyNV4gTOP0XX0rSHPvqUFctSjpB3trQusoDxYQ62HcwlHQ5eCa13789FlS795KLTdoV6JU61g2MSqIVQopSPvxwx/ltPJOeu2FXmPxaLJj2ER5EWhzoqw+wN8+uMhnoTKgEAfUUV9070yfeeZhLGNEzS/eClCJXVmk3jnCztXVeQqZTAypGfkxS3eWyNVKpCYYN63h4EyR4ppn5ORgWEm5iorp9t5osOLdYt8F2SAS+ThwR1yqiaHsY7fPN4/gHXw6fHx4e2pY2CR+u+tYVTGd+wkbGPYB+f1pAEFq+cuk3OqT8PZ72QAhh3QGFxSOXh1puqENaJxLhBZH5sdgJoGJQQr5eZmZG2u3mCmvboeyC6MV0SZeeUKIEs0UqcS7vdpV8Q66Ql+FKpnpXWblnZA/1eEmw+6U3i/9JG2h2mWA/pek1NkROtU5Y+oIkx3CHXMtpUet7bn8XbFHtuepTr/bPbWVZHwAHe24X6rJG0EUVJ7sP1AYbcwVH0zRYxa4dCLNXLZEv0mH1KDBZUqHCbs7AYnc2upto7X25pIjQ1NHJuJZXz4zltLtlqCHImcN6XkSgtDibMGJHnO595Spvx5XALqmDWvSImVgephPB+tqbVVCdi3NRI868uC7EBk3i2zA336dWfv32Q/P/SdDQVySS6wBoaOMhNcKteNqpOzh+zw1egD1I7CkAoq9T5J8ccw3yrhCZ0oodZNoUzoI/AZlcadpjDwD3Q1fsiVp85xYQ0rQ4bHBXLK+6OiLMhuTupZDnsfSGPYHbbK260YNlyroZzUdAkYbcW4bFaCWNBwiXFHRWhsXxePZSUXBUPx4bUJsaBihQdenwqnFS1B6W77mBe54EFTmI1Qyv7z1TQ7w4COfG2NH4Id2P4rKgFHGnsXJ2GKmBeeh3KGF7DmxpHcCmuf1MlG/8PoJcDX+AY13AZlvz+jbugWKFQlKCOVSPNPNx7lRqZEmZqsZLOdV9o9bea8NoO4JJTkTrZ9U8j/KM+hDczCnbYxCJANtR5PdH2cVW+z0HFx0nYLcUitIrUPJ4n5FnE8W84344zc+B8pkJDXm86ry3qW6mM2aced55qcncr+71M2Tyslhj1x4wxJwDZxXxSXoNi3W/vFmRsxXJi4ae3PzFuHL9tsZ6uVORmne1vVmniYKBCk+heaAVhFXFr5rluDRiahZ3JxYPPslClegTte5cb7+BBe2/BWIuPwXn6ygdV3usfvGD4M7wj7Rusht78DYzn1S0EyoDgxaV64pytuY4g5hWPvbNWn+jeDLeysPLwF3DO5fHPtPMdPBHH6b+891+yy26FYPMIf7x/i14XUt79iQhp9r5n/jDQLd42jSWOd7qf5hfIdCQpBdUr27kuY0NbTzX8BAAD///t2lGI=" } diff --git a/filebeat/module/haproxy/log/_meta/fields.yml b/filebeat/module/haproxy/log/_meta/fields.yml index 9176a8ae7282..65d8902c1c2c 100644 --- a/filebeat/module/haproxy/log/_meta/fields.yml +++ b/filebeat/module/haproxy/log/_meta/fields.yml @@ -14,7 +14,7 @@ - name: captured_headers description: > List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. - type: text + type: keyword - name: status_code type: alias @@ -32,11 +32,11 @@ - name: captured_headers description: > List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. - type: text + type: keyword - name: raw_request_line description: Complete HTTP request line, including the method, request and HTTP version string. - type: text + type: keyword - name: time_wait_without_data_ms description: Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data. From 0f3ea0d3f75a5ba37c3690f242be0e1b99fb49c2 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Tue, 29 Jan 2019 21:02:20 +0100 Subject: [PATCH 14/66] Change text fields to keyword for Metricbeat (#10318) Searching for `type: text` revealed a few fields which were text but I think should be keyword. --- CHANGELOG.next.asciidoc | 10 ++++++ metricbeat/docs/fields.asciidoc | 14 ++++---- .../module/ceph/cluster_disk/_meta/data.json | 22 ++++++++----- .../ceph/cluster_health/_meta/data.json | 18 +++++++---- .../ceph/cluster_status/_meta/data.json | 32 +++++++++++-------- metricbeat/module/ceph/fields.go | 2 +- .../ceph/monitor_health/_meta/data.json | 32 +++++++++++-------- metricbeat/module/ceph/osd_df/_meta/data.json | 25 +++++++++------ .../module/ceph/osd_df/_meta/fields.yml | 2 +- .../module/ceph/osd_tree/_meta/data.json | 20 ++++++++---- .../module/ceph/osd_tree/_meta/fields.yml | 4 +-- metricbeat/module/ceph/osd_tree/data.go | 2 +- .../module/ceph/osd_tree/osd_tree_test.go | 4 +-- .../module/ceph/pool_disk/_meta/data.json | 18 +++++++---- .../kafka/consumergroup/_meta/fields.yml | 2 +- metricbeat/module/kafka/fields.go | 2 +- metricbeat/module/kibana/fields.go | 2 +- .../module/kibana/stats/_meta/fields.yml | 2 +- metricbeat/module/mongodb/fields.go | 2 +- .../module/mongodb/metrics/_meta/fields.yml | 2 +- metricbeat/module/php_fpm/fields.go | 2 +- .../module/php_fpm/process/_meta/fields.yml | 2 +- 22 files changed, 137 insertions(+), 84 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 878d44724b65..029824c74aee 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -24,6 +24,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Docker and Kubernetes labels/annotations will be "dedoted" by default. {pull}10338[10338] *Auditbeat* + - Rename `process.exe` to `process.executable` in auditd module to align with ECS. {pull}9949[9949] - Rename `process.cwd` to `process.working_directory` in auditd module to align with ECS. {pull}10195[10195] - Change data type of `process.pid` and `process.ppid` to number in JSON output @@ -84,6 +85,15 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Rename http.request.body field to http.request.body.content. {pull}10315[10315] - Adjust php_fpm.process metricset fields to ECS. {pull}10366[10366] - Adjust mongodb.status metricset to to ECS. {pull}10368[10368] +- Change the following fields from type text to keyword: {pull}10318[10318] + - ceph.osd_df.name + - ceph.osd_tree.name + - ceph.osd_tree.children + - kafka.consumergroup.meta + - kibana.stats.name + - mongodb.metrics.replication.executor.network_interface + - php_fpm.process.request_uri + - php_fpm.process.script *Packetbeat* diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 2fdd5cc13c5d..2172b0ab549d 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -1587,7 +1587,7 @@ osd node id *`ceph.osd_df.name`*:: + -- -type: text +type: keyword osd node name @@ -1682,7 +1682,7 @@ osd or bucket node id *`ceph.osd_tree.name`*:: + -- -type: text +type: keyword osd or bucket node name @@ -1712,7 +1712,7 @@ osd or bucket node typeID *`ceph.osd_tree.children`*:: + -- -type: text +type: keyword bucket children list, separated by comma. @@ -10779,7 +10779,7 @@ consumer offset into partition being read *`kafka.consumergroup.meta`*:: + -- -type: text +type: keyword custom consumer meta data string @@ -11028,7 +11028,7 @@ Kibana instance UUID *`kibana.stats.name`*:: + -- -type: text +type: keyword Kibana instance name @@ -14736,7 +14736,7 @@ type: boolean *`mongodb.metrics.replication.executor.network_interface`*:: + -- -type: text +type: keyword -- @@ -18967,7 +18967,7 @@ The user (PHP_AUTH_USER) (or - if not set) (for the current request) *`php_fpm.process.script`*:: + -- -type: text +type: keyword The main script called (or - if not set) (for the current request) diff --git a/metricbeat/module/ceph/cluster_disk/_meta/data.json b/metricbeat/module/ceph/cluster_disk/_meta/data.json index 7306589ec333..a26d6f1dde39 100644 --- a/metricbeat/module/ceph/cluster_disk/_meta/data.json +++ b/metricbeat/module/ceph/cluster_disk/_meta/data.json @@ -1,26 +1,32 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "ceph": { "cluster_disk": { "available": { - "bytes": 50847313920 + "bytes": 0 }, "total": { - "bytes": 67371577344 + "bytes": 0 }, "used": { - "bytes": 13071564800 + "bytes": 0 } } }, + "event": { + "dataset": "ceph.cluster_disk", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "cluster_disk", - "rtt": 115 + "name": "cluster_disk" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/cluster_health/_meta/data.json b/metricbeat/module/ceph/cluster_health/_meta/data.json index 5a7c98cf0cd8..08de2b92e687 100644 --- a/metricbeat/module/ceph/cluster_health/_meta/data.json +++ b/metricbeat/module/ceph/cluster_health/_meta/data.json @@ -1,12 +1,12 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "ceph": { "cluster_health": { - "overall_status": "HEALTH_WARN", + "overall_status": "HEALTH_OK", "timechecks": { "epoch": 3, "round": { @@ -16,10 +16,16 @@ } } }, + "event": { + "dataset": "ceph.cluster_health", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "cluster_health", - "rtt": 115 + "name": "cluster_health" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/cluster_status/_meta/data.json b/metricbeat/module/ceph/cluster_status/_meta/data.json index a6d41779df7b..c6ce81c817a0 100644 --- a/metricbeat/module/ceph/cluster_status/_meta/data.json +++ b/metricbeat/module/ceph/cluster_status/_meta/data.json @@ -1,6 +1,6 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, @@ -17,19 +17,19 @@ "total": 0 }, "osd": { - "epoch": 18, + "epoch": 3, "full": false, - "in_osd_count": 1, + "in_osd_count": 0, "nearfull": false, "osd_count": 1, "remapped_pg_count": 0, - "up_osd_count": 1 + "up_osd_count": 0 }, "pg": { - "avail_bytes": 50847313920, - "data_bytes": 3656, - "total_bytes": 67371577344, - "used_bytes": 13071564800 + "avail_bytes": 0, + "data_bytes": 0, + "total_bytes": 0, + "used_bytes": 0 }, "traffic": { "read_bytes": 0, @@ -37,13 +37,19 @@ "write_bytes": 0, "write_op_per_sec": 0 }, - "version": 32 + "version": 4 } }, + "event": { + "dataset": "ceph.cluster_status", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "cluster_status", - "rtt": 115 + "name": "cluster_status" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/fields.go b/metricbeat/module/ceph/fields.go index 7112808d2df8..8f8636152e87 100644 --- a/metricbeat/module/ceph/fields.go +++ b/metricbeat/module/ceph/fields.go @@ -32,5 +32,5 @@ func init() { // AssetCeph returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/ceph. func AssetCeph() string { - return "eJzEmt9v2zYQx9/zVxzytAGJsb36YUDXFWiwpQ2W9mkYVJo8SZwpkeBRcf3fD6RkOdZP26FdP22x+72P7k7Hu5PuYY3bJXA0+Q2Ak07hEm7fo8lvbwAEErfSOKnLJfx2AwDgv4JCi0rhDQDl2rqE6zKV2RJSpsj/1aJCRriEjPnfoHOyzGgJ/9wSqds7uM2dM7f/3gCkEpWgZVC+h5IV2LL4j9sar2J1ZZq/DBD5zzf/j74B16VjsiRwOUKBzkru/5s52KBFIG6ZQQGp1QW8//D0cdEIvMY4QFEVObSJkLRuvxzCmkDznxGdQz/tPl2Y10DshUnFVgoXq61DOvjNjkvpMut8MYHmP+92qhBUQafBgQ115+eptgVzS+gD7CCddkxFBfziFePAVYQiKttXQnE+WjfTcmTK5TFyrad0erbpF7RMqYQcc9Wwv9a43WgrTnPZ51oXat0pt7UpJQvkOfI1LdBonkeK3SMz8IKWpC7nzFpdlWLxwlSFkYy34hC0jwOIHYrngxAcgnRzs2d7ODeH8+yIjO3pT+XmUNjOj0U41RpfTCaEZWkq+cIiE8lJVWS8Ms3D1f4BbxRcbnWV5aZyYNACIddjudOwbqx0eHXYYPUM2uBZbRLjEwJ5rPi+dqHUhk5z3sV4ai8dA1RIMopxXITTNTLGThxMBmVVrEaqcMugV/8hd7FO0B5FI38UimVO6kEQ4kyhSFKlmRvJb4OWY9n99lTcPsKOUmBmmUBxkaDtxGeC1jJcJmgtxRFBa1F+XNBa3PGgmWwhmGNXr5gmA293onc12SIMAFdHY4cDwhhcyPKrw7n9cDAG5pv+q3NV7WAwghUaHgwtHSb+j5FuzacsdNb4+nfTCFxXvRvqXOvPud4Q5HoDBSu3YDICZhFk2UDpdPbSe3yRm70mQDTf72kSi7RSw6V7pbVC1qWaMf5AXhR6oq8tlsjsRax64RnTVZFoErFOiU4yeGWfCXPj3o6kMpeG8ampa6A2Pb8+TULJ8kdAPXyahLJYMGNQJCa7NtnfHx7fPT19+GOUL+bEHrS6PUbbFOpSOn30EuXkQfVQP3iAwpl95My6394ZHqvc7nd3TV+0m+UfPw9nTM858LYNwsfaGTNW95e+XkW/8j9/nzNfrySjma73kfNmw7IxmtWwaZw3qhi5pDKCOeyGsrbsvznxemWBsMmxhA0jGNLeGR9tY87KrU+swLnLJacthj6BFkpnUXe7f+lsv9rtAhyzbX4NV0jiUekeJfF4eEQuKt3z85d4cBd/pPBWwNmb7ozkY+R699qrczURafwjjqPJQ6soJK2hIpb51r32xWGTPHXQyVg+CE2rFthVnC03Dr+fuCFoTY2OIwJfJMeEK0YRN/CtXa9xB1IpzJgK/wey5KoSCLkQd0AkAB1fTBxwPlevMOG2+VGP3i9aVSMua5+2XZOqztoJqjOfosZg229SJvhMlpRVEekWou48DkpzX1PqRl6GyXA8eGOd6qUWdZ0oNhosw8ES6CzibBE8ptx5oVDoZovn1eqetrCq+BrdNStgx+hoLfQ24tbAjuWJaqhJ3EGuyd2B1dpNFMWtweSSMfFSD8ODL8+lEhaHd1anx6axulMFJf3lExpmw7282gLXRcGGHcFtRXmyQZnlw3fz0G187LkVxGFAfH9umpGB8/QgBIt9wZ0p/C5p5BHHWXszSbVFclKpWt3nQKndT7/eb5Hu4Jf7Uv88XMWtLJjdJixNZSndNpbj/TBUe9s3rhaZkGXz6CC82NTYHS3rFicS4YzXGHJsJT3QmNnYby7sXx4J9UA6f9JVSsAKoTI+SkJvhre6l2nkvCNqZQjKLZqS62NauJS5vPfW0Bt5DLNYNsUqzNH1cd+pY72j1Wit3vzS25DIDzxSH8Ruk+DBTjtL37y8GDVZT49Xfa2vx3LcrOs54z5C/hS2uOE2aZ4dH+etK7zC9wYfXWDnt14dcP0fAAD//wWoKpo=" + return "eJzEms9v27gSx+/5KwY5vQckxntXHx7Q1y3QYDdtsGlPi4VKkyOJa0okOFS8/u8XpGTZ1k/boV2fWtv5zsczo+HMSI+wxu0SOJr8DsBJp3AJ9x/R5Pd3AAKJW2mc1OUS/ncHAOA/gkKLSuEdAOXauoTrMpXZElKmyL9rUSEjXELG/HfQOVlmtIQ/7onU/QPc586Z+z/vAFKJStAyKD9CyQpsWfzLbY1XsboyzTsDRP71w//RD+C6dEyWBC5HKNBZyf2/mYMNWgTilhkUkFpdwMdPL58XjcAhxhGKqsihTYSkdfvhENYEmn+N6Bz7affqwhwCsTcmFVspXKy2DunoOzsupcus88EEmn992KlCUAWdBgc21J2vp9oWzC2hD7CDdNoxFRXwm1eMA1cRiqhs3wnF5WjdTMuRKZfHyLWe0vnZpt/QMqUScsxVw/5a43ajrTjPZV9rXah1p9zWppQskOfI17RAo3keKXbPzMAbWpK6nDNrdVWKxRtTFUYy3opD0D4NIHYoXo9CcAzSzc2e7eHcHM6zEzK2pz+Vm0NhuzwW4VRrfDGZEJalqeQLi0wkZ1WR8co0D1f7B7xRcLnVVZabyoFBC4Rcj+VOw7qx0uHNYYPVC2iDZ7VJjE8I5LHie+hCqQ2d57yr8dReOgWokGQU47gIp2tkjJ04mAzKqliNVOGWQa/+Qu5inaA9ikb+JBTLnNSDIMSZQpGkSjM3kt8GLcey++m5uH2EHaXAzDKB4ipB24nPBK1luE7QWooTgtai/LygtbjjQTPZQjDHbl4xTQbe7kTvarJFGABujsaOB4QxuJDlN4dz++FgDMw3/TfnqtrBYAQrNDwYWjpM/JuRLs2XLHTWePi9aQSuq94Fdan111xvCHK9gYKVWzAZAbMIsmygdDr703t8kZu9JkA03+9pEou0UsOle6W1QtalmjH+RF4UeqKHFktk9ipWvfCM6apINIlYp0QnGbyyz4S5cW9HUplrw/jU1DVQm57fXyahZPkzoJ6+TEJZLJgxKBKT3Zrs90/PH15ePv0yyhdzYg9a3R6jbQp1KZ0+eYly9qB6rB88QOHMPnFm3W/vDI9Vbve7u6Yv2s3yz1+HM6bnHHjfBuFz7YwZq/ufvl5F/+W//n/OfL2SjGa63kfOmw3LxmhWw6Zx3qhi5JLKCOawG8rasv/kzN8rC4RNjiVsGMGQ9s74aBtzUW59YQXO/Vxy2mLoE2ihdBZ1t/ubzvar3S7AKdvmQ7hCEo9K9yyJx8MjclHpXl+/xYO7+i2F9wLOXnQXJB8j17vWDs7VRKTxjziOJg+topC0hopY5lv32hfHTfLUQSdj+SA0rVpgV/E65aa1NjqRCHyTHBOuGEVcwrd2vcYDSKUwYyr8D2TJVSUQciEegEgAOr6YOON8ut5gyG1TpJ6+37SqRlzW3nC7JVWduBNUF95IjcG2X6ZM8JksKasi0lVE3ZEclOa+rNS9vAzD4XjwxprVa+3qOlFsNFiGg1XQWcTZOnhKxfNCodbN1s+blT5tYVXxNbobF8GO3dFy6M1c1fJEQdQkHiDX5B7Aau0m6uLWYHLNsHipp+Hxl+dSCYvDm6uLnNQY3gmDkt4DhIbZcEWvtsB1UbBhX3BbUZ5sUGb58DU9dDGfenoFcRgQ35+eZmTyPD8OwWJfcGcK/5Y0cq/jogWapNoiOalUre7ToNTuX/993CI9wH8eS/3v4VpuZcHsNmFpKkvptrEc76ei2tu+g7XIhCybewjhCafG7mhxtziRCBc8z5BjK+mBxszGfoRh/xRJKAnS+fOuUgJWCJXxURJ6M7zevU475x1RK0NQbtGUXJ/SyKXM5b3Hh97JY5jFsqlXYaCuD/1OKesdsEZr9e6n34ZEfuLB+iR2KwUPdoMT9XCLMWqyHiNv+nxfj+W0oddzxr2X/CWsc8Nl0txEPs1bN3iW7x0+usLyb7064vonAAD//8IHLlo=" } diff --git a/metricbeat/module/ceph/monitor_health/_meta/data.json b/metricbeat/module/ceph/monitor_health/_meta/data.json index 38d4741b2c55..3557141daf40 100644 --- a/metricbeat/module/ceph/monitor_health/_meta/data.json +++ b/metricbeat/module/ceph/monitor_health/_meta/data.json @@ -1,18 +1,18 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "ceph": { "monitor_health": { "available": { - "kb": 49653688, - "pct": 75 + "kb": 46814916, + "pct": 76 }, "health": "HEALTH_OK", - "last_updated": "2017-12-07T07:26:33.344939Z", - "name": "93c038136d94", + "last_updated": "2019-01-25T12:37:24.921587Z", + "name": "f0e2841bb524", "store_stats": { "last_updated": "0.000000", "log": { @@ -22,24 +22,30 @@ "bytes": 65552 }, "sst": { - "bytes": 726 + "bytes": 1087 }, "total": { - "bytes": 2097894 + "bytes": 2098255 } }, "total": { - "kb": 65792556 + "kb": 61255492 }, "used": { - "kb": 12767092 + "kb": 11299252 } } }, + "event": { + "dataset": "ceph.monitor_health", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "monitor_health", - "rtt": 115 + "name": "monitor_health" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/osd_df/_meta/data.json b/metricbeat/module/ceph/osd_df/_meta/data.json index a84eb48dfe3b..fb8e83329dcb 100644 --- a/metricbeat/module/ceph/osd_df/_meta/data.json +++ b/metricbeat/module/ceph/osd_df/_meta/data.json @@ -1,25 +1,30 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "ceph": { "osd_df": { - "available.byte": 49655580, + "available.byte": 0, "device_class": "", "id": 0, "name": "osd.0", - "pg_num": 120, - "total.byte": 65792556, - "used.byte": 12765200, - "used.pct": 0.1940219498388237 + "pg_num": 0, + "total.byte": 0, + "used.byte": 0 } }, + "event": { + "dataset": "ceph.osd_df", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "osd_df", - "rtt": 115 + "name": "osd_df" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/osd_df/_meta/fields.yml b/metricbeat/module/ceph/osd_df/_meta/fields.yml index 8ad2589c3149..033a1ddd253a 100644 --- a/metricbeat/module/ceph/osd_df/_meta/fields.yml +++ b/metricbeat/module/ceph/osd_df/_meta/fields.yml @@ -9,7 +9,7 @@ description: > osd node id - name: name - type: text + type: keyword description: > osd node name - name: device_class diff --git a/metricbeat/module/ceph/osd_tree/_meta/data.json b/metricbeat/module/ceph/osd_tree/_meta/data.json index daf3e06953db..6f8cf7a91065 100644 --- a/metricbeat/module/ceph/osd_tree/_meta/data.json +++ b/metricbeat/module/ceph/osd_tree/_meta/data.json @@ -1,12 +1,14 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "ceph": { "osd_tree": { - "children": "-2", + "children": [ + "-2" + ], "father": "", "id": -1, "name": "default", @@ -14,10 +16,16 @@ "type_id": 10 } }, + "event": { + "dataset": "ceph.osd_tree", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "osd_tree", - "rtt": 115 + "name": "osd_tree" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/ceph/osd_tree/_meta/fields.yml b/metricbeat/module/ceph/osd_tree/_meta/fields.yml index 67078e0206ae..07dcd1c78c82 100644 --- a/metricbeat/module/ceph/osd_tree/_meta/fields.yml +++ b/metricbeat/module/ceph/osd_tree/_meta/fields.yml @@ -9,7 +9,7 @@ description: > osd or bucket node id - name: name - type: text + type: keyword description: > osd or bucket node name - name: type @@ -21,7 +21,7 @@ description: > osd or bucket node typeID - name: children - type: text + type: keyword description: > bucket children list, separated by comma. - name: crush_weight diff --git a/metricbeat/module/ceph/osd_tree/data.go b/metricbeat/module/ceph/osd_tree/data.go index 27a3ea142785..bc0290acddfa 100644 --- a/metricbeat/module/ceph/osd_tree/data.go +++ b/metricbeat/module/ceph/osd_tree/data.go @@ -86,7 +86,7 @@ func eventsMapping(content []byte) ([]common.MapStr, error) { nodeInfo := common.MapStr{} if node.ID < 0 { //bucket node - nodeInfo["children"] = childrenMap[node.Name] + nodeInfo["children"] = strings.Split(childrenMap[node.Name], ",") } else { //osd node nodeInfo["crush_weight"] = node.CrushWeight diff --git a/metricbeat/module/ceph/osd_tree/osd_tree_test.go b/metricbeat/module/ceph/osd_tree/osd_tree_test.go index dcfedc2e291d..8207c4e81569 100644 --- a/metricbeat/module/ceph/osd_tree/osd_tree_test.go +++ b/metricbeat/module/ceph/osd_tree/osd_tree_test.go @@ -59,7 +59,7 @@ func TestFetchEventContents(t *testing.T) { nodeInfo := events[0] assert.EqualValues(t, "default", nodeInfo["name"]) assert.EqualValues(t, "root", nodeInfo["type"]) - assert.EqualValues(t, "-3", nodeInfo["children"]) + assert.EqualValues(t, []string{"-3"}, nodeInfo["children"]) assert.EqualValues(t, -1, nodeInfo["id"]) assert.EqualValues(t, 10, nodeInfo["type_id"]) assert.EqualValues(t, "", nodeInfo["father"]) @@ -68,7 +68,7 @@ func TestFetchEventContents(t *testing.T) { nodeInfo = events[1] assert.EqualValues(t, "ceph-mon1", nodeInfo["name"]) assert.EqualValues(t, "host", nodeInfo["type"]) - assert.EqualValues(t, "1,0", nodeInfo["children"]) + assert.EqualValues(t, []string{"1", "0"}, nodeInfo["children"]) assert.EqualValues(t, -3, nodeInfo["id"]) assert.EqualValues(t, 1, nodeInfo["type_id"]) assert.EqualValues(t, "default", nodeInfo["father"]) diff --git a/metricbeat/module/ceph/pool_disk/_meta/data.json b/metricbeat/module/ceph/pool_disk/_meta/data.json index 930a560cebb0..8d0d0ba019d1 100644 --- a/metricbeat/module/ceph/pool_disk/_meta/data.json +++ b/metricbeat/module/ceph/pool_disk/_meta/data.json @@ -1,6 +1,6 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, @@ -10,7 +10,7 @@ "name": "rbd", "stats": { "available": { - "bytes": 47478734249 + "bytes": 0 }, "objects": 0, "used": { @@ -20,10 +20,16 @@ } } }, + "event": { + "dataset": "ceph.pool_disk", + "duration": 115000, + "module": "ceph" + }, "metricset": { - "host": "ceph:5000", - "module": "ceph", - "name": "pool_disk", - "rtt": 115 + "name": "pool_disk" + }, + "service": { + "address": "127.0.0.1:5000", + "type": "ceph" } } \ No newline at end of file diff --git a/metricbeat/module/kafka/consumergroup/_meta/fields.yml b/metricbeat/module/kafka/consumergroup/_meta/fields.yml index 0cea9183255d..963844e43b4a 100644 --- a/metricbeat/module/kafka/consumergroup/_meta/fields.yml +++ b/metricbeat/module/kafka/consumergroup/_meta/fields.yml @@ -40,7 +40,7 @@ description: consumer offset into partition being read - name: meta - type: text + type: keyword description: custom consumer meta data string - name: error.code diff --git a/metricbeat/module/kafka/fields.go b/metricbeat/module/kafka/fields.go index d5a0bd09a9ed..7a7d0fa0bb20 100644 --- a/metricbeat/module/kafka/fields.go +++ b/metricbeat/module/kafka/fields.go @@ -32,5 +32,5 @@ func init() { // AssetKafka returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/kafka. func AssetKafka() string { - return "eJy8WE1v2zgQvftXDHJyDtGedg8+LNAmRWE0aIu0PRu0OLIJU6RK0k797wtSli1RIvVhJzrFjPTe43D4ZsgH2OFxATuS7cgMwDDDcQF3X+zvuxkARZ0qVhgmxQL+nwEAuP9BLume4wxAb6Uyq1SKjG0WkBGu7ahCjkTjAjYWNmPIqV64zx9AkBwvlPYxx8K+quS+OI108DZh6lBrJXeozsNdeEHM8vnoEOBRCr3PUcFn+yksRSZVTuwHsCUHhDWiAIWEQqZkDvPTZ1siKGdi04A0W4S0wnNS7pPaC/5c6vNhtDFczYdLjyI6pdq0GJ118hBKFWrdSbbD46tUvpBhfIQeUBmmkZ4pWmtmZMHSxP7dWrc2dYT2p8VxmCEOVEqqJJW0zeRFtJfGQYGFStpsBVGG2W+TxvqNZfpewQCjURY3u1UHVzx+DbJfgv3eIzAKMnMZW1zYhRsoY9ivo9yD7yMHiKDuV0matMRV+853gNG+EAJq2lv1xPZ0y6PCekpNhcKUGKQL+C/5d9I2vKWbQb+jhSIAMWeDmLsNmCo0XK4aCfJ3Ox70uN44HT7HGIsf4Lr+qj7FidyGGcU1OPFq1huVcN7Ew6vaYA0Xt+wLhMwyjWZSYT0nfYkBTBhZs6Y1MrFxGymuIEdDOvkN/vGFNfn32sj8IsMCASWGgDaqvlM7aTvr3/DJt3PddW5nNf9cAlEvj1FJKWcoutei2wyjej5ozTYC6QnWrYRdETygMLo0t1AOXmFYA73isRS1fIJ5GTiNxlh5pdqE0ft+39pK7YdrqpAGVJAwx3ztl/NJrEwYVIJwr3KcCOq7NmYXowt3F8j4oh3xjCl5eiCMkzXHE66uupwNO6CodVQjc1TgK0bSY3ph/eqAK9fzWzJfZi1snL6NoG8OuF/QhDI0YT0vtcd68Xu0QrGyOEAwtI4X1WhQJUdCW23rAKW9Op4dsG3152Vr3Oola6HSYQVXdWzPzGWTJQBGdViBwoKz1K/et4jDS4ncHYhwRIQ+inTVJ2stJUfiJ/xAZUtBmc02DSyrAgBMAxMp31Ok1ZGMiQcrpnrFoK1wMF/+eBk0E73qybE3mYQV7vEGJQYbKLjB+n8690xlo5KhSbe2PRhqa5FLjqi+q06YpnUdEpbm3fHA7Q4gbV1DjySni4MxF23Xn8c9Nk/LlMu46zUFD6uzvwEAAP//PK58aA==" + return "eJy8WM1u2zwQvPspFjk5h+g7fT34UKBNisJo0BZpezZocWUTpkiVpB347QtSli1RIvVjJzrFjDQzXC5nl3yAHR4XsCPZjswADDMcF3D3zf6+mwFQ1KlihWFSLODjDADA/Q9ySfccZwB6K5VZpVJkbLOAjHBtRxVyJBoXsLGwGUNO9cJ9/gCC5HihtI85FvZVJffFaaSDtwlTh1oruUN1Hu7CC2KWz2eHAI9S6H2OCr7aT2EpMqlyYj+ALTkgrBEFKCQUMiVzmJ8+2xJBORObBqTZIqQVnpNyn9Re8OdSnw+jjeFqPlx6FNEp1abF6KyTh1CqUOtOsh0eX6XyhQzjI/SAyjCN9EzRWjMjC5Ym9u/WurWpI7S/LY7DDHGgUlIlqaRtJi+ivTQOCixU0mYriDLMfps01m8s088KBhiNsrjZrTq44vFrkP0R7O8egVGQmcvY4sIu3EAZw34d5R58HzlABHW/StKkJa7ad74DjPaFEFDT3qontqdbHhXWU2oqFKbEIF3Ah+T/Sdvwlm4G/Y4WigDEnA1i7jZgqtBwuWokyN/teNDjeuN0+BxjLH6A6/qr+hQnchtmFNfgxKtZb1TCeRMPr2qDNVzcsi8QMss0mkmF9Zz0JQYwYWTNmtbIxMZtpLiCHA2ZuurpXhuZX5RYLKDEENBG1TdrJ3NnCRw+/3a6u+btrOa/SyzqFTIqKeUMRfdydPthVM8nrdlGID3BusWwi4IHFEaX/hZKwys8a6BdPJailk8wLwOn0Rgrr1SbMHrfb11bqf1wTRXSgAoS5piv/Yo+iZUJg0oQ7hWPE0F948YcY3Tt7gIZX7cjtjElTw+EcbLmeMLVVaOzYQcUtaZqZI4KfMVIekyvrd8dcGV8flfmy6yFjdO3EfTDAfcLmlCJJqznpfxYL36PbihWGQcIhtYJoxoNquRIaKtzHaC0V8ezA7bd/rzsjlvtZC1UOqzgqqbtmblssgTAqA4rUFhwlvoF/BZxeCmRuwMRjojQR5Gu+mStpeRI/IQfqGwpKLPZpoFlVQCAaWAi5XuKtDqVMfFgxVSvGLQVDubLXy+DZqJXPTn2JpOwwj3eoMRgAwU3WP8v556pbFQyNOnWtgdDbS1yzxHVd9Uh07RuRMLSvGseuN0ZpK1r6KnkdHcw5q7t+iO5x+ZpmXIfd72m4Hl19i8AAP//Xtd9qA==" } diff --git a/metricbeat/module/kibana/fields.go b/metricbeat/module/kibana/fields.go index b59d1e5e13c3..dece8615f471 100644 --- a/metricbeat/module/kibana/fields.go +++ b/metricbeat/module/kibana/fields.go @@ -32,5 +32,5 @@ func init() { // AssetKibana returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/kibana. func AssetKibana() string { - return "eJzEmM9u40YMxu95CsKXvSR6AB8KFG2BFkWCYtugh6IwaA1tTTMaqkPKsfv0xeiPI8ujWNm1sToEiWR/32/IIanJA7zQYQkvdo0e7wDUqqMlLH5tbizuAAxJHmyllv0SvrsDAGgfQsmmdnQHIAUHXeXsN3a7hA06iXcDOUKhJWyjsJCq9VtZwl8LEbe4h0WhWi3+vgPYWHJGlo32A3gsaUAULz1UUSdwXXV3ElSnOkMtUVQ53k3JTUq2V7fgRgfQGwi1f1BbEpSkweaSDT5+uu7+GrMN+erampMHPeILHV45jJ+9AzqAtV4UfU7w/PzLj0nb+DNpq7TXr/M8k+49rTe0v95an7Ak4E3n/0nAeqXg0SWMeoSCRbPJtV8l5NFiMgQa0EsVKwaNCSRydQ6hsKPwSY4czZ6NlkmgHQWx7K+OkdI9lqTHSgoeb7PWdM3sCMdAF0z/LEgLCqAF9QDr2joDVgCPfu29NJKi1tdPRr8pYjoInRYpo54hZ5/XIZBv2qmnPIqnmRz77QeLpS7XFGK55M6SVxhYQImGQLkJX7t/MnhiJdACFdaBX4WCQI4ehLyBsnZqK0cgNv6KnriWE0VlCPRvTaKDDzfKgCIUO6kC+5zum+2pBR0a+UAPtRCQKK6dlYLMUDZLxq0KnE9V0rjPz4jUb61c391Hz1Ot/A2FdjF7jrlaGXJ4yMrx93swydGRWW0c47gOLhIC/BR9IPpA4wPWQ2mds0I5ezM27fFKKjkcsoJwHJP34jWDp49ZVJ4I3FToBr2RFV22Piidf/edjd9IcyhRlzD15YsLAPgjurcLQOc4RyUTt3G3u2KE0+rHQS5kvhn9z5E7EsD6MB9Z7H+0cra0+s3AH3GfATsDUmFODdFp/J/YUPaP9Iu6n5GIKr6dpUrvwnJm4D432rGNDoI8WXk9UdcKr9WhAD53vTXn2uuHOtUblLHStdZbBOpt3nSLl3aYvFKggTWN5+qoHdyArC10f8Y3kTmp2AutYtqvlb/PnShE0Y8Nmjcy3G1vs8W/31HALR2X3lBeGDCDEYP722A94t6WdTkTa/K97sPHv98bhS4dX3XSu+2xI6qn349ue8KM6mnf7giQtaV2qxNGV8lphDb9Gcct7VwW/7x+Cjr1xmwiBekS/+IG8tjKnW9KmNE4Zh0z4AoV+0PrMjCcfpeH82k5jZR+SZ3F1A/OmCsrOvrvTX9NhRBmj0+4FL+ZvJAYWMPp+X5EYcY4vSXpCdz/AQAA//98JjTx" + return "eJzEmN9u6zYMxu/7FERuzs2pHyAXA4ZtwIahxXC2YhfDEDAWE2uVRU+k02ZPP8h/UseRG3eLcXxRtHbyfT+RImn1Hp7puIZnu0WPdwBq1dEaVj83N1Z3AIYkD7ZSy34N39wBALQPoWRTO7oDkIKDbnL2O7tfww6dxLuBHKHQGvZRWEjV+r2s4Y+ViFt9hlWhWq3+vAPYWXJG1o32PXgsaUAULz1WUSdwXXV3ElTnOkMtUVQ53U3JTUq2V7fgRgfQGwi1v1dbEpSkweaSDT5+vu7+GrMN+eramrMHPeIzHV84jJ+9AzqAtV4UfU7w9PTT90nb+HM52wv13tZ6Q6+3833EkoB3nf8nAeuVgkeXMOoRChbNll1+tJgMgQb0UsWiQWMCidycQygcKHySE0ezbaNlEuhAQSz7m2OkdE9V6bGSgjVpumV2hGOgK6a/F6QFBdCCeoBtbZ0BK4Anv/ZeGklR69sno98UMR2ETouUUc+Qs8/rEMg3HdVTHsXTTI79/oPFUpdbCrFccmfJKwwsoERDoNyEr90/GTyyEmiBCtvAL0JBIEcPQt5AWTu1lSMQG39FT1zLmaIyBPq7JtHBhxtlQBGKzVSBfU6fm+2pBR0b+UD3tRCQKG6dlYLMUDZLxq0KnE9V0rjVz4jUL61c3+BHz1Pd/A2FDjF7jrnaGHJ4zMrx93swydGR2ewc47gOrhIC/BB9IPpA4wPWQ2mds0I5ezM27fFKKjkcs4JwHJP34jWDp49ZVJ4I3FToBr2RFV22PSpdfvedjd9IcyhR1zD15asLAPgturcLQOc4RyUTt3G3u2KE0+qnWS5kvhr9j5E7EsD2OB9Z7D+0cba0+tXAH/A1A3YGpMKcGqLz+D+yoewv6Rf1eUYiqviCliq9K8uZgfvUaMc2OgjyZOX1RF0rvFWHAvjS9daca68f6lRvUMZK11qXCNTbvOkWL+0weaFAA2saz9VRO1iArC10f8E3kTmp2AttYtpvlb8vnShE0Y8NmjcyPOyX2eLfHijgnk5LbyivDJjBiMHXZbAe8NWWdTkTa/K97sMnwF8bhS4d/+uwt/ypK/1+tOwhM6qnfbsjQNaW2lInjK6S0wht+jOOW9q5LP55+xR06o3ZRArSJf6fG8hDK3e5KWFG45h1zIAbVOx3rcvAcPpdHi6n5TRS+iV1FlM/OGOurOjoHzj9NRVCmD0+4Vr8ZvJCYmANp+f7EYUZ43RJ0jO4fwMAAP//HHg2MQ==" } diff --git a/metricbeat/module/kibana/stats/_meta/fields.yml b/metricbeat/module/kibana/stats/_meta/fields.yml index 3c7048dda2c0..fd83bd73314e 100644 --- a/metricbeat/module/kibana/stats/_meta/fields.yml +++ b/metricbeat/module/kibana/stats/_meta/fields.yml @@ -9,7 +9,7 @@ description: > Kibana instance UUID - name: name - type: text + type: keyword description: > Kibana instance name - name: index diff --git a/metricbeat/module/mongodb/fields.go b/metricbeat/module/mongodb/fields.go index d9fc332c1f5c..9394cc66c582 100644 --- a/metricbeat/module/mongodb/fields.go +++ b/metricbeat/module/mongodb/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMongodb returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/mongodb. func AssetMongodb() string { - return "eJzsXV+T4zZyf99PgXIebFfNausuqTxsXVxln+9yTnnPjr1X95BKcSCyJcIDAjwAlFb36VP4R4IUQFISpZlVRg/JeUdq/LrRaDQa3Y236AkO71HF2ZYX6zcIKaIovEdffND/8v13X7xBqACZC1Irwtl79M0bhBD6AEqQXKKcUwq5ggJtBK+Q+xGSIHYg5OoNQrLkQmU5ZxuyfY82mEp4g5AACljCe7TF+jugFGFb+R79zxdS0i/+9w1CGwK0kO/NaG8RwxWEKPVHHWpNQPCmdv8SAWrAOlSVBb1yfwhHCEfRPEmFlWz/EhtrZLxwTCcgwhnSNIlUWmwDJPrTl4j/DDGGOFtB9EE+wWHPRTH42whU/fkeK7zGEgzpDlZ03I6l5cb/YyemGQj0/11y7GpNGDaD8w0qvCgwK8Lpm4FLcYXpSpEKVo2MAqScbU9D91HTRHtM9ApBmjbacIEoz58kIgxVJBdcQs5Z0dOnIaqcN0wtiok11RqEFpkGYyAi2AFTckJM+utRJMP1hRIrICQmABcJkY+yOINNw6oWuJe+Frweb470jzDGJmAJhH9tp6GFNmMuQnh7QRTcUoZmwFOFaFFeX4oduBNU+h8NCAJy6bWvBScaxrTg3BDz1rzHs+Sq70TkocAnyBsFxYRwtqAqLlIadpFwsHzySqWHQHkjpF6kfD9TUB7bdQSlOZYIe1hYPmlPyYPVO82E6AiTINQ1JGcpa+Ex2KOC502l9Xye1Bys6wjNY3GjzFuATV3gpBG7SFCGspbTiTJyiK4sIzvKPBkJqPjuKjIqgMI5MnKIriwjg26mjHJeVVjjvYKUrLk0YvI+ph9unrhacFcS2BGqYwPfHT4uPiI5EqgWfEcKbScZ4jsQOwJ7DQejGgtF8oZiYY9+LcIV+lgS2c5wjyyRqOJSoZyzHASDAu2JKs1P0Y7TRltkQ70ldtEpDO+2GV//lknyT1itDwpmq8yGiwqr96j/o4kjV5w6YQq2IMaJaH6vC3PmiTT62w2hcF10hBXw6QZDzKEcP9Y2VQaflLZSZ1Lg698gP/vXUnGBt1eeBSYN/axar6q4ukwDNZpsFGYHQqYCEeecJiv8GxfzjhdpGoSdRcP/3qpAthEAGSUybufPYY411YWsJTUjQSjAFtWQVmQ2Hja5m8TN88ge82sXc1MlVkjARhtSpEpzVhDGhXKxHr0bgd0a/Jnr0UYcH7UrqjDL+1Gn1pEnzLJHOHtACj8Bwohy/oSwQqVStXz/7l3Bc7lyAcxVzqt3FWYNpu8EbEAAy+Gd23Xf2eCpRt7Id//iQqnmv1bHchrbmvw2PluBJjyFX6DmQknEmZGfllvMazg+wn8swQE1fo4LfrZeBhZgCGrUMu6I6PkBnJdoh2kDeo/H8d3fMGhn2oLVhNUgXnXk3yAs0R4o1f/fIGm/usGEQuFdN87G4ilDxlZ/cP/rm5UjI0t9MO2PYM+I7Vf9iEbIxpfRKnMs05HBLLtzxmr5Hx9tyrAQmUmgm6RNiOnaGN2QthVH9CsTJmcQAT2dROvibbcCtlgNY853w+C6IbTItBW7Vw61A50NTyx3xiFj9oiQ1ZzfPbNjUeDPnLlifd+TV2iHjOV3O38bwmIA7oK3Lagsr4qMEgYZr+9XSTWjFEuVgRAjp7l74JLHhrgb9vQB7Z75q7HAFSi4Wx0tuVR37Zvaa6675U5mFZZ3rJ9ml0gH6O+Nz2hI6X6YJFJlPvx0t16c4TJ+V3E3PNYkSv8+eBN8Q+jdujUCaipBZdq9EWtyt8sw5NMG+O+d0xKwUGvAd+vteEZtWk5Wc0kiidJ3w669nLpz5bVzea/c7UusZHVoBLkXDt/EaNgMzDdz2ZssGWAKEyZtVpGALRYFYVuf52lvkjErUNNPL0IzLtMUqaDIeHONLOePsctQg9ndj5d4BxYB4o1CkrDc3s3ala49jxyk1ByKXl7YkAtew+lWbwYHKcnr8Twrx6jm6SrjmWY9Lno0ra+zGEBuGroJCKHbXDUtcG6ooO+/++8GxGH1k/nPFeMfLUIkQSHFUS1MWiNywGOs93xidu5iPJO5Rzvm4+QEXWzQLgDZWwK+cotIVGFitM2nmOeUzEghTeQlXJB2YXJWunRHhHOzCLWBqXhBNiS31Us1VgoEO5LvlMmxCbJpP3tZg9PlCLtx01bEhsaeAZkfeKymRzUivpquC80PjNaHtsxjwne5PUg37nRhSPqS5ez1oleMFpFNfjGkkfVQTQpMCdpo5mC2DVvsw2sQrv6P9VLDukv1U5eUIZztMVGr6io1Va34ccUbpnx2j00kp5S4RHJr0zRPNrUHlVgiWWvmahAbLiothi2oH7FUfzKyaqURw43sDmXl5lKs0VdkBSu0/xptBWAFQg/K0O8marmsdK5V0BXTzwSbliWsxZKTDYFiGfbclnyt2R9mdZmJ7gMPWBw4dlgi7T3Jhiq/KPYOL1KlAFlyWmj/IhTZxGpuR1tqIf+F00LaXA8Q0uzAEnYgMDU0zXJ29S96K9TG8BDy3NvOS8wKChI1Uiu8mWpMg5VvKJ66ymWOWYZZkXFRjNxwLKvFvvrOpTlqU4ck17uV+5L7U44Z4+0yt148Fyrg2coCM5u3PqXPOWcbSo7Ty2/CJzCnB+HqtHBmlGYeMpvpuNwm43NhzTHE9D7Q8rUq2CaLInmQCqpztIpBMRmhX1bcZjREFFTSI0BFI8LS03aVva0pZgh2mDY4tjse89K6Bjd3Rc7nJapOAmrq/O2ldcml9CIBVDtP2vxqpQpG9OfvdDpw+GVc14CFydfGlHoHwKeyywdTEYdUySXYRYYFsC8VqsBaEVNSbsjp0+bJxjGx5MZFNUNcqJ+KvsOC8EaG7TX0TjGUnEdzbnDAb0OjB9MUR1ODhAOZ83yWG1cjdVZHc47CQ5La3VqGXq71h6ZEcSIxDWshUjIvoWjS8UY0a6LQjMkKR2Wg8mpsyJlcoF4O6J6LYZOMC2nCp5w2kuxioewLyGqgWfRG50Kiy1LcYEIbEd1NT6AaOBVNktZytoCwrBZ8K0BOr5CFVXr5GXjhOt0aEQpQpw39idQE4OKwDKmNgDE2Z2puwyTZMkyhyGxB/KgST5LrtpapvXGSlCwb0wYsK/g+dnfQkVpzTgHHvzNQ4YzoXXuD85ToLEUFn44tmCeF65rG5nBJL0a7K3oc767YewF/km0PGKFHw2vKt+e6M1gpqGolM8WzNeS8gsxGjLBIqevMaVxjlZcX2MaZEfyB7IwwehL0V1X6GOY4037/TOfWf+Za6lQYq8/3hF2byTpKnHmc5K0UoEA4F1xK4/v7lLYkn/37x3jM8vq8TMYyI2FMszrdFeDRekmukTBsdabdOumyaThXVl8DyG7S0ifpdbPZnJFFOwOjD5HZEeQxtqj5kQeWI8kbkYP7JVrDhgsIZ0QTAqZ84ypsdTQ+IZEj7MoR7lqEoD0+mIOxwPlTsPLtFy863N1AC/y9Qu/y10uZsFn8dKgrPNLO4hrwK/yJVE1l2gD4sLEDahuyBNXZOTdxBuWbe3r27Pp9MPEXIhHj5pZlQ7aNwGt6lC3R5/im3PrJCrnNOTP9Ofx/j09W58YTRTDN9JK5nh/hh3ErM5WTNW89VHXqShjNdwVs8k/mfY3LiY0c4GakOqVPNYt5cm4I0xthfZgfvps3LbfS/OFm7HJtcDG5E4wvX9ds79a+oRs2sLUPaF+SvDSdJwT8owGpbNQQF4VJ2MTU3Y4NfYl4Iln3wdJ0rerbh5kqgD4zf/NYrp+Tc6nnnQgbZnflO8FtzjFvL9OLbL2HkeU5Y2UKKEDIiajz9f1he3/mlghI5PCkd9ZaAOX49AqB0w/nj7WAtxtQefmo99YtaBsCAlrvWeOQwb2TcXDsDR4iTHH0y7cftK6RSnuz/SlSpeDNtqzjCXxztoaC57c2qx2rmnUoLJcVVFwc/G2by7axgrNyuwfLd8R6mt0g0BC/KR3yt5iJzOWlJtIesDWL/d6eg03uHI471zh1x42uqLrhXfdJyjtzNj8nXbay8Id0J431oQ2UuUN9pA3uAmqAXqRv8DCMPD0MlkJfZmfK4U1MCK4H46rt/reSgEVevolJ4pwmgOsmfwKVwacSN/J6qaHR7LQgdpeXkD9p56sEc7FhalJNIh5vlGmhYlKTkGyIwmt6QBSLrd40cy4KhCnlKbXqXBrr19+IwTAuaWbMdfrGO0woXtMI9pG8XZe0cnXsY+hiLE09gKGGifsXJ8W08f02RXfjPFwXe3RtCE2fP0Xd0kycsmYmwj9jtpJDYD35oKuAz1FtWRzxibH2nW+2rgGtcf6kZ5gV7aWLbewdusMnMNQrphyGseIKdXJj0I52sv90cD3kommhzMcab5rDzFILwZ6MJkB2F4IOqo9wEFMwIAjsvFIV69UW1C/d735gG/7V1ycnKZJ/wspZi9MNVbwd7GyZoMTmLWtsLUIRRt/cPBNmhxuxupqnZqzxw/XYibPSCjhMBkzyk2RsQ4S0r0hIhauYL32xbfC0vS02Q7rUecCCEpDq68CMu+uAyBpPckHxrZnQIzoeKFaXc7AnrOD7K5nmgmxcK2G0BrUHYMFEYFZYbkbwT7mmoDK26MtbH13T325Pby3uJBZTeB4pzLZwIn+YW2UX1v+YUzDOtWdkDoQ8rIU1Lq2PVRUtA7+C+k9Qtn2z7zQ8WTlhtHoxH79t1UPUdTz8H8KG123QUe9JNSfuHGXaCZsz5ENQp2uvAKXS/qaWcFCAYeuP9YETmMnxV1qDOcK2KztRh+Gu7I6oaYPuLtU/Swn4LA6jdC2l0aUyZL+wd6qfJfuBAuif/MYbwTAdED7dcFC8mGP2PVB8aE0tTtUS1oJUWBxsPFhpk1AfrFqnEq6mHyn4dK6DojUiUrowg1vD8fEOY02XnoeQT0n5HqRKchjwQtJtAl4GLxssVZyXqIKVgAvB+fClhfO1LL6rO4Rf+mwd61kYwMP7H4q3fp3cg8adx3l6Fo94fUEaeeYsJ1dfVGPdLrqUwv7sT6rBqxgIr3mTKiyyg7RHNuL6p5yook5Uq5IfvZiCJrzUmfPzF71r4aIQJqt0Ey7DSVTWtFwH109Ds5U+33qFMFJKh4gugvMjkfYA6wdD8cGOQcXd4EWlJENkJDLWMapLCtTFGKI/tkf9GXgE5HwHgrDtLeauG61ds+OTGMC7VkF/Ky6PyJ1fH7uxH6OWI6x9eGJ8z24hQQfySyu3FqtDMBfozWRpgrFz0ZnmT039+1vI0eU0kn/O18UW3s010Y88JUAs1kSBuIX83FBTMvOIri4yjyd9Zr3RAn0sjKbPU6niJouxDyltazmla5w/3dCMdbbWjT2l4S3G2+8GMxE2rARMVXkTX2iwGxhr64ZH/4E2mMo5QK8uy3aoIx0MbOuc67iRQX26nAuiursMX/sRfPX0p1jHHoPElODhJNdYlTaUTHJYxX89Ib4fXDMFP3b83V4XJD4RmL/DjsTcZ8TVfQjby9tTQz9zKcmagi3WsK/vmZt+ibiIPgDXNROLp+gk9W+u8CzhYdJNHATlOaZZ5DR1buD/R03QRfqlezawuz9suwE6rBPhRSwlCCVXArYNxfFuM6cLqnui2dF145h79Frwosk7xHZhxYXn4e2xYMf90S+H5+heCq+Sy0Or5MWwGnlUf3c5Lk30UmB6z9NHoKUWZqBvnvIpEKNYu1Z6i0Wavu+3gA0v7rp+f4Tl3PS4CwAgHHmhy6VCEeoumkyKs3+INDYL0zEph+YKW/agf2nAmrsvGSB36Teuf6kp1ovSdTQJy2lTQP8yVJZAKZIgzUaH/siZJAXYTju28I/HngBF6LHNMns0Fx9FYZ/NNcV0n1R7w1Vg1Rw1ywq03VO5gjwHAm2YySHpsuOiWhTKOU41x8xn7qT5MpkfI6UXl/L2rU0zNqcvSuOsuNH7N9wn6ElfLL6RtG0fnVMuJzMH4ZMSOPbM0/lxaIqVaXzn2jrmZq5OXcIl4DprJN4u+u71bCZQL9HJVKL6tB89nxpdJOmpXfyjxWY/MXoIVJwz9DdGPr37kbBmNLtwC9kGN/RmyZF6RGRH9D0PTeUWKoh8Cgu00M94G1+I7tfmrW2t48MmkZ5izHKq2MNjyPdgNhVjhgaR7EvVMxkI54rswFUVTPXCpXyNaUZ5PixQXSKFVpPtHjgP2Zy7IIb2yhwFogXGk3n6szL0jSZ0ufi54F0uftuVvp0rk9rkmtKb67HWoJXgRPsjz59SRQimeJ1IZKqw6AFpddhhalKAuF98Vh3cIWhEPm6/zEyPqBH5pMtaZgsoWgloxi3QGnLscqOxmf848+OlKr05T3xnVl3G7KqMiTJHx9weE+W7sptEPa3fJlHvwW5gTeUau3dTsRKAC+PKav3o/cWkbgh5lAQ7FIOjcDNBREXgWzV6HujBS0UzNpSMqQtNT/+gyevnxZvNuEkx1/qNxgpnzvm91YJ0HhEU3usObu2xY6efMCR9q952I5dw/ORA+Hlxa3ewbk1TK7sHWj56fmLQf9yIhIsjibzc9Xgia7M5er5VOJuj8UkK4nRPi530v+3evnD+mvVstCEAnJfW/v9B0//mwfpk3un5Q8UL+CYid8197WOhwe9tRNT6DA+th/EQ1K48oAoUNqPoZZzoMdWj71DYhhMPaP+AfjG//bsr0xAgawHSHrOxgOKha22oPSDV/cUVlpt/ab8zUgNgJmJleVvh3Di69iphZVEhWfK9Pc3GqnuMaPZYIvfbwl+1dO3yNZljAfQG7nr9zx9Verj2gsIAMf9iH1WT/abg0Tay3glqSaI9CEAl0ML2o/JdxM318kw2GnnMQ95UDcVm9ejvBP3LOs+1762EnEyMWgAuzC536rQlpeUpnlwhZ9dF8uR3yVNhfd1MtViZ2S2oTyxWcnE2sV+WJPb3y4gFy+pCgQWULpRWQOlCUQWUlpBTIxcRUiMXkVAjFxFPIy+VzcC6XCiiAbULJTWgdqHABtTOkFtLKR32fTWEr4bw1RC+GsL/H4awOxW9msKliL2awnmUXk1hmsyrKby5KaxA4Uw7hq+WcClir5ZwHqVXS5gm82oJb24JY/2P0KsVfLWCr1bw1QrerRV8EyMXf3PgmZMaCXvWZMauyZl/LkEJvNmQ/KFNbnww7WHIzqdC2OzgaMJasO006uXzZe54XcecWVxduY/pMNeqfQ6hPwEzs/x5LVcUK2D5cTH72Ur/U9tSpyXdXqW2GYDmRfN9yWNPyJhM1+Hzty6JwLcTUoLkp64jAbjw/KYfiLtgfszc5LxaEwaF4/4wvFYeUx2N72ov7B9pTi/TJchmcp2QulihS+F09dITD4+/ZAk7gLcS8UjG2Nkydi3qXrKUW4i3krMf8Bz5Ju1i4gXp85Oi+p1gW0sYqIc23Yd6do535x9IENcqWzruP68H6z9l4naeLtHbGu8oTW/QezngaV0yT4zciDX/1nySoT74KN1Jhkxj/mvURMU4soPdbLJsN+wb8WYHuxlv7oWhGzF3/J7RdblzFvRG3LX2mkjZdGVsXSnPAhwm7brvwnZUvLe4Ze83+/6srHwnpFkGP0o3ZjNflsEPuJy0/Uusspva/oC5OdvAglN4020gYHPOjrAgm7fdEQI+Z20OCzJ6280hYHTWPhElnPLZZu4TtgR0qf3BND6wLTXDAn33epWpVvYVHQ7zef0L1rGU+ssn6U9ElSDQv/8b4gL96+8fUAE12Ad/OHMFEQqLLSiERV4SBblqBJgihLboIEo5eLjLMZ7zqiZ04unNLl4iSQFMrar1lXSzCxH+8u0HW9oKW2zrub/68N3XD0HhW6yiO0p4kq8dEarB9CpsdVxF2eEbP3qnnh1b6Z1wkqcK1zUUt5gpO5KDH2UyNlPxQq/vXD2KbyvUSJCO8ls3zoZQkA82LNm+p03JE1DTNnydsE/6L6n65X4DAb5BB96IIGAQv87xf5+chGxPVJm5Du0vY0ZsY4rWFsSsr/2Yqdtw4RvME7aN17OZ0Fu2xvmTtEXDcW9/zTkFfGIXsY+iAbQvbWtvAaZKbPj8PvZNutrtxxXGavAClDgkobs35TJgW8Ig1k/MYj/rDY9vkVTO6NrCPFvG5gqTgsc9utY8Bg1yaMb3zT0RUGSKbBOdl87YPH9VWBGpSC6DLfTvepyPepgkPvuZbPnDmS8tVwIziaMtj8YZmMFEkpFw0GAvIWb324oLHh83C2DFm9R7lRP3q7PrUv8allB7pbGB74C5KY6GuMeaB90KPcmfQMmuRcgc3L7ZhvnpzbDb3aIHe+r9aFw8l26Ye6ezVMOgflbNsNhPUwyD+jn1IgQ9csjDefTQeB27Z0YzpdGmXRDsSB5snu03zjV+Ff5EqqZKphegOeKeSjOYyb/+fLB4HNvm3bpR/NrNeTHgfw3aWIXtiPr7VXK+grgQEerwItlqH4gwEC13rmx+Bl9ahaVpV3OzlW2GtCvbvIR9ElKzUdwYqn8fanp9D9Ea25AIIFwPrxt1Eq/Hek4G7bnG0270uLStgrbtebbzis+1m8YyvZQFam/5zRup4VKd44a9FBY6rbJWxq+Cds1GW5Gg/k6WbQiF7EVNjd/PNLIZ29mGNrI8H/jJwjbjTXbx6ScF3QzcvKZJ7YrMcfQ4eh1serT50A4svyG0A8uj0KKBiO6N68woQ6p79uXRfP+Edi9EqLibZttvkpvel7Y/q3MujgXH+/09N1wEyY8mWuM743z48O3Pu99dGPlIr8lLg3++g61/c9XlYKV737SRzfKotb5nxoA1z9275doKNcmgOfwcd79fgsPYtVXYCh99VcmvLfPB3YZ/e1aabrtRwrL28QfCtu4lY6+/Xw+U6bu2V5JthnkUxbQfvJacNsr1fH7Qp9njPtDo0anDozmTPeIdmBBkJR9TDVVdn2S0BqVn2jeHtom+c7pDmxGuNz9uANvZycrVS9LLENUg3F4BO2AjL7Oap6yvB7WNlAcdVDtteug0yVxhDna3KFnF+ZNmM+dVTUGNOa5YqmxDGNELLMlgIm9hVjtrFX2m2yMrhvxMWPYu8H8lg94N8FYANffQQXDfhCxslql5XwL9VwoP6r2oaK17XQMWNhv+KL89YuKPKPZNvgFjOnd3mBEwvX0c3eZPB8Kr6jrXx4O2hWHAO/FocHAtnMyz9N818+3QmzZ7YodpWtvdz25zE+nDCP3brpDrY46jZM2COZNjexGmuCl1N0cJ+QJ4N8dqz5Gd/ihRQ8aAHmrFufLQdkfYRxGuJIRgBGTMRi9oFtf58eQbomRGWGanMtJyfAnk7atSNm3eDGptEs9NoK9A+1If93DQx9fkeJRAI8lDlqYlQ1j/V4QVJsMH4dZtZrwA1DDtmGBUAt4dUDpMRblryZtrh1Bb000jTJJKQfCWcUlGAt2ABT1kN7N3xsv1XLpqLe3Jeo1dw4a7VvYyL6FoaCLWdaa+j7/RekFo6oej94LNcajbGwc5Te1F+ISx22FBeCNRXWJpA7PB7uaCskkDEKWYFtK8qFiR8P3QggfdYz/Q5BS79CqvP+4o5RrlW92KVZR2n7/5E4JhVFsd77j3nnMBxM36sSTtd+2DYxMhWgF1Rvk2WzebDYhnkZN17jUSLJx3765CJ0ys//xaYUpB+BfWWuvkjjZez0K3bzqgpLfcNsfm2aSCc9VgSg/tmXIgE/RnkrxJRUgepAJTvAyFdX0L2JEc7IraYO225pghvNlArs4QUOiTPJuMAtEE7gbeBHN/lKsTfv5sgqBXEpWACtdZLcgOK8h2BPbPKCkDpraPEdWHt5y9tQvNpQraPK8kWQ1erhZfbW4nf0axaAfEo5gDte/LvQzgY65eknDCBXzzfwEAAP//kFpVuw==" + return "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" } diff --git a/metricbeat/module/mongodb/metrics/_meta/fields.yml b/metricbeat/module/mongodb/metrics/_meta/fields.yml index 973153e2b9bd..a3b89c0c1ec6 100644 --- a/metricbeat/module/mongodb/metrics/_meta/fields.yml +++ b/metricbeat/module/mongodb/metrics/_meta/fields.yml @@ -384,7 +384,7 @@ - name: shutting_down type: boolean - name: network_interface - type: text + type: keyword - name: apply type: group description: > diff --git a/metricbeat/module/php_fpm/fields.go b/metricbeat/module/php_fpm/fields.go index fd226faf68c4..42f9698f953c 100644 --- a/metricbeat/module/php_fpm/fields.go +++ b/metricbeat/module/php_fpm/fields.go @@ -32,5 +32,5 @@ func init() { // AssetPhpFpm returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/php_fpm. func AssetPhpFpm() string { - return "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" + return "eJzMWV1v67gRfc+vGOTlOqgj7L6mQIFiu9ubh90aublPRSGPqbFFhB9acmTH++uLoT4sy3ISN25RPVwgojk85/DMcKh7Dy+0f4CqrPJ1ZW8AWLOhB7hdfF3kvyx+vb0BKCiqoCvW3j3AX24AABZfF/e/LH6FSGFLASIj1xEscdAqgvLGkGIqYB287X6c3QDE0gfOlXdrvXmANZpINwCBDGGkB9ig/IaYtdvEB/jnbYzmdg63JXN1+68bgLUmU8SHhOEeHFoaYpeH95UECr6u2jcT8OVZtvOWoLxj1C4Cl9Rz4BIZdhQI/EpGR2Rayn20CjcECo3J2ldDpEdovTf9yym4b0BuYHtvLsQsv+lwV8ErijHhyAaRx3iHmOXfo4EO9wvtdz4Uo7E30MvzXFKKCH6dkB0j+T/T6SjmWLNj335EyTZqbtHhhsL1RP3GyFrNodg7tFqBD+BdQRZdkU0iUd45UhIuTqIYS/0BDD/1IVN2EMSKlF5rlf7UkbWK2WjWlFgHkKgUVUxjLTqMxrvNydA7IFv/1XZFQRyonfJWuw0E+r2myK07hlZoi1yJsQf054m4u5Ic4EBY0IcJoFn+DGT9dmg3oyOTg99rqmmsTadCGry+BqoOgRwPtBh4olGhxC3BisiBdpo1MhVzWNUMzvNE1D1xTziDR0lvHWGLpiYh77y7/4OCFy14X2kpl3uwhN1yaMxEVJEJt6gNrgx1m9EmEkXA0FMxe1jVcT8HdIVMC5RGnZ+IOgjQx2bfhE9LOnrlzhQZPKGOekJpKTQ2s/iaq1KbIpBbwqwKfqsLShg6wAodlOgKQ6D5Tg7C2hRQkhknmTwvRFUjXrs5xu8yeJYXVfAVBd7D2hvjd/FgpTUqTjpOBOys3NgtwlYjIESvXohh9vzTQgrGWhuCFUYq7joJ6wjalRQ0j6uEPNEfqrgqMaBiCk2ey+sm/EnKd7YW0Ro8eXL41Q1u8VXb2g4M3ue4dgl0WlcGKnLF9PYOcyJqpwhER6kFkTGI0c/QG1LLDbmr04v6j179difHfIbop4+BPg2udQgs2v7iSieALsz1jXEwRJOcvR+WO9TSe0olaJVZtkxmOqPsTN07lB+JJ/MxNYR3bc42FbBN+TUaAyvinZRVLk/ZtSVFuzxWGChvMS5TSnbVZjSUVojNETQds+v72s5D6vGybRaW5yyMivX2fyF/dxS1IA8Kwn3TuGmXMllA/7icCDuLHmhLDrwcwetaDhaxTrvCPEUJFGvDsNNpA2QvIRAWsPxheXdOAvaMp4fSFdsPAfmnVulDNr5VM/9Lu3JaLcegLqt/wzMxD4SqvHIP81sPlLWl2OxxZ3OjreYEM7Uv7frzc21bZYGDpphaAOEF1ktf0eKH2c6HlwjeGTl4x327PJWFL20+fUmZ+qXrv7/cTZfeaPwu706kyfI7octH7lbHugB2xx7QK6k6daYyktShV0VUTOzMsp2UC0zjN7lM8TUvz5AR0fJkkCtR+W1QJZR3xYfsdwxHIE+iKZDHA2sfLPIDUOVVmTdLXq69BG5aJxH4LNTR6fuZe25n+M9edP+Te21PQx9L1ZBAo3F0f0Yue9LZeJbVm4ANRQ6jdvBN6UX4xePf+u8JJ6IOXDHa9/M37ndXbNqC4zVh9lgYmsNT7Zx2mzkQq7tpIFP2PGPOd635LtZjWw4BD+x5FudpVjdAtWMaf8R4F4o7k9YfBzVZMq+CaPAJYARGuog3sORF3Vj3Wpi6eNKYWq2C78Sa/QhWG9MOYSviXX8LaxupruLP7B78zkFB63SD927Kjh0LS1z6S1K5ZK6y7o48MftTKd1xaOLC7O8/P89h8Y9vz01awWya81sE66AvYFcHk/mgN9qNWsCr0Pr+9Ag7zWV3EQ17iByk9b2AmFR9ciz3yw2Xl+9crLyLlK18sc9Wex5dAz/Fs4UGDbTOoL0xUyuV+MuWXrSbdRyl0zvbGClkJ5+wP8VNQsJs8XWR//X789f8+7efn4RBgHvQ63SxiMR3MFv78FFSzYrXOpwsateGTP8rQcUn4RmM3DWruarqCaAnLd4HUL4CWl87FntYsj7sm6+iGA81THkXaysMmm+oaHa4j/CDcBkW6vSFkaUsPqabXzqfV6SwjtQFV2hUbbD7Olt4R/2luV9wcAuV4s8UrHbIVLwrTLPKtQ6Ba2XQvwMAAP//DDPVBA==" } diff --git a/metricbeat/module/php_fpm/process/_meta/fields.yml b/metricbeat/module/php_fpm/process/_meta/fields.yml index 252c75455c3c..aa3fe71dca95 100644 --- a/metricbeat/module/php_fpm/process/_meta/fields.yml +++ b/metricbeat/module/php_fpm/process/_meta/fields.yml @@ -56,7 +56,7 @@ description: > The user (PHP_AUTH_USER) (or - if not set) (for the current request) - name: script - type: text + type: keyword description: > The main script called (or - if not set) (for the current request) - name: last_request_cpu From 1a392fb21c3ca35b7b3f4aee9e6cb63fb7ad7564 Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Tue, 29 Jan 2019 22:21:43 -0700 Subject: [PATCH 15/66] Add description into AWS EC2 dashboard (#10412) * Add description into AWS EC2 dashboard * Set path to "/" in order to use data_generator.go --- .../_meta/kibana/7/dashboard/Metricbeat-aws-ec2-overview.json | 2 +- x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/metricbeat/module/aws/_meta/kibana/7/dashboard/Metricbeat-aws-ec2-overview.json b/x-pack/metricbeat/module/aws/_meta/kibana/7/dashboard/Metricbeat-aws-ec2-overview.json index 23087ee392ac..28396b84e0dc 100644 --- a/x-pack/metricbeat/module/aws/_meta/kibana/7/dashboard/Metricbeat-aws-ec2-overview.json +++ b/x-pack/metricbeat/module/aws/_meta/kibana/7/dashboard/Metricbeat-aws-ec2-overview.json @@ -478,7 +478,7 @@ }, { "attributes": { - "description": "", + "description": "Overview of AWS EC2 Metrics", "hits": 0, "kibanaSavedObjectMeta": { "searchSourceJSON": { diff --git a/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go b/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go index 863b4f6be462..c45d73bb58d1 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go @@ -82,7 +82,7 @@ func TestFetch(t *testing.T) { checkEventField("status.check_failed_instance", "int", event, t) } - err := mbtest.WriteEventsReporterV2(awsMetricSet, t, "") + err := mbtest.WriteEventsReporterV2(awsMetricSet, t, "/") if err != nil { t.Fatal("write", err) } From 197901b0fcc41a2eb40060d3285bf9a5fc1f9c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillaume=20Dor=C3=A9?= Date: Wed, 30 Jan 2019 08:48:34 +0100 Subject: [PATCH 16/66] Add servicebeat to list of Community Beats (#10406) Signed-off-by: Guillaume Dore --- libbeat/docs/communitybeats.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/libbeat/docs/communitybeats.asciidoc b/libbeat/docs/communitybeats.asciidoc index d9d7615bfecc..8114b083629e 100644 --- a/libbeat/docs/communitybeats.asciidoc +++ b/libbeat/docs/communitybeats.asciidoc @@ -93,6 +93,7 @@ https://github.com/consulthys/retsbeat[retsbeat]:: Collects counts of http://www https://github.com/yourdream/rsbeat[rsbeat]:: Ships redis slow logs to elasticsearch and analyze by Kibana. https://github.com/martinhoefling/saltbeat[saltbeat]:: Reads events from salt master event bus. https://github.com/benben/serialbeat[serialbeat]:: Reads from a serial device. +https://github.com/Corwind/servicebeat[servicebeat]:: Send services status to Elasticsearch https://github.com/consulthys/springbeat[springbeat]:: Collects health and metrics data from Spring Boot applications running with the actuator module. https://github.com/philkra/springboot2beat[springboot2beat]:: Query and accumulate all metrics endpoints of a Spring Boot 2 web app via the web channel, leveraging the http://micrometer.io/[mircometer.io] metrics facade. https://github.com/sentient/statsdbeat[statsdbeat]:: Receives UDP https://github.com/etsy/statsd/wiki[statsd] events from a statsd client. From 55c55234803cf7fd3f4acfbea65315fb97928785 Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Wed, 30 Jan 2019 01:19:38 -0700 Subject: [PATCH 17/66] Fix server_integration_test.go version_date (#10420) --- metricbeat/module/zookeeper/server/server_integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metricbeat/module/zookeeper/server/server_integration_test.go b/metricbeat/module/zookeeper/server/server_integration_test.go index 7c5d4abecbc4..75b8beb9940c 100644 --- a/metricbeat/module/zookeeper/server/server_integration_test.go +++ b/metricbeat/module/zookeeper/server/server_integration_test.go @@ -48,7 +48,7 @@ func TestFetch(t *testing.T) { metricsetFields := event.MetricSetFields // Check values - assert.Equal(t, "06/29/2018 04:05 GMT", metricsetFields["version_date"]) + assert.Equal(t, "02/06/2016 03:18 GMT", metricsetFields["version_date"]) received := metricsetFields["received"].(int64) assert.True(t, received >= 0) From 9d8de3e5d23afe842ceaf8115d2aefdf01ddd54f Mon Sep 17 00:00:00 2001 From: Christoph Wurm Date: Wed, 30 Jan 2019 10:28:01 +0000 Subject: [PATCH 18/66] Make user.group.name optional in system test on Windows. (#10404) --- x-pack/auditbeat/tests/system/test_metricsets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/auditbeat/tests/system/test_metricsets.py b/x-pack/auditbeat/tests/system/test_metricsets.py index a5ac543bd211..e8007792c2a6 100644 --- a/x-pack/auditbeat/tests/system/test_metricsets.py +++ b/x-pack/auditbeat/tests/system/test_metricsets.py @@ -41,12 +41,12 @@ def test_metricset_process(self): """ fields = ["process.pid", "process.ppid", "process.name", "process.executable", "process.args", - "process.start", "process.working_directory", "user.id", "user.group.id", "user.group.name"] + "process.start", "process.working_directory", "user.id", "user.group.id"] # Windows does not have effective and saved IDs, and user.name is not always filled for system processes. if sys.platform != "win32": fields.extend(["user.effective.id", "user.saved.id", "user.effective.group.id", "user.saved.group.id", - "user.name"]) + "user.name", "user.group.name"]) # Metricset is experimental and that generates a warning, TODO: remove later self.check_metricset("system", "process", COMMON_FIELDS + fields, warnings_allowed=True) From d5fb4fa35bd967cfd1a94f5ee5e91f97b45952a6 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Wed, 30 Jan 2019 13:00:44 +0100 Subject: [PATCH 19/66] [Auditbeat] Fix flaky TestRecursive test under Windows (#10424) (#10425) Write events to a file may be reported long before the write has been performed and get interleaved between other events. This patch ensures that the test ignores any further write events after write has been tested. --- .../file_integrity/monitor/monitor_test.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/auditbeat/module/file_integrity/monitor/monitor_test.go b/auditbeat/module/file_integrity/monitor/monitor_test.go index 0b496c8e604d..9b028bae83ab 100644 --- a/auditbeat/module/file_integrity/monitor/monitor_test.go +++ b/auditbeat/module/file_integrity/monitor/monitor_test.go @@ -299,12 +299,14 @@ func testDirOps(t *testing.T, dir string, watcher Watcher) { ev, err = readTimeout(t, watcher) } - // Helper to read events ignoring a write to the parent dir, which seems - // to trigger sometimes under Windows when moving files around in a dir. - readIgnoreParent := func(t *testing.T, w Watcher) (fsnotify.Event, error) { + // Helper to read events ignoring writes. These have been observed + // under Windows in two cases: + // - Writes to the parent dir (metadata updates after update loop above?) + // - Delayed writes to "fpath" file, not discarded by above consumer loop. + readIgnoreWrites := func(t *testing.T, w Watcher) (fsnotify.Event, error) { for { ev, err := readTimeout(t, w) - if err != nil || ev.Name != dir || ev.Op != fsnotify.Write { + if err != nil || ev.Op != fsnotify.Write { return ev, err } } @@ -314,10 +316,10 @@ func testDirOps(t *testing.T, dir string, watcher Watcher) { err = os.Rename(fpath, fpath2) assertNoError(t, err) - evRename, err := readIgnoreParent(t, watcher) + evRename, err := readIgnoreWrites(t, watcher) assertNoError(t, err) - evCreate, err := readIgnoreParent(t, watcher) + evCreate, err := readIgnoreWrites(t, watcher) assertNoError(t, err) if evRename.Op != fsnotify.Rename { @@ -334,7 +336,7 @@ func testDirOps(t *testing.T, dir string, watcher Watcher) { err = os.Remove(fpath2) assertNoError(t, err) - ev, err = readIgnoreParent(t, watcher) + ev, err = readIgnoreWrites(t, watcher) assertNoError(t, err) assert.Equal(t, fpath2, ev.Name) From 9a26946cb6ba032f9bd679c44df91e1319661af3 Mon Sep 17 00:00:00 2001 From: Mathieu Martin Date: Wed, 30 Jan 2019 08:43:55 -0500 Subject: [PATCH 20/66] Ensure source.address is always populated by the nginx module (#10418) --- CHANGELOG.next.asciidoc | 1 + filebeat/module/nginx/access/ingest/default.json | 7 +++++++ filebeat/module/nginx/access/test/test.log-expected.json | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 029824c74aee..6f12484b1b9e 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -134,6 +134,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Make elasticsearch/audit fileset be more lenient in parsing node name. {issue}10035[10035] {pull}10135[10135] - Fix bad bytes count in `docker` input when filtering by stream. {pull}10211[10211] - Fixed data types for roles and indices fields in `elasticsearch/audit` fileset {pull}10307[10307] +- Ensure `source.address` is always populated by the nginx module (ECS). {pull}10418[10418] *Heartbeat* diff --git a/filebeat/module/nginx/access/ingest/default.json b/filebeat/module/nginx/access/ingest/default.json index cb2752df2165..058135efdc85 100644 --- a/filebeat/module/nginx/access/ingest/default.json +++ b/filebeat/module/nginx/access/ingest/default.json @@ -49,6 +49,13 @@ } } }, + { + "convert": { + "field": "source.ip", + "target_field": "source.address", + "type": "string" + } + }, { "remove": { "field": "message" diff --git a/filebeat/module/nginx/access/test/test.log-expected.json b/filebeat/module/nginx/access/test/test.log-expected.json index e5cfc798da27..8e8dff7e7de4 100644 --- a/filebeat/module/nginx/access/test/test.log-expected.json +++ b/filebeat/module/nginx/access/test/test.log-expected.json @@ -18,6 +18,7 @@ "127.0.0.1" ], "service.type": "nginx", + "source.address": "10.0.0.2", "source.ip": "10.0.0.2", "url.original": "/ocelot", "user.name": "-", @@ -48,6 +49,7 @@ "172.17.0.1" ], "service.type": "nginx", + "source.address": "172.17.0.1", "source.ip": "172.17.0.1", "url.original": "/stringpatch", "user.name": "-", @@ -79,6 +81,7 @@ "85.181.35.98" ], "service.type": "nginx", + "source.address": "85.181.35.98", "source.geo.city_name": "Berlin", "source.geo.continent_name": "Europe", "source.geo.country_iso_code": "DE", @@ -116,6 +119,7 @@ "85.181.35.98" ], "service.type": "nginx", + "source.address": "85.181.35.98", "source.geo.city_name": "Berlin", "source.geo.continent_name": "Europe", "source.geo.country_iso_code": "DE", @@ -157,6 +161,7 @@ "10.2.1.185" ], "service.type": "nginx", + "source.address": "199.96.1.1", "source.geo.city_name": "Springfield", "source.geo.continent_name": "North America", "source.geo.country_iso_code": "US", @@ -192,6 +197,7 @@ "10.2.2.121" ], "service.type": "nginx", + "source.address": "2a03:0000:10ff:f00f:0000:0000:0:8000", "source.geo.continent_name": "Europe", "source.geo.country_iso_code": "PT", "source.geo.location.lat": 39.5, @@ -222,6 +228,7 @@ "127.0.0.1" ], "service.type": "nginx", + "source.address": "127.0.0.1", "source.ip": "127.0.0.1", "user.name": "-", "user_agent.device": "Other", From a11e82a8b48a7fd53637b49e6494b1a680e06e61 Mon Sep 17 00:00:00 2001 From: Steffen Siering Date: Wed, 30 Jan 2019 15:54:46 +0100 Subject: [PATCH 21/66] Update go-ucfg to 0.7.0 (#10363) * Update go-ucfg to 0.7.0 This introduces: - (*common.Config).Has: check for setting or namespace by path (can walk a configuration) - (*common.Config).Remove: remove a configuration. Note: removing from dynamically parsed objects (e.g. parsed objects by splicing in a custom string via environment variable) is not possible. --- CHANGELOG-developer.next.asciidoc | 1 + NOTICE.txt | 4 +- libbeat/common/config.go | 8 ++ .../github.com/elastic/go-ucfg/CHANGELOG.md | 14 +++- vendor/github.com/elastic/go-ucfg/README.md | 2 +- vendor/github.com/elastic/go-ucfg/error.go | 7 ++ vendor/github.com/elastic/go-ucfg/fieldset.go | 2 +- .../github.com/elastic/go-ucfg/flag/file.go | 9 ++ .../github.com/elastic/go-ucfg/json/json.go | 6 +- vendor/github.com/elastic/go-ucfg/opts.go | 5 +- vendor/github.com/elastic/go-ucfg/path.go | 84 +++++++++++++++++++ vendor/github.com/elastic/go-ucfg/reify.go | 6 +- vendor/github.com/elastic/go-ucfg/types.go | 12 ++- vendor/github.com/elastic/go-ucfg/ucfg.go | 60 ++++++++++++- vendor/github.com/elastic/go-ucfg/unpack.go | 7 +- .../github.com/elastic/go-ucfg/yaml/yaml.go | 6 +- vendor/vendor.json | 56 ++++++------- 17 files changed, 237 insertions(+), 52 deletions(-) diff --git a/CHANGELOG-developer.next.asciidoc b/CHANGELOG-developer.next.asciidoc index 0317f68c503d..bdab0784535a 100644 --- a/CHANGELOG-developer.next.asciidoc +++ b/CHANGELOG-developer.next.asciidoc @@ -26,3 +26,4 @@ The list below covers the major changes between 7.0.0-alpha2 and master only. - Allow multiple object type configurations per field. {pull}9772[9772] - Move agent metadata addition to a processor. {pull}9952[9952] +- Add (*common.Config).Has and (*common.Config).Remove. {pull}10363[10363] diff --git a/NOTICE.txt b/NOTICE.txt index 31605f262ec7..f9b2bb772671 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -667,8 +667,8 @@ Apache License 2.0 -------------------------------------------------------------------- Dependency: github.com/elastic/go-ucfg -Version: v0.6.5 -Revision: 92d43887f91851c9936621665af7f796f4d03412 +Version: v0.7.0 +Revision: 0539807037ce820e147797f051ff32b05f4f9288 License type (autodetected): Apache-2.0 ./vendor/github.com/elastic/go-ucfg/LICENSE: -------------------------------------------------------------------- diff --git a/libbeat/common/config.go b/libbeat/common/config.go index 3bf2e653ce1b..7cfca0922459 100644 --- a/libbeat/common/config.go +++ b/libbeat/common/config.go @@ -188,6 +188,14 @@ func (c *Config) PathOf(field string) string { return c.access().PathOf(field, ".") } +func (c *Config) Remove(name string, idx int) (bool, error) { + return c.access().Remove(name, idx, configOpts...) +} + +func (c *Config) Has(name string, idx int) (bool, error) { + return c.access().Has(name, idx, configOpts...) +} + func (c *Config) HasField(name string) bool { return c.access().HasField(name) } diff --git a/vendor/github.com/elastic/go-ucfg/CHANGELOG.md b/vendor/github.com/elastic/go-ucfg/CHANGELOG.md index 3ec656a88878..f6c0b4c30260 100644 --- a/vendor/github.com/elastic/go-ucfg/CHANGELOG.md +++ b/vendor/github.com/elastic/go-ucfg/CHANGELOG.md @@ -14,6 +14,15 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +## [0.7.0] + +### Added +- Add (*Config).Has. #127 +- Add (*Config).Remove. #126 + +### Removed +- Remove CI and support for go versions <1.10. #128 + ## [0.6.5] ### Added @@ -225,8 +234,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Introduced CHANGELOG.md for documenting changes to ucfg. -[Unreleased]: https://github.com/elastic/go-ucfg/compare/v0.6.5...HEAD -[0.6.4]: https://github.com/elastic/go-ucfg/compare/v0.6.4...v0.6.5 +[Unreleased]: https://github.com/elastic/go-ucfg/compare/v0.7.0...HEAD +[0.7.0]: https://github.com/elastic/go-ucfg/compare/v0.6.5...v0.7.0 +[0.6.5]: https://github.com/elastic/go-ucfg/compare/v0.6.4...v0.6.5 [0.6.4]: https://github.com/elastic/go-ucfg/compare/v0.6.3...v0.6.4 [0.6.3]: https://github.com/elastic/go-ucfg/compare/v0.6.2...v0.6.3 [0.6.2]: https://github.com/elastic/go-ucfg/compare/v0.6.1...v0.6.2 diff --git a/vendor/github.com/elastic/go-ucfg/README.md b/vendor/github.com/elastic/go-ucfg/README.md index 515d38d5f9c1..9898e38a46f6 100644 --- a/vendor/github.com/elastic/go-ucfg/README.md +++ b/vendor/github.com/elastic/go-ucfg/README.md @@ -89,4 +89,4 @@ The above uses `Counter` as the config variable. ucfg assures that the value is ucfg has the following requirements: -* Golang 1.7+ +* Golang 1.10+ diff --git a/vendor/github.com/elastic/go-ucfg/error.go b/vendor/github.com/elastic/go-ucfg/error.go index 2c057b9cf123..a48690e30a82 100644 --- a/vendor/github.com/elastic/go-ucfg/error.go +++ b/vendor/github.com/elastic/go-ucfg/error.go @@ -61,6 +61,8 @@ type criticalError struct { var ( ErrMissing = errors.New("missing field") + ErrNoParse = errors.New("parsing dynamic configs is disabled") + ErrCyclicReference = errors.New("cyclic reference detected") ErrDuplicateValidator = errors.New("validator already registered") @@ -259,6 +261,11 @@ func raiseUnsupportedInputType(ctx context, meta *Meta, v reflect.Value) Error { return raiseCritical(reason, messagePath(reason, meta, message, ctx.path("."))) } +func raiseNoParse(ctx context, meta *Meta) Error { + reason := ErrNoParse + return raisePathErr(reason, meta, "", ctx.path(".")) +} + func raiseNil(reason error) Error { // programmers error (passed unexpected nil pointer) return raiseCritical(reason, "") diff --git a/vendor/github.com/elastic/go-ucfg/fieldset.go b/vendor/github.com/elastic/go-ucfg/fieldset.go index 1d1fb6f450ca..e797f18417db 100644 --- a/vendor/github.com/elastic/go-ucfg/fieldset.go +++ b/vendor/github.com/elastic/go-ucfg/fieldset.go @@ -22,7 +22,7 @@ type fieldSet struct { parent *fieldSet } -func NewFieldSet(parent *fieldSet) *fieldSet { +func newFieldSet(parent *fieldSet) *fieldSet { return &fieldSet{ fields: map[string]struct{}{}, parent: parent, diff --git a/vendor/github.com/elastic/go-ucfg/flag/file.go b/vendor/github.com/elastic/go-ucfg/flag/file.go index d59c98396a0c..de08b4b2dd86 100644 --- a/vendor/github.com/elastic/go-ucfg/flag/file.go +++ b/vendor/github.com/elastic/go-ucfg/flag/file.go @@ -24,8 +24,17 @@ import ( "github.com/elastic/go-ucfg" ) +// FileLoader is used by NewFlagFiles to define customer file loading functions +// for different file extensions. type FileLoader func(name string, opts ...ucfg.Option) (*ucfg.Config, error) +// NewFlagFiles create a new flag, that will load external configurations file +// when being used. Configurations loaded from multiple files will be merged +// into one common Config object. If cfg is not nil, then the loaded +// configurations will be merged into cfg. +// The extensions parameter define custom file loaders for different file +// extensions. If extensions contains an entry with key "", then this loader +// will be used as default fallback. func NewFlagFiles( cfg *ucfg.Config, extensions map[string]FileLoader, diff --git a/vendor/github.com/elastic/go-ucfg/json/json.go b/vendor/github.com/elastic/go-ucfg/json/json.go index cd2ded820a15..d45a01435515 100644 --- a/vendor/github.com/elastic/go-ucfg/json/json.go +++ b/vendor/github.com/elastic/go-ucfg/json/json.go @@ -24,6 +24,7 @@ import ( "github.com/elastic/go-ucfg" ) +// NewConfig creates a new configuration object from the JSON string passed via in. func NewConfig(in []byte, opts ...ucfg.Option) (*ucfg.Config, error) { var m interface{} if err := json.Unmarshal(in, &m); err != nil { @@ -32,12 +33,15 @@ func NewConfig(in []byte, opts ...ucfg.Option) (*ucfg.Config, error) { return ucfg.NewFrom(m, opts...) } +// NewConfigWithFile loads a new configuration object from an external JSON file. func NewConfigWithFile(name string, opts ...ucfg.Option) (*ucfg.Config, error) { input, err := ioutil.ReadFile(name) if err != nil { return nil, err } - opts = append([]ucfg.Option{ucfg.MetaData(ucfg.Meta{name})}, opts...) + opts = append([]ucfg.Option{ + ucfg.MetaData(ucfg.Meta{Source: name}), + }, opts...) return NewConfig(input, opts...) } diff --git a/vendor/github.com/elastic/go-ucfg/opts.go b/vendor/github.com/elastic/go-ucfg/opts.go index 69937340c776..565adef69000 100644 --- a/vendor/github.com/elastic/go-ucfg/opts.go +++ b/vendor/github.com/elastic/go-ucfg/opts.go @@ -33,6 +33,7 @@ type options struct { env []*Config resolvers []func(name string) (string, error) varexp bool + noParse bool configValueHandling configHandling @@ -137,7 +138,7 @@ func doResolveNOOP(o *options) { } var ( - // ReplacesValues option configures all merging and unpacking operations to + // ReplaceValues option configures all merging and unpacking operations to // replace old dictionaries and arrays while merging. Value merging can be // overwritten in unpack by using struct tags. ReplaceValues = makeOptValueHandling(cfgReplaceValue) @@ -170,7 +171,7 @@ func makeOptions(opts []Option) *options { validatorTag: "validate", pathSep: "", // no separator by default parsed: map[string]spliceValue{}, - activeFields: NewFieldSet(nil), + activeFields: newFieldSet(nil), } for _, opt := range opts { opt(&o) diff --git a/vendor/github.com/elastic/go-ucfg/path.go b/vendor/github.com/elastic/go-ucfg/path.go index 44755e956459..ff7e63014234 100644 --- a/vendor/github.com/elastic/go-ucfg/path.go +++ b/vendor/github.com/elastic/go-ucfg/path.go @@ -32,6 +32,7 @@ type field interface { String() string SetValue(opt *options, elem value, v value) Error GetValue(opt *options, elem value) (value, Error) + Remove(opt *options, elem value) (bool, Error) } type namedField struct { @@ -110,6 +111,32 @@ func (i idxField) String() string { return fmt.Sprintf("%d", i.i) } +func (p cfgPath) Has(cfg *Config, opt *options) (bool, Error) { + fields := p.fields + + cur := value(cfgSub{cfg}) + for ; len(fields) > 0; fields = fields[1:] { + field := fields[0] + next, err := field.GetValue(opt, cur) + if err != nil { + // has checks if a value is missing -> ErrMissing is no error but a valid + // outcome + if err.Reason() == ErrMissing { + err = nil + } + return false, err + } + + if next == nil { + return false, nil + } + + cur = next + } + + return true, nil +} + func (p cfgPath) GetValue(cfg *Config, opt *options) (value, Error) { fields := p.fields @@ -223,3 +250,60 @@ func (i idxField) SetValue(opts *options, elem value, v value) Error { v.SetContext(context{parent: elem, field: i.String()}) return nil } + +func (p cfgPath) Remove(cfg *Config, opt *options) (bool, error) { + fields := p.fields + + // Loop over intermediate objects. Returns an error if any intermediate is + // actually no object. + cur := value(cfgSub{cfg}) + for ; len(fields) > 1; fields = fields[1:] { + field := fields[0] + next, err := field.GetValue(opt, cur) + if err != nil { + // Ignore ErrMissing when walking down a config tree. If intermediary is + // missing we can't remove our setting. + if err.Reason() == ErrMissing { + err = nil + } + + return false, err + } + + if next == nil { + return false, err + } + + cur = next + } + + // resolve config object in case we deal with references + tmp, err := cur.toConfig(opt) + if err != nil { + return false, err + } + cur = cfgSub{tmp} + + field := fields[0] + return field.Remove(opt, cur) +} + +func (n namedField) Remove(opts *options, elem value) (bool, Error) { + sub, ok := elem.(cfgSub) + if !ok { + return false, raiseExpectedObject(opts, elem) + } + + removed := sub.c.fields.del(n.name) + return removed, nil +} + +func (i idxField) Remove(opts *options, elem value) (bool, Error) { + sub, ok := elem.(cfgSub) + if !ok { + return false, raiseExpectedObject(opts, elem) + } + + removed := sub.c.fields.delAt(i.i) + return removed, nil +} diff --git a/vendor/github.com/elastic/go-ucfg/reify.go b/vendor/github.com/elastic/go-ucfg/reify.go index ae88d18b77ef..c209964b8831 100644 --- a/vendor/github.com/elastic/go-ucfg/reify.go +++ b/vendor/github.com/elastic/go-ucfg/reify.go @@ -189,7 +189,7 @@ func reifyMap(opts *options, to reflect.Value, from *Config) Error { to.Set(reflect.MakeMap(to.Type())) } for k, value := range fields { - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) key := reflect.ValueOf(k) old := to.MapIndex(key) @@ -249,7 +249,7 @@ func reifyStruct(opts *options, orig reflect.Value, cfg *Config) Error { opts = tmp } - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) vField := to.Field(i) validators, err := parseValidatorTags(stField.Tag.Get(opts.validatorTag)) @@ -656,7 +656,7 @@ func doReifyPrimitive( } previous := opts.opts.activeFields - opts.opts.activeFields = NewFieldSet(previous) + opts.opts.activeFields = newFieldSet(previous) valT, err := val.typ(opts.opts) if err != nil { ctx := val.Context() diff --git a/vendor/github.com/elastic/go-ucfg/types.go b/vendor/github.com/elastic/go-ucfg/types.go index 7ed109e7353e..a5b9d3eb58eb 100644 --- a/vendor/github.com/elastic/go-ucfg/types.go +++ b/vendor/github.com/elastic/go-ucfg/types.go @@ -377,7 +377,7 @@ func (c cfgSub) reify(opts *options) (interface{}, error) { case len(fields) > 0 && len(arr) == 0: m := make(map[string]interface{}) for k, v := range fields { - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) var err error if m[k], err = v.reify(opts); err != nil { return nil, err @@ -387,7 +387,7 @@ func (c cfgSub) reify(opts *options) (interface{}, error) { case len(fields) == 0 && len(arr) > 0: m := make([]interface{}, len(arr)) for i, v := range arr { - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) var err error if m[i], err = v.reify(opts); err != nil { return nil, err @@ -397,14 +397,14 @@ func (c cfgSub) reify(opts *options) (interface{}, error) { default: m := make(map[string]interface{}) for k, v := range fields { - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) var err error if m[k], err = v.reify(opts); err != nil { return nil, err } } for i, v := range arr { - opts.activeFields = NewFieldSet(parentFields) + opts.activeFields = newFieldSet(parentFields) var err error m[fmt.Sprintf("%d", i)], err = v.reify(opts) if err != nil { @@ -554,6 +554,10 @@ func (s spliceDynValue) String() string { } func parseValue(p *cfgPrimitive, opts *options, str string) (value, error) { + if opts.noParse { + return nil, raiseNoParse(p.ctx, p.meta()) + } + ifc, err := parse.Value(str) if err != nil { return nil, err diff --git a/vendor/github.com/elastic/go-ucfg/ucfg.go b/vendor/github.com/elastic/go-ucfg/ucfg.go index 094c88e7d4c9..69f6eaab2d6c 100644 --- a/vendor/github.com/elastic/go-ucfg/ucfg.go +++ b/vendor/github.com/elastic/go-ucfg/ucfg.go @@ -83,7 +83,7 @@ func New() *Config { } } -// NustNewFrom creates a new config object normalizing and copying from into the new +// MustNewFrom creates a new config object normalizing and copying from into the new // Config object. MustNewFrom uses Merge to copy from. // // MustNewFrom supports the options: PathSep, MetaData, StructTag, VarExp @@ -126,12 +126,50 @@ func (c *Config) GetFields() []string { return names } +// Has checks if a field by the given path+idx configuration exists. +// Has returns an error if the path can not be resolved because a primitive +// value is found in the middle of the traversal. +func (c *Config) Has(name string, idx int, options ...Option) (bool, error) { + opts := makeOptions(options) + p := parsePathIdx(name, opts.pathSep, idx) + return p.Has(c, opts) +} + // HasField checks if c has a top-level named key name. func (c *Config) HasField(name string) bool { _, ok := c.fields.get(name) return ok } +// Remove removes a setting from the config. If the configuration references +// another configuration namespace, then the setting will be removed from the +// linked reference. +// Remove returns true if the setting was removed. If the path can't be +// resolved (e.g. due to type mismatch) Remove will return an error. +// +// Settings can be created on Unpack via Env, Resolve, and ResolveEnv. Settings +// generated dynamically on Unpack can not be removed. Remove ignores any +// configured environments and will return an error if a value can not be +// removed for this reason. +// +// The setting path is constructed from name and idx. If name is set and idx is -1, +// only the name is used to access the setting by name. If name is empty, idx +// must be >= 0, assuming the Config is a list. If both name and idx are set, +// the name must point to a list. +// +// Remove supports the options: PathSep +func (c *Config) Remove(name string, idx int, options ...Option) (bool, error) { + opts := makeOptions(options) + + // ignore environments + opts.env = nil + opts.resolvers = nil + opts.noParse = true + + p := parsePathIdx(name, opts.pathSep, idx) + return p.Remove(c, opts) +} + // Path gets the absolute path of c separated by sep. If c is a root-Config an // empty string will be returned. func (c *Config) Path(sep string) string { @@ -219,6 +257,26 @@ func (f *fields) array() []value { return f.a } +func (f *fields) del(name string) bool { + _, exists := f.d[name] + if exists { + delete(f.d, name) + } + return exists +} + +func (f *fields) delAt(i int) bool { + a := f.a + if i < 0 || len(a) <= i { + return false + } + + copy(a[i:], a[i+1:]) + a[len(a)-1] = nil + f.a = a[:len(a)-1] + return true +} + func (f *fields) set(name string, v value) { if f.d == nil { f.d = map[string]value{} diff --git a/vendor/github.com/elastic/go-ucfg/unpack.go b/vendor/github.com/elastic/go-ucfg/unpack.go index 1951cabd73d5..85ba18176e36 100644 --- a/vendor/github.com/elastic/go-ucfg/unpack.go +++ b/vendor/github.com/elastic/go-ucfg/unpack.go @@ -155,12 +155,7 @@ func implementsUnpacker(t reflect.Type) bool { // method receiver is known, check config parameters being compatible tIn := method.Type.In(1) - acceptsConfig := tConfig.ConvertibleTo(tIn) || tConfigPtr.ConvertibleTo(tIn) - if !acceptsConfig { - return false - } - - return true + return tConfig.ConvertibleTo(tIn) || tConfigPtr.ConvertibleTo(tIn) } func unpackWith(opts *options, v reflect.Value, with value) Error { diff --git a/vendor/github.com/elastic/go-ucfg/yaml/yaml.go b/vendor/github.com/elastic/go-ucfg/yaml/yaml.go index 0c35f8efa792..4ce5e08fe0ac 100644 --- a/vendor/github.com/elastic/go-ucfg/yaml/yaml.go +++ b/vendor/github.com/elastic/go-ucfg/yaml/yaml.go @@ -25,6 +25,7 @@ import ( "github.com/elastic/go-ucfg" ) +// NewConfig creates a new configuration object from the YAML string passed via in. func NewConfig(in []byte, opts ...ucfg.Option) (*ucfg.Config, error) { var m interface{} if err := yaml.Unmarshal(in, &m); err != nil { @@ -34,12 +35,15 @@ func NewConfig(in []byte, opts ...ucfg.Option) (*ucfg.Config, error) { return ucfg.NewFrom(m, opts...) } +// NewConfigWithFile loads a new configuration object from an external JSON file. func NewConfigWithFile(name string, opts ...ucfg.Option) (*ucfg.Config, error) { input, err := ioutil.ReadFile(name) if err != nil { return nil, err } - opts = append([]ucfg.Option{ucfg.MetaData(ucfg.Meta{name})}, opts...) + opts = append([]ucfg.Option{ + ucfg.MetaData(ucfg.Meta{Source: name}), + }, opts...) return NewConfig(input, opts...) } diff --git a/vendor/vendor.json b/vendor/vendor.json index 4936b24f53ae..681cec96c910 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1109,52 +1109,52 @@ "versionExact": "v0.0.6" }, { - "checksumSHA1": "Yb61Nqnh+3igFci61hv9WYgk/hc=", + "checksumSHA1": "b91TSC0atoGVSMZdKuWTYsMOGiM=", "path": "github.com/elastic/go-ucfg", - "revision": "92d43887f91851c9936621665af7f796f4d03412", - "revisionTime": "2018-10-26T17:42:06Z", - "version": "v0.6.5", - "versionExact": "v0.6.5" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "X+R/CD8SokJrmlxFTx2nSevRDhQ=", "path": "github.com/elastic/go-ucfg/cfgutil", - "revision": "581f7b1fe9d84f4c18ef0694d6e0eb944a925dae", - "revisionTime": "2018-07-13T14:04:29Z", - "version": "v0.6.1", - "versionExact": "v0.6.1" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "zC8mCPW/pPPNcuHQOc/B/Ej1W1U=", + "checksumSHA1": "/pq8HNEdzHmky9S9HSo1WofXQ4Y=", "path": "github.com/elastic/go-ucfg/flag", - "revision": "581f7b1fe9d84f4c18ef0694d6e0eb944a925dae", - "revisionTime": "2018-07-13T14:04:29Z", - "version": "v0.6.1", - "versionExact": "v0.6.1" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "esXpiQlEvTOUwsE0nNesso8albo=", "path": "github.com/elastic/go-ucfg/internal/parse", - "revision": "581f7b1fe9d84f4c18ef0694d6e0eb944a925dae", - "revisionTime": "2018-07-13T14:04:29Z", - "version": "v0.6.1", - "versionExact": "v0.6.1" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "5mXUhhlPdvcAFKiQENInTJWrtQM=", + "checksumSHA1": "cfMNsyQm0gZOV0hRJrBSdKDQSBo=", "path": "github.com/elastic/go-ucfg/json", - "revision": "581f7b1fe9d84f4c18ef0694d6e0eb944a925dae", - "revisionTime": "2018-07-13T14:04:29Z", - "version": "v0.6.1", - "versionExact": "v0.6.1" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "Bg6vistPQLftv2fEYB7GWwSExv8=", + "checksumSHA1": "PJCBACDGPhnRAEqjGPMPCMjbj4o=", "path": "github.com/elastic/go-ucfg/yaml", - "revision": "581f7b1fe9d84f4c18ef0694d6e0eb944a925dae", - "revisionTime": "2018-07-13T14:04:29Z", - "version": "v0.6.1", - "versionExact": "v0.6.1" + "revision": "0539807037ce820e147797f051ff32b05f4f9288", + "revisionTime": "2019-01-28T11:18:48Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "rnd3qf1FE22X3MxXWbetqq6EoBk=", From f28cf30de74572b9323d616f16fffed177ba99c1 Mon Sep 17 00:00:00 2001 From: Mathieu Martin Date: Wed, 30 Jan 2019 10:00:07 -0500 Subject: [PATCH 22/66] Convert the Filebeat auditd module to ECS (#10192) This implementation is based on a discussion that happened in issue #10111, and implements Christoph's proposal on how to represent privilege escalation. He also implemented it for the Auditbeat Auditd module. Note that very few of the migrated fields used to be documented. - Define these new fields only for Filebeat. They're not in ECS, but may eventually get in there, as nestings of the `user` field set: - user.terminal - user.audit.group.id - user.audit.id - user.effective.group.id - user.effective.id - user.filesystem.group.id - user.filesystem.id - user.owner.group.id - user.owner.id - user.saved.group.id - user.saved.id - Migrate the following fields to ECS, and alias the old fields to the new one - auditd.log.acct => user.name - auditd.log.agid => user.audit.group.id - auditd.log.arch => host.architecture - auditd.log.auid => user.audit.id - auditd.log.cmd => process.args (went from cmdline to args array, so no alias) - auditd.log.comm => process.name - auditd.log.dst => destination.address - auditd.log.egid => user.effective.group.id - auditd.log.euid => user.effective.id - auditd.log.exe => process.executable - auditd.log.fsgid => user.filesystem.group.id - auditd.log.fsuid => user.filesystem.id - auditd.log.geoip => source.geo.* - auditd.log.gid => user.group.id - auditd.log.msg => message - auditd.log.ogid => user.owner.group.id - auditd.log.ouid => user.owner.id - auditd.log.pid => process.pid (long) - auditd.log.ppid => process.ppid (long) - auditd.log.record_type => event.action (lowercased) - auditd.log.res => event.outcome - auditd.log.rport => source.port - auditd.log.sgid => user.saved.group.id - auditd.log.src => source.address - auditd.log.suid => user.saved.id - auditd.log.terminal => user.terminal - auditd.log.tty => user.terminal - auditd.log.uid => user.id - Auditd custom fields not migrated, but that are now explicitly documented in the index template: - auditd.log.addr - auditd.log.laddr - auditd.log.lport - auditd.log.tty - auditd.log.rport - Add more log samples & expected to the integration tests --- CHANGELOG.next.asciidoc | 2 + dev-tools/ecs-migration.yml | 153 ++++++ filebeat/docs/fields.asciidoc | 505 ++++++++++++++++-- filebeat/module/auditd/_meta/fields.yml | 116 ++++ filebeat/module/auditd/fields.go | 2 +- filebeat/module/auditd/log/_meta/fields.yml | 176 ++++-- .../module/auditd/log/ingest/pipeline.json | 52 +- .../log/test/audit-rhel6.log-expected.json | 271 ++++++++++ filebeat/module/auditd/log/test/test.log | 2 + .../auditd/log/test/test.log-expected.json | 98 +++- 10 files changed, 1274 insertions(+), 103 deletions(-) create mode 100644 filebeat/module/auditd/log/test/audit-rhel6.log-expected.json diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 6f12484b1b9e..17e0616de344 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -46,6 +46,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Rename a few `mongodb.*` fields to map to ECS. {pull}10009[10009] - Rename a few `mysql.*` fields to map to ECS. {pull}10008[10008] - Rename a few `nginx.error.*` fields to map to ECS. {pull}10007[10007] +- Rename many `auditd.log.*` fields to map to ECS. {pull}10192[10192] - Filesets with multiple ingest pipelines added in {pull}8914[8914] only work with Elasticsearch >= 6.5.0 {pull}10001[10001] - Remove service.name from Elastcsearch module. Replace by service.type. {pull}10042[10042] - Remove numeric coercions for `user.id` and `group.id`. IDs should be `keyword`. {pull}10233[10233] @@ -180,6 +181,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add alias field support in Kibana index pattern. {pull}10075[10075] - Add `add_fields` processor. {pull}10119[10119] - Add Kibana field formatter to bytes fields. {pull}10184[10184] +- Document a few more `auditd.log.*` fields. {pull}10192[10192] *Auditbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index c025a9d11029..6d8942935b6e 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -129,6 +129,159 @@ # Filebeat modules +# Auditd module + +- from: auditd.log.acct + to: user.name + alias: true + beat: filebeat + +- from: auditd.log.pid + to: process.pid + alias: true + beat: filebeat + +- from: auditd.log.ppid + to: process.ppid + alias: true + beat: filebeat + +- from: auditd.log.res + to: event.outcome + alias: true + beat: filebeat + +- from: auditd.log.record_type + to: event.action + alias: true + beat: filebeat + +- from: auditd.log.arch + to: host.architecture + alias: true + beat: filebeat + +- from: auditd.log.gid + to: user.group.id + alias: true + beat: filebeat + +- from: auditd.log.uid + to: user.id + alias: true + beat: filebeat + +- from: auditd.log.agid + to: user.audit.group.id + alias: true + beat: filebeat + +- from: auditd.log.auid + to: user.audit.id + alias: true + beat: filebeat + +- from: auditd.log.fsgid + to: user.filesystem.group.id + alias: true + beat: filebeat + +- from: auditd.log.egid + to: user.effective.group.id + alias: true + beat: filebeat + +- from: auditd.log.euid + to: user.effective.id + alias: true + beat: filebeat + +- from: auditd.log.sgid + to: user.saved.group.id + alias: true + beat: filebeat + +- from: auditd.log.suid + to: user.saved.id + alias: true + beat: filebeat + +- from: auditd.log.ogid + to: user.owner.group.id + alias: true + beat: filebeat + +- from: auditd.log.ouid + to: user.owner.id + alias: true + beat: filebeat + +- from: auditd.log.terminal + to: user.terminal + alias: true + beat: filebeat + +- from: auditd.log.comm + to: process.name + alias: true + beat: filebeat + +- from: auditd.log.cmd + to: process.args + alias: false + beat: filebeat + comment: Was a cmdline string, whereas args is an array of keywords. + +- from: auditd.log.exe + to: process.executable + alias: true + beat: filebeat + +- from: auditd.log.msg + to: message + alias: true + beat: filebeat + +- from: auditd.log.src + to: source.address + alias: true + beat: filebeat + +- from: auditd.log.dst + to: destination.address + alias: true + beat: filebeat + +- from: auditd.log.geoip.continent_name + to: source.geo.continent_name + alias: true + beat: filebeat + +- from: auditd.log.geoip.country_iso_code + to: source.geo.country_iso_code + alias: true + beat: filebeat + +- from: auditd.log.geoip.location + to: source.geo.location + alias: true + beat: filebeat + +- from: auditd.log.geoip.region_name + to: source.geo.region_name + alias: true + beat: filebeat + +- from: auditd.log.geoip.city_name + to: source.geo.city_name + alias: true + beat: filebeat + +- from: auditd.log.geoip.region_iso_code + to: source.geo.region_iso_code + alias: true + beat: filebeat + # Suricata module - from: source_ecs.ip diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 6e2229b6af82..9c543dedc3ac 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -408,27 +408,245 @@ Module for parsing auditd logs. -[float] -== auditd fields -Fields from the auditd logs. +*`user.terminal`*:: ++ +-- +type: keyword +Terminal or tty device on which the user is performing the observed activity. -[float] -== log fields +-- -Fields from the Linux audit log. Not all fields are documented here because they are dynamic and vary by audit event type. +*`user.audit.id`*:: ++ +-- +type: keyword + +One or multiple unique identifiers of the user. -*`auditd.log.record_type`*:: +-- + +*`user.audit.name`*:: ++ +-- +type: keyword + +example: albert + +Short name or login of the user. + + +-- + +*`user.audit.group.id`*:: ++ +-- +type: keyword + +Unique identifier for the group on the system/platform. + + +-- + +*`user.audit.group.name`*:: ++ +-- +type: keyword + +Name of the group. + + +-- + + +*`user.effective.id`*:: ++ +-- +type: keyword + +One or multiple unique identifiers of the user. + + +-- + +*`user.effective.name`*:: ++ +-- +type: keyword + +example: albert + +Short name or login of the user. + + +-- + +*`user.effective.group.id`*:: ++ +-- +type: keyword + +Unique identifier for the group on the system/platform. + + +-- + +*`user.effective.group.name`*:: ++ +-- +type: keyword + +Name of the group. + + +-- + + +*`user.filesystem.id`*:: ++ +-- +type: keyword + +One or multiple unique identifiers of the user. + + +-- + +*`user.filesystem.name`*:: ++ +-- +type: keyword + +example: albert + +Short name or login of the user. + + +-- + +*`user.filesystem.group.id`*:: ++ +-- +type: keyword + +Unique identifier for the group on the system/platform. + + +-- + +*`user.filesystem.group.name`*:: ++ +-- +type: keyword + +Name of the group. + + +-- + + +*`user.owner.id`*:: + -- -The audit event type. +type: keyword + +One or multiple unique identifiers of the user. + +-- +*`user.owner.name`*:: ++ -- +type: keyword + +example: albert + +Short name or login of the user. + + +-- + +*`user.owner.group.id`*:: ++ +-- +type: keyword + +Unique identifier for the group on the system/platform. + + +-- + +*`user.owner.group.name`*:: ++ +-- +type: keyword + +Name of the group. + + +-- + + +*`user.saved.id`*:: ++ +-- +type: keyword + +One or multiple unique identifiers of the user. + + +-- + +*`user.saved.name`*:: ++ +-- +type: keyword + +example: albert + +Short name or login of the user. + + +-- + +*`user.saved.group.id`*:: ++ +-- +type: keyword + +Unique identifier for the group on the system/platform. + + +-- + +*`user.saved.group.name`*:: ++ +-- +type: keyword + +Name of the group. + + +-- + +[float] +== auditd fields + +Fields from the auditd logs. + + + +[float] +== log fields + +Fields from the Linux audit log. Not all fields are documented here because they are dynamic and vary by audit event type. + + *`auditd.log.old_auid`*:: + @@ -472,126 +690,333 @@ The audit event sequence number. -- -*`auditd.log.acct`*:: +*`auditd.log.items`*:: + -- -The user account name associated with the event. +The number of items in an event. -- -*`auditd.log.pid`*:: +*`auditd.log.item`*:: + -- -The ID of the process. +The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. -- -*`auditd.log.ppid`*:: +*`auditd.log.tty`*:: + -- -The ID of the process. +type: keyword +-- +*`auditd.log.a0`*:: ++ -- +The first argument to the system call. -*`auditd.log.items`*:: + +-- + +*`auditd.log.addr`*:: + -- -The number of items in an event. +type: ip +-- + +*`auditd.log.rport`*:: ++ +-- +type: long -- -*`auditd.log.item`*:: +*`auditd.log.laddr`*:: + -- -The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. +type: ip + +-- +*`auditd.log.lport`*:: ++ +-- +type: long -- -*`auditd.log.a0`*:: +*`auditd.log.acct`*:: + -- -The first argument to the system call. +type: alias +alias to: user.name + +-- + +*`auditd.log.pid`*:: ++ +-- +type: alias + +alias to: process.pid + +-- + +*`auditd.log.ppid`*:: ++ +-- +type: alias + +alias to: process.ppid -- *`auditd.log.res`*:: + -- -The result of the system call (success or failure). +type: alias +alias to: event.outcome -- -[float] -== geoip fields +*`auditd.log.record_type`*:: ++ +-- +type: alias -Contains GeoIP information gathered based on the `auditd.log.addr` field. Only present if the GeoIP Elasticsearch plugin is available and used. +alias to: event.action +-- *`auditd.log.geoip.continent_name`*:: + -- -type: keyword +type: alias + +alias to: source.geo.continent_name + +-- + +*`auditd.log.geoip.country_iso_code`*:: ++ +-- +type: alias + +alias to: source.geo.country_iso_code -The name of the continent. +-- + +*`auditd.log.geoip.location`*:: ++ +-- +type: alias + +alias to: source.geo.location + +-- + +*`auditd.log.geoip.region_name`*:: ++ +-- +type: alias +alias to: source.geo.region_name -- *`auditd.log.geoip.city_name`*:: + -- -type: keyword +type: alias -The name of the city. +alias to: source.geo.city_name +-- +*`auditd.log.geoip.region_iso_code`*:: ++ -- +type: alias -*`auditd.log.geoip.region_name`*:: +alias to: source.geo.region_iso_code + +-- + +*`auditd.log.arch`*:: + -- -type: keyword +type: alias -The name of the region. +alias to: host.architecture +-- +*`auditd.log.gid`*:: ++ -- +type: alias -*`auditd.log.geoip.country_iso_code`*:: +alias to: user.group.id + +-- + +*`auditd.log.uid`*:: + -- -type: keyword +type: alias -Country ISO code. +alias to: user.id +-- +*`auditd.log.agid`*:: ++ -- +type: alias -*`auditd.log.geoip.location`*:: +alias to: user.audit.group.id + +-- + +*`auditd.log.auid`*:: + -- -type: geo_point +type: alias -The longitude and latitude. +alias to: user.audit.id +-- +*`auditd.log.fsgid`*:: ++ -- +type: alias -*`auditd.log.geoip.region_iso_code`*:: +alias to: user.filesystem.group.id + +-- + +*`auditd.log.fsuid`*:: + -- -type: keyword +type: alias -Region ISO code. +alias to: user.filesystem.id + +-- + +*`auditd.log.egid`*:: ++ +-- +type: alias + +alias to: user.effective.group.id + +-- + +*`auditd.log.euid`*:: ++ +-- +type: alias + +alias to: user.effective.id + +-- + +*`auditd.log.sgid`*:: ++ +-- +type: alias + +alias to: user.saved.group.id + +-- + +*`auditd.log.suid`*:: ++ +-- +type: alias + +alias to: user.saved.id + +-- + +*`auditd.log.ogid`*:: ++ +-- +type: alias +alias to: user.owner.group.id + +-- + +*`auditd.log.ouid`*:: ++ +-- +type: alias + +alias to: user.owner.id + +-- + +*`auditd.log.comm`*:: ++ +-- +type: alias + +alias to: process.name + +-- + +*`auditd.log.exe`*:: ++ +-- +type: alias + +alias to: process.executable + +-- + +*`auditd.log.terminal`*:: ++ +-- +type: alias + +alias to: user.terminal + +-- + +*`auditd.log.msg`*:: ++ +-- +type: alias + +alias to: message + +-- + +*`auditd.log.src`*:: ++ +-- +type: alias + +alias to: source.address + +-- + +*`auditd.log.dst`*:: ++ +-- +type: alias + +alias to: destination.address -- diff --git a/filebeat/module/auditd/_meta/fields.yml b/filebeat/module/auditd/_meta/fields.yml index c3d79ce0594c..f26258720973 100644 --- a/filebeat/module/auditd/_meta/fields.yml +++ b/filebeat/module/auditd/_meta/fields.yml @@ -4,6 +4,122 @@ Module for parsing auditd logs. short_config: true fields: + + - name: user + type: group + fields: + + - name: terminal + type: keyword + description: > + Terminal or tty device on which the user is performing the observed activity. + + - name: audit + type: group + fields: + - name: id + type: keyword + description: > + One or multiple unique identifiers of the user. + - name: name + type: keyword + example: albert + description: > + Short name or login of the user. + + - name: group.id + type: keyword + description: > + Unique identifier for the group on the system/platform. + - name: group.name + type: keyword + description: > + Name of the group. + + - name: effective + type: group + fields: + - name: id + type: keyword + description: > + One or multiple unique identifiers of the user. + - name: name + type: keyword + example: albert + description: > + Short name or login of the user. + - name: group.id + type: keyword + description: > + Unique identifier for the group on the system/platform. + - name: group.name + type: keyword + description: > + Name of the group. + + - name: filesystem + type: group + fields: + - name: id + type: keyword + description: > + One or multiple unique identifiers of the user. + - name: name + type: keyword + example: albert + description: > + Short name or login of the user. + - name: group.id + type: keyword + description: > + Unique identifier for the group on the system/platform. + - name: group.name + type: keyword + description: > + Name of the group. + + - name: owner + type: group + fields: + - name: id + type: keyword + description: > + One or multiple unique identifiers of the user. + - name: name + type: keyword + example: albert + description: > + Short name or login of the user. + - name: group.id + type: keyword + description: > + Unique identifier for the group on the system/platform. + - name: group.name + type: keyword + description: > + Name of the group. + + - name: saved + type: group + fields: + - name: id + type: keyword + description: > + One or multiple unique identifiers of the user. + - name: name + type: keyword + example: albert + description: > + Short name or login of the user. + - name: group.id + type: keyword + description: > + Unique identifier for the group on the system/platform. + - name: group.name + type: keyword + description: > + Name of the group. + - name: auditd type: group description: > diff --git a/filebeat/module/auditd/fields.go b/filebeat/module/auditd/fields.go index 75a006b5d2f5..41ffa6beb71b 100644 --- a/filebeat/module/auditd/fields.go +++ b/filebeat/module/auditd/fields.go @@ -32,5 +32,5 @@ func init() { // AssetAuditd returns asset data. // This is the base64 encoded gzipped contents of module/auditd. func AssetAuditd() string { - return "eJy8VsGO2zYQvfsrHnJKD2vk7AIFimxTGGibou3docmxNFiao5LDddWvL0jZXkWWNzWyG95Eke+9eTMc8g4P1K9gsmN1C0BZPa3w5sc68WYBOEo2cqcsYYUfFgDwq7jsCTuJ6ExMHJojALw0abkAUitRN1bCjpsVNGZaADsm79KqQtwhmD2NiMvQvqMVmii5O87MkJfxoSJhF2UPbWnKXsaYbEzopTnPzTE+wzrH/AuH/M/AX6CX+E0UxvsjP0wkOLF5T0HJoaVI2JI1OdFnuNpSPyzug9mzhQkOjyb22PZHeHqkoFXxcrR1Guc41khWotuULZ/9fzbCMv46eXqF9IlCvNuYzO42/A8Si1scBvwEbTmBU7VUvDuSr++RE7laaOVPThTRRS6fcgFaMSrqvNRAh5eWGuhwlrocuba+hzUBWxr0z4mNxhJ2WXOkM7I8RVmmwLsywRHsKChrD9ua0FDCW88P05yiFJbsy2mMIvrd9YQlSi+cr0QpsYRXyNjLai0Je9K6xFoniYIywVyA1jhUJgnb9mOw2RAS/Z0p2Gmuhr7jJTRfdzBP8Ah5v6U4r8FYq7fT1JCNtZKDViCYlMSyKX3swNpWQ6uMedru1qNWWNf3kFr16KJYSukK9muCs9L+xqIr6EMKCkMFAAeY8JxBZdntNGXX0PXBwbE1SgmHlm07/JKspyhV1PipruUMKqfTKk74l6LcbU0i9z0MHo3PVDa/w55MSGA9HaYdx6QV9Erdvbs9ugHTxKbemKeWmPpUQrPG+3mqeGuXKFyRUvZns0YceJuyLfUBidgZ9jnSlXbakHA3e7inj4r/Ieq9BDUcEn4mWf8ODjuJe1NWozFa3g4ONTGQUDV/Gh4+y/LyMM7FTxeQtVCW+Bh8jy5SKqYO18qR5CdvkrJNZKJt0flcOicnmEfD3mw9lZfIXD9000Kae4mMrbISlAMF3ZTvi2Un3x6oP0i8pPyiezidw9Krjkk9c15W/VkWa/8tFbH218VEaljCN5QzED7jTmn/sd9wko0V90qq3g8sWP/5EYXluh4vth6Iqzoakk0nHKY33g3+lGuZNbta+vBG68cXk/a6Fv1RSUYO/RcAAP//EHqm1w==" + return "eJzsWk2P2zYQve+vGKSX9hA1px5coECBIkCANAXa9NDTgiZHMrEURyGH9qq/viAl+VOyLdpBerAPAVYW5703fCRn6LyFF2wXIILSrJ4AWLPBBbz5NT148wSg0EunG9ZkF/DLEwDA76SCQSjJQSOc17bqA4ChyhdPAH5Fjp8l2VJXC2AX8Amg1GiUXzylGG/BihoXEDy69ACA2wYXUDkKTf/kYMT+KEZXayvM9oth9Au2G3Jq7/kI/+HzuY8C5IC5BYVrLRHIwmal5Qp4hYkfaA8NupLi61V6TEuPbo0KhGS91twWpyRTTk4Y7uvb17hPbIig1cHjaZEXhMbPHxajzjoY1o1BCFZ/CQhaoWVdanQeqNxKLkb5xH9nMMJXUTfRTsIs0fE8vn9FCyXESNtQpe0hwVGGKbvFPfP293Geku8jjYQV3RL/8K1nrH9sjODok/H8dexmZvECv/j5lLJU7liNuBHLEqNX8eHIr+XIMYIPQ04ZstQGO5IPRz4c+X9wJG3sthiBhxkfZvyWZvRijephxocZv5UZD9oYNdmjTSC8T8aE0lGdIh81iDDi3QHQUHXR92d0HSN/1Da8dvgxdAGfiEEY0+ODcAiKZKjRMipYoUNYohTBHyaaV9h2L7dW1FqCsArWwrWwbPvwuEbLiXFx5Rolo55FOLHchWl7v/V0QvTAK+1jl5paU6N6Oh9+i2ZXW8+lXrZxOv5JJ0FTjBR1Yvni5t5ULW62VAv4PNgkEpfCwhI7/mNknZAIZeDgcBuZdirjI9DJ1Nr1649bkCthK/TwvdEvx8sI4qxT6vAdEf8wnoU4YR79nefLo/ea7FeYsftyjRO241rABz6aKGCNIE6CJh1MRxO2bPeDjUrw+CWgleNbniFbzRO3s1i3VIfwYEO9nDoWNGM9M4kRpwsZd9YUALQF0Sd1Gmc+TBzVbTGgrdJSMPr+/ip9RYGH3Z2JhTnmVYxE1X54S3v4Fx29XQqP6mcQsBYmpOPiHdQorAfNgzlK7TynoOP6mNtZJ1eprZ5U/vkfCP193f41nQvWxhXcOKqcqD3QxNoQ7+anuhMoXJXOimG/6Q5vkMKYCSil3Khw3czS/CfWxJjCoY8pF3ygXZK1KDnKj4ffOBnX0EktdWY1XcGnSZXWmfVj7pWAjySjf5E35F6GPExg3k9mhzqqcny6pRxHFkaL432kEbzqLsHHKrtaV050vPo79FO4ZqJenUZrHMmYuNORV+HdAJiH6E6OsEuA3SZLgSVl5dShJKeeI0wWspARIAO4QjpZE+MFMEwUlvvRJFnWFi0/j3jrvJqdIk/BSSwqpOJivHMSD4kFy6591p6eJam7ULsY8VpyhqQYmb4MUmciXUvGYaXJ3mn+zge7evI0t/cy1JlQMzN0PytdDjhF7eDV74ZGdImGNrCJbaUl7g4bjMUa/FS8wjJw951nbQwsMVUv1AQjGNVEQeHkaua+tCLPRRynGWWswXM2p9kbfzrXJm5VrkE87TavQszCEpnyUjtxi8iRnnoGcBZk6TPF7n6zuUVx6TMl78FnAWOm7O1vp7eoxkzRO/As2NypTvfPt+jNneQOOAuSMrWmH35u0UqZWjvgLEhJ9fFtwbV1eGanga9zq+EBEF9RBhZLkwM78n99rs7vxNhrYGt/3CZeQqzRe1HlSPROzsTq65W+B86AVH5uk6rQs7Yp7pW4/wUAAP//yO3oSA==" } diff --git a/filebeat/module/auditd/log/_meta/fields.yml b/filebeat/module/auditd/log/_meta/fields.yml index 55607c9fa44f..d21f138c6823 100644 --- a/filebeat/module/auditd/log/_meta/fields.yml +++ b/filebeat/module/auditd/log/_meta/fields.yml @@ -4,9 +4,6 @@ Fields from the Linux audit log. Not all fields are documented here because they are dynamic and vary by audit event type. fields: - - name: record_type - description: > - The audit event type. - name: old_auid description: > For login events this is the old audit ID used for the user prior to @@ -28,15 +25,6 @@ type: long description: > The audit event sequence number. - - name: acct - description: > - The user account name associated with the event. - - name: pid - description: > - The ID of the process. - - name: ppid - description: > - The ID of the process. - name: items description: > The number of items in an event. @@ -44,40 +32,152 @@ description: > The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. + - name: tty + type: keyword + definition: > + TTY udevice the user is running programs on. - name: a0 description: > The first argument to the system call. + - name: addr + type: ip + definition: > + Remote address that the user is connecting from. + - name: rport + type: long + definition: > + Remote port number. + - name: laddr + type: ip + definition: > + Local network address. + - name: lport + type: long + definition: > + Local port number. + + - name: acct + type: alias + path: user.name + migration: true + - name: pid + type: alias + path: process.pid + migration: true + - name: ppid + type: alias + path: process.ppid + migration: true - name: res - description: > - The result of the system call (success or failure). + type: alias + path: event.outcome + migration: true + - name: record_type + type: alias + path: event.action + migration: true - name: geoip type: group - description: > - Contains GeoIP information gathered based on the `auditd.log.addr` - field. Only present if the GeoIP Elasticsearch plugin is available and - used. fields: - name: continent_name - type: keyword - description: > - The name of the continent. - - name: city_name - type: keyword - description: > - The name of the city. - - name: region_name - type: keyword - description: > - The name of the region. + type: alias + path: source.geo.continent_name + migration: true - name: country_iso_code - type: keyword - description: > - Country ISO code. + type: alias + path: source.geo.country_iso_code + migration: true - name: location - type: geo_point - description: > - The longitude and latitude. + type: alias + path: source.geo.location + migration: true + - name: region_name + type: alias + path: source.geo.region_name + migration: true + - name: city_name + type: alias + path: source.geo.city_name + migration: true - name: region_iso_code - type: keyword - description: > - Region ISO code. + type: alias + path: source.geo.region_iso_code + migration: true + + # Fields below were not defined in 6.x but were still being populated. + - name: arch + type: alias + path: host.architecture + migration: true + - name: gid + type: alias + path: user.group.id + migration: true + - name: uid + type: alias + path: user.id + migration: true + - name: agid + type: alias + path: user.audit.group.id + migration: true + - name: auid + type: alias + path: user.audit.id + migration: true + - name: fsgid + type: alias + path: user.filesystem.group.id + migration: true + - name: fsuid + type: alias + path: user.filesystem.id + migration: true + - name: egid + type: alias + path: user.effective.group.id + migration: true + - name: euid + type: alias + path: user.effective.id + migration: true + - name: sgid + type: alias + path: user.saved.group.id + migration: true + - name: suid + type: alias + path: user.saved.id + migration: true + - name: ogid + type: alias + path: user.owner.group.id + migration: true + - name: ouid + type: alias + path: user.owner.id + migration: true + - name: comm + type: alias + path: process.name + migration: true + - name: exe + type: alias + path: process.executable + migration: true + - name: terminal + type: alias + path: user.terminal + migration: true + - name: msg + type: alias + path: message + migration: true + - name: src + type: alias + path: source.address + migration: true + - name: dst + type: alias + path: destination.address + migration: true diff --git a/filebeat/module/auditd/log/ingest/pipeline.json b/filebeat/module/auditd/log/ingest/pipeline.json index f4911f863353..dfdeef3731b7 100644 --- a/filebeat/module/auditd/log/ingest/pipeline.json +++ b/filebeat/module/auditd/log/ingest/pipeline.json @@ -53,6 +53,7 @@ "ignore_failure": true } }, + { "date": { "field": "auditd.log.epoch", @@ -69,6 +70,7 @@ "ignore_failure": true } }, + { "convert": { "field": "auditd.log.sequence", @@ -86,10 +88,56 @@ } } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.arch", "target_field": "host.architecture" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.acct", "target_field": "user.name" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.uid", "target_field": "user.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.gid", "target_field": "user.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.agid", "target_field": "user.audit.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.auid", "target_field": "user.audit.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.fsgid", "target_field": "user.filesystem.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.fsuid", "target_field": "user.filesystem.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.egid", "target_field": "user.effective.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.euid", "target_field": "user.effective.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.sgid", "target_field": "user.saved.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.suid", "target_field": "user.saved.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.ogid", "target_field": "user.owner.group.id" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.ouid", "target_field": "user.owner.id" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.comm", "target_field": "process.name" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.exe", "target_field": "process.executable" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.pid", "target_field": "process.pid" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.ppid", "target_field": "process.ppid" } }, + { "convert": { "ignore_missing": true, "field": "process.pid", "type": "long" } }, + { "convert": { "ignore_missing": true, "field": "process.ppid", "type": "long" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.cmd", "target_field": "process.args" } }, + { "split": { "ignore_failure": true, "field": "process.args", "separator": "\\s+" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.terminal", "target_field": "user.terminal" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.msg", "target_field": "message" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.res", "target_field": "event.outcome" } }, + { "rename": { "ignore_failure": true, "field": "auditd.log.record_type", "target_field": "event.action" } }, + { "lowercase": { "ignore_failure": true, "field": "event.action" } }, + + + { "rename": { "ignore_failure": true, "field": "auditd.log.src", "target_field": "source.address" } }, + + { "rename": { "ignore_failure": true, "field": "auditd.log.dst", "target_field": "destination.address" } }, + + { + "grok": { + "field": "source.address", + "patterns": [ "^%{IP:source.ip}$" ], + "ignore_failure": true + } + }, { "geoip": { - "field": "auditd.log.addr", - "target_field": "auditd.log.geoip", + "field": "source.ip", + "target_field": "source.geo", "ignore_failure": true } } diff --git a/filebeat/module/auditd/log/test/audit-rhel6.log-expected.json b/filebeat/module/auditd/log/test/audit-rhel6.log-expected.json new file mode 100644 index 000000000000..6ae5934e3285 --- /dev/null +++ b/filebeat/module/auditd/log/test/audit-rhel6.log-expected.json @@ -0,0 +1,271 @@ +[ + { + "@timestamp": "2017-03-14T19:20:30.178Z", + "auditd.log.sequence": 19600327, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "user_end", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 0, + "message": "op=PAM:session_close", + "process.executable": "/usr/bin/sudo", + "process.pid": 4121, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root" + }, + { + "@timestamp": "2017-03-14T19:20:30.178Z", + "auditd.log.sequence": 19600328, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "cred_disp", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 189, + "message": "op=PAM:setcred", + "process.executable": "/usr/bin/sudo", + "process.pid": 4121, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root" + }, + { + "@timestamp": "2017-03-14T19:20:56.192Z", + "auditd.log.sequence": 19600329, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "user_cmd", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 373, + "message": "cwd=\"/", + "process.args": [ + "/usr/lib64/nagios/plugins/check_asterisk_sip_peers", + "-p", + "202" + ], + "process.pid": 4151, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "497" + }, + { + "@timestamp": "2017-03-14T19:20:56.193Z", + "auditd.log.sequence": 19600330, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "cred_acq", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 620, + "message": "op=PAM:setcred", + "process.executable": "/usr/bin/sudo", + "process.pid": 4151, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root" + }, + { + "@timestamp": "2017-03-14T19:20:56.193Z", + "auditd.log.sequence": 19600331, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "user_start", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 803, + "message": "op=PAM:session_open", + "process.executable": "/usr/bin/sudo", + "process.pid": 4151, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root" + }, + { + "@timestamp": "2017-03-14T19:23:02.529Z", + "auditd.log.dst_prefixlen": "22", + "auditd.log.op": "SPD-add", + "auditd.log.sequence": 19600354, + "auditd.log.ses": "4294967295", + "auditd.log.src_prefixlen": "16", + "destination.address": "10.100.4.0", + "ecs.version": "1.0.0-beta2", + "event.action": "mac_ipsec_event", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "1", + "fileset.name": "log", + "input.type": "log", + "log.offset": 993, + "service.type": "auditd", + "source.address": "10.100.0.0", + "source.ip": "10.100.0.0", + "user.audit.id": "4294967295" + }, + { + "@timestamp": "2017-03-14T19:23:02.529Z", + "auditd.log.a0": "9", + "auditd.log.a1": "7f564ee6d2a0", + "auditd.log.a2": "b8", + "auditd.log.a3": "0", + "auditd.log.exit": "184", + "auditd.log.items": "0", + "auditd.log.sequence": 19600354, + "auditd.log.ses": "4294967295", + "auditd.log.success": "yes", + "auditd.log.syscall": "44", + "auditd.log.tty": "(none)", + "ecs.version": "1.0.0-beta2", + "event.action": "syscall", + "event.dataset": "auditd.log", + "event.module": "auditd", + "fileset.name": "log", + "host.architecture": "x86_64", + "input.type": "log", + "log.offset": 1162, + "process.executable": "/usr/libexec/strongswan/charon (deleted)", + "process.name": "charon", + "process.pid": 1275, + "process.ppid": 1240, + "service.type": "auditd", + "user.audit.id": "4294967295", + "user.effective.group.id": "0", + "user.effective.id": "0", + "user.filesystem.group.id": "0", + "user.filesystem.id": "0", + "user.group.id": "0", + "user.id": "0", + "user.saved.group.id": "0", + "user.saved.id": "0" + }, + { + "@timestamp": "2017-03-16T04:02:40.072Z", + "auditd.log.new_auid": "700", + "auditd.log.new_ses": "12286", + "auditd.log.old_auid": "700", + "auditd.log.old_ses": "6793", + "auditd.log.sequence": 19623791, + "ecs.version": "1.0.0-beta2", + "event.action": "login", + "event.dataset": "auditd.log", + "event.module": "auditd", + "fileset.name": "log", + "input.type": "log", + "log.offset": 1524, + "process.pid": 28281, + "service.type": "auditd", + "user.id": "0" + }, + { + "@timestamp": "2017-03-16T04:02:40.070Z", + "auditd.log.addr": "96.241.146.97", + "auditd.log.direction": "both", + "auditd.log.kind": "session", + "auditd.log.laddr": "107.170.139.210", + "auditd.log.lport": "50022", + "auditd.log.rport": "58994", + "auditd.log.sequence": 19623788, + "auditd.log.ses": "6793", + "auditd.log.spid": "28282", + "ecs.version": "1.0.0-beta2", + "event.action": "crypto_key_user", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 1640, + "message": "op=destroy", + "process.executable": "/usr/sbin/sshd", + "process.pid": 28281, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.saved.id": "74" + }, + { + "@timestamp": "2017-03-16T04:02:40.072Z", + "auditd.log.addr": "96.241.146.97", + "auditd.log.sequence": 19623789, + "auditd.log.ses": "6793", + "ecs.version": "1.0.0-beta2", + "event.action": "user_auth", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 1926, + "message": "op=success", + "process.executable": "/usr/sbin/sshd", + "process.pid": 28281, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "admin", + "user.terminal": "ssh" + }, + { + "@timestamp": "2017-03-16T04:02:57.804Z", + "auditd.log.sequence": 19623807, + "auditd.log.ses": "12286", + "ecs.version": "1.0.0-beta2", + "event.action": "user_auth", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 2122, + "message": "op=PAM:authentication", + "process.executable": "/bin/su", + "process.pid": 28395, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root", + "user.terminal": "pts/0" + }, + { + "@timestamp": "2017-03-16T04:02:57.805Z", + "auditd.log.sequence": 19623808, + "auditd.log.ses": "12286", + "ecs.version": "1.0.0-beta2", + "event.action": "user_acct", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 2312, + "message": "op=PAM:accounting", + "process.executable": "/bin/su", + "process.pid": 28395, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "0", + "user.name": "root", + "user.terminal": "pts/0" + } +] \ No newline at end of file diff --git a/filebeat/module/auditd/log/test/test.log b/filebeat/module/auditd/log/test/test.log index 6ee88f1a1a41..73a7c6ed0978 100644 --- a/filebeat/module/auditd/log/test/test.log +++ b/filebeat/module/auditd/log/test/test.log @@ -1,2 +1,4 @@ type=MAC_IPSEC_EVENT msg=audit(1485893834.891:18877201): op=SPD-delete auid=4294967295 ses=4294967295 res=1 src=192.168.2.0 src_prefixlen=24 dst=192.168.0.0 dst_prefixlen=16 type=SYSCALL msg=audit(1485893834.891:18877199): arch=c000003e syscall=44 success=yes exit=184 a0=9 a1=7f564b2672a0 a2=b8 a3=0 items=0 ppid=1240 pid=1281 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="charon" exe=2F7573722F6C6962657865632F7374726F6E677377616E2F636861726F6E202864656C6574656429 key=(null) +type=USER_CMD msg=audit(1489519256.192:19600329): user pid=4151 uid=497 auid=700 ses=11988 msg='cwd="/" cmd=2F7573722F6C696236342F6E6167696F732F706C7567696E732F636865636B5F617374657269736B5F7369705F7065657273202D7020323032 terminal=? res=success' +type=CRYPTO_SESSION msg=audit(1481077041.515:406): pid=1298 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=start direction=from-server cipher=chacha20-poly1305@openssh.com ksize=512 mac= pfs=curve25519-sha256@libssh.org spid=1299 suid=74 rport=63927 laddr=10.142.0.2 lport=22 exe="/usr/sbin/sshd" hostname=? addr=96.241.146.97 terminal=? res=success' diff --git a/filebeat/module/auditd/log/test/test.log-expected.json b/filebeat/module/auditd/log/test/test.log-expected.json index 2ba5e02881df..569e2aa5885e 100644 --- a/filebeat/module/auditd/log/test/test.log-expected.json +++ b/filebeat/module/auditd/log/test/test.log-expected.json @@ -1,23 +1,24 @@ [ { "@timestamp": "2017-01-31T20:17:14.891Z", - "auditd.log.auid": "4294967295", - "auditd.log.dst": "192.168.0.0", "auditd.log.dst_prefixlen": "16", "auditd.log.op": "SPD-delete", - "auditd.log.record_type": "MAC_IPSEC_EVENT", - "auditd.log.res": "1", "auditd.log.sequence": 18877201, "auditd.log.ses": "4294967295", - "auditd.log.src": "192.168.2.0", "auditd.log.src_prefixlen": "24", + "destination.address": "192.168.0.0", "ecs.version": "1.0.0-beta2", + "event.action": "mac_ipsec_event", "event.dataset": "auditd.log", "event.module": "auditd", + "event.outcome": "1", "fileset.name": "log", "input.type": "log", "log.offset": 0, - "service.type": "auditd" + "service.type": "auditd", + "source.address": "192.168.2.0", + "source.ip": "192.168.2.0", + "user.audit.id": "4294967295" }, { "@timestamp": "2017-01-31T20:17:14.891Z", @@ -25,34 +26,87 @@ "auditd.log.a1": "7f564b2672a0", "auditd.log.a2": "b8", "auditd.log.a3": "0", - "auditd.log.arch": "x86_64", - "auditd.log.auid": "4294967295", - "auditd.log.comm": "charon", - "auditd.log.egid": "0", - "auditd.log.euid": "0", - "auditd.log.exe": "/usr/libexec/strongswan/charon (deleted)", "auditd.log.exit": "184", - "auditd.log.fsgid": "0", - "auditd.log.fsuid": "0", - "auditd.log.gid": "0", "auditd.log.items": "0", - "auditd.log.pid": "1281", - "auditd.log.ppid": "1240", - "auditd.log.record_type": "SYSCALL", "auditd.log.sequence": 18877199, "auditd.log.ses": "4294967295", - "auditd.log.sgid": "0", "auditd.log.success": "yes", - "auditd.log.suid": "0", "auditd.log.syscall": "44", "auditd.log.tty": "(none)", - "auditd.log.uid": "0", "ecs.version": "1.0.0-beta2", + "event.action": "syscall", "event.dataset": "auditd.log", "event.module": "auditd", "fileset.name": "log", + "host.architecture": "x86_64", "input.type": "log", "log.offset": 174, - "service.type": "auditd" + "process.executable": "/usr/libexec/strongswan/charon (deleted)", + "process.name": "charon", + "process.pid": 1281, + "process.ppid": 1240, + "service.type": "auditd", + "user.audit.id": "4294967295", + "user.effective.group.id": "0", + "user.effective.id": "0", + "user.filesystem.group.id": "0", + "user.filesystem.id": "0", + "user.group.id": "0", + "user.id": "0", + "user.saved.group.id": "0", + "user.saved.id": "0" + }, + { + "@timestamp": "2017-03-14T19:20:56.192Z", + "auditd.log.sequence": 19600329, + "auditd.log.ses": "11988", + "ecs.version": "1.0.0-beta2", + "event.action": "user_cmd", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 536, + "message": "cwd=\"/", + "process.args": [ + "/usr/lib64/nagios/plugins/check_asterisk_sip_peers", + "-p", + "202" + ], + "process.pid": 4151, + "service.type": "auditd", + "user.audit.id": "700", + "user.id": "497" + }, + { + "@timestamp": "2016-12-07T02:17:21.515Z", + "auditd.log.addr": "96.241.146.97", + "auditd.log.cipher": "chacha20-poly1305@openssh.com", + "auditd.log.direction": "from-server", + "auditd.log.ksize": "512", + "auditd.log.laddr": "10.142.0.2", + "auditd.log.lport": "22", + "auditd.log.pfs": "curve25519-sha256@libssh.org", + "auditd.log.rport": "63927", + "auditd.log.sequence": 406, + "auditd.log.ses": "4294967295", + "auditd.log.spid": "1299", + "auditd.log.subj": "system_u:system_r:sshd_t:s0-s0:c0.c1023", + "ecs.version": "1.0.0-beta2", + "event.action": "crypto_session", + "event.dataset": "auditd.log", + "event.module": "auditd", + "event.outcome": "success", + "fileset.name": "log", + "input.type": "log", + "log.offset": 783, + "message": "op=start", + "process.executable": "/usr/sbin/sshd", + "process.pid": 1298, + "service.type": "auditd", + "user.audit.id": "4294967295", + "user.id": "0", + "user.saved.id": "74" } ] \ No newline at end of file From a47330ce22886b1e3bc0523ee8f8a463af612e66 Mon Sep 17 00:00:00 2001 From: Pier-Hugues Pellerin Date: Wed, 30 Jan 2019 10:48:19 -0500 Subject: [PATCH 23/66] Simple conversion of the format returned by the API (#10019) * Simple conversion conversion of the format returned by the API The Kibana API for CM is undergoing internal changes to better allow future scalability of the configurations, one of the requirements for this move was to flatten as much as possible the configuration file so the format would be the same independant of the key that need to received ot the configuration. It will be up to the manager to take the JSON format and convert it into something that our Configuration can understand. ref: https://github.com/elastic/kibana/pull/27717 --- CHANGELOG.next.asciidoc | 1 + .../libbeat/management/api/configuration.go | 33 +++++- .../management/api/configuration_test.go | 2 +- x-pack/libbeat/management/api/convert.go | 79 +++++++++++++ x-pack/libbeat/management/api/convert_test.go | 111 ++++++++++++++++++ x-pack/libbeat/management/api/doc.go | 69 +++++++++++ 6 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 x-pack/libbeat/management/api/convert.go create mode 100644 x-pack/libbeat/management/api/convert_test.go create mode 100644 x-pack/libbeat/management/api/doc.go diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 17e0616de344..9d2fc5b0db60 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -21,6 +21,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Rename `process.exe` to `process.executable` in add_process_metadata to align with ECS. {pull}9949[9949] - Import ECS change https://github.com/elastic/ecs/pull/308[ecs#308]: leaf field `user.group` is now the `group` field set. {pull}10275[10275] +- Update the code of Central Management to align with the new returned format. {pull}10019[10019] - Docker and Kubernetes labels/annotations will be "dedoted" by default. {pull}10338[10338] *Auditbeat* diff --git a/x-pack/libbeat/management/api/configuration.go b/x-pack/libbeat/management/api/configuration.go index 3dd851391f86..214a40336da9 100644 --- a/x-pack/libbeat/management/api/configuration.go +++ b/x-pack/libbeat/management/api/configuration.go @@ -5,6 +5,7 @@ package api import ( + "encoding/json" "fmt" "net/http" "reflect" @@ -50,16 +51,40 @@ func (c *ConfigBlock) ConfigWithMeta() (*reload.ConfigWithMeta, error) { }, nil } +type configResponse struct { + Type string + Raw map[string]interface{} +} + +func (c *configResponse) UnmarshalJSON(b []byte) error { + var resp = struct { + Type string `json:"type"` + Raw map[string]interface{} `json:"config"` + }{} + + if err := json.Unmarshal(b, &resp); err != nil { + return err + } + + converter := selectConverter(resp.Type) + newMap, err := converter(resp.Raw) + if err != nil { + return err + } + *c = configResponse{ + Type: resp.Type, + Raw: newMap, + } + return nil +} + // Configuration retrieves the list of configuration blocks from Kibana func (c *Client) Configuration(accessToken string, beatUUID uuid.UUID, configOK bool) (ConfigBlocks, error) { headers := http.Header{} headers.Set("kbn-beats-access-token", accessToken) resp := struct { - ConfigBlocks []*struct { - Type string `json:"type"` - Raw map[string]interface{} `json:"config"` - } `json:"configuration_blocks"` + ConfigBlocks []*configResponse `json:"configuration_blocks"` }{} url := fmt.Sprintf("/api/beats/agent/%s/configuration?validSetting=%t", beatUUID, configOK) statusCode, err := c.request("GET", url, nil, headers, &resp) diff --git a/x-pack/libbeat/management/api/configuration_test.go b/x-pack/libbeat/management/api/configuration_test.go index 1df04cf3437a..b9eafc6ef610 100644 --- a/x-pack/libbeat/management/api/configuration_test.go +++ b/x-pack/libbeat/management/api/configuration_test.go @@ -28,7 +28,7 @@ func TestConfiguration(t *testing.T) { assert.Equal(t, "false", r.URL.Query().Get("validSetting")) - fmt.Fprintf(w, `{"configuration_blocks":[{"type":"filebeat.modules","config":{"module":"apache2"}},{"type":"metricbeat.modules","config":{"module":"system","period":"10s"}}]}`) + fmt.Fprintf(w, `{"configuration_blocks":[{"type":"filebeat.modules","config":{"_sub_type":"apache2"}},{"type":"metricbeat.modules","config":{"_sub_type":"system","period":"10s"}}]}`) })) defer server.Close() diff --git a/x-pack/libbeat/management/api/convert.go b/x-pack/libbeat/management/api/convert.go new file mode 100644 index 000000000000..af7da53be468 --- /dev/null +++ b/x-pack/libbeat/management/api/convert.go @@ -0,0 +1,79 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package api + +import ( + "fmt" + "strings" +) + +type converter func(map[string]interface{}) (map[string]interface{}, error) + +var mapper = map[string]converter{ + ".inputs": noopConvert, + ".modules": convertMultiple, + "output": convertSingle, +} + +var errSubTypeNotFound = fmt.Errorf("'%s' key not found", subTypeKey) + +var ( + subTypeKey = "_sub_type" + moduleKey = "module" +) + +func selectConverter(t string) converter { + for k, v := range mapper { + if strings.Index(t, k) > -1 { + return v + } + } + return noopConvert +} + +func convertSingle(m map[string]interface{}) (map[string]interface{}, error) { + subType, err := extractSubType(m) + if err != nil { + return nil, err + } + + delete(m, subTypeKey) + newMap := map[string]interface{}{subType: m} + return newMap, nil +} + +func convertMultiple(m map[string]interface{}) (map[string]interface{}, error) { + subType, err := extractSubType(m) + if err != nil { + return nil, err + } + + v, ok := m[moduleKey] + + if ok && v != subType { + return nil, fmt.Errorf("module key already exist in the raw document and doesn't match the 'sub_type', expecting '%s' and received '%s", subType, v) + } + + m[moduleKey] = subType + delete(m, subTypeKey) + return m, nil +} + +func noopConvert(m map[string]interface{}) (map[string]interface{}, error) { + return m, nil +} + +func extractSubType(m map[string]interface{}) (string, error) { + subType, ok := m[subTypeKey] + if !ok { + return "", errSubTypeNotFound + } + + k, ok := subType.(string) + if !ok { + return "", fmt.Errorf("invalid type for `sub_type`, expecting a string received %T", subType) + } + return k, nil +} diff --git a/x-pack/libbeat/management/api/convert_test.go b/x-pack/libbeat/management/api/convert_test.go new file mode 100644 index 000000000000..e8f32e90494e --- /dev/null +++ b/x-pack/libbeat/management/api/convert_test.go @@ -0,0 +1,111 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package api + +import ( + "reflect" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestConvertAPI(t *testing.T) { + tests := map[string]struct { + t string + config map[string]interface{} + expected map[string]interface{} + err bool + }{ + "output": { + t: "output", + config: map[string]interface{}{ + "_sub_type": "elasticsearch", + "username": "foobar", + }, + expected: map[string]interface{}{ + "elasticsearch": map[string]interface{}{ + "username": "foobar", + }, + }, + }, + "filebeat inputs": { + t: "filebeat.inputs", + config: map[string]interface{}{ + "type": "log", + "paths": []string{ + "/var/log/message.log", + "/var/log/system.log", + }, + }, + expected: map[string]interface{}{ + "type": "log", + "paths": []string{ + "/var/log/message.log", + "/var/log/system.log", + }, + }, + }, + "filebeat modules": { + t: "filebeat.modules", + config: map[string]interface{}{ + "_sub_type": "system", + }, + expected: map[string]interface{}{ + "module": "system", + }, + }, + "metricbeat modules": { + t: "metricbeat.modules", + config: map[string]interface{}{ + "_sub_type": "logstash", + }, + expected: map[string]interface{}{ + "module": "logstash", + }, + }, + "badly formed output": { + err: true, + t: "output", + config: map[string]interface{}{ + "nosubtype": "logstash", + }, + }, + "badly formed filebeat module": { + err: true, + t: "filebeat.modules", + config: map[string]interface{}{ + "nosubtype": "logstash", + }, + }, + "badly formed metricbeat module": { + err: true, + t: "metricbeat.modules", + config: map[string]interface{}{ + "nosubtype": "logstash", + }, + }, + "unknown type is passthrough": { + t: "unkown", + config: map[string]interface{}{ + "nosubtype": "logstash", + }, + expected: map[string]interface{}{ + "nosubtype": "logstash", + }, + }, + } + + for name, test := range tests { + test := test + t.Run(name, func(t *testing.T) { + converter := selectConverter(test.t) + newMap, err := converter(test.config) + if !assert.Equal(t, test.err, err != nil) { + return + } + assert.True(t, reflect.DeepEqual(newMap, test.expected)) + }) + } +} diff --git a/x-pack/libbeat/management/api/doc.go b/x-pack/libbeat/management/api/doc.go new file mode 100644 index 000000000000..3bcdfee78adb --- /dev/null +++ b/x-pack/libbeat/management/api/doc.go @@ -0,0 +1,69 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +/* +The Kibana CM Api returns a configuration format which cannot be ingested directly by our +configuration parser, it need to be transformed from the generic format into an adapted format +which is dependant on the type of configuration. + + +Translations: + +Type: output + +{ + "configuration_blocks": [ + + { + "config": { + "_sub_type": "elasticsearch" + "_id": "12312341231231" + "hosts": [ "localhost" ], + "password": "foobar" + "username": "elastic" + }, + "type": "output" + } + ] +} + +YAML representation: + +{ + "elasticsearch": { + "hosts": [ "localhost" ], + "password": "foobar" + "username": "elastic" + } +} + + +Type: *.modules + +{ + "configuration_blocks": [ + + { + "config": { + "_sub_type": "system" + "_id": "12312341231231" + "path" "foobar" + }, + "type": "filebeat.module" + } + ] +} + +YAML representation: + +[ +{ + "module": "system" + "path": "foobar" +} +] + +*/ + +package api From ed37eea8b375bfe26704c8273ae61c7538aa8009 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Jan 2019 08:24:21 -0800 Subject: [PATCH 24/66] [Filebeat] Changes to text fields in logstash module (#10417) This PR is an offshoot of conversations and decisions made in https://github.com/elastic/beats/pull/10372 w.r.t `text` fields, but scoped to the `logstash` module. --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 44 +++++++++++++------ filebeat/module/logstash/fields.go | 2 +- filebeat/module/logstash/log/_meta/fields.yml | 5 ++- .../module/logstash/slowlog/_meta/fields.yml | 20 +++++---- 5 files changed, 49 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 9d2fc5b0db60..5cf468f595d2 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -65,6 +65,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Change type of field backend_url and frontend_name in traefik.access metricset to type keyword. {pull}10401[10401] - Ingesting Elasticsearch audit logs is only supported with Elasticsearch 6.5.0 and above {pull}10352[10352] - Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] +- Several text fields in the Logstash module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10417[10417] *Heartbeat* diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 9c543dedc3ac..e00a0bbe2277 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -6845,11 +6845,18 @@ The module or class where the event originate. *`logstash.log.thread`*:: + -- -type: text +type: keyword Information about the running thread where the log originate. +*`logstash.log.thread.text`*:: ++ +-- +type: text + +-- + -- *`logstash.log.log_event`*:: @@ -6887,44 +6894,48 @@ slowlog -*`logstash.slowlog.message`*:: +*`logstash.slowlog.module`*:: + -- -type: text +type: keyword -Contains the un-parsed log message +The module or class where the event originate. -- -*`logstash.slowlog.module`*:: +*`logstash.slowlog.thread`*:: + -- type: keyword -The module or class where the event originate. - +Information about the running thread where the log originate. --- -*`logstash.slowlog.thread`*:: +*`logstash.slowlog.thread.text`*:: + -- type: text -Information about the running thread where the log originate. - +-- -- *`logstash.slowlog.event`*:: + -- -type: text +type: keyword Raw dump of the original event +*`logstash.slowlog.event.text`*:: ++ +-- +type: text + +-- + -- *`logstash.slowlog.plugin_name`*:: @@ -6960,11 +6971,18 @@ Execution time for the plugin in milliseconds. *`logstash.slowlog.plugin_params`*:: + -- -type: text +type: keyword String value of the plugin configuration +*`logstash.slowlog.plugin_params.text`*:: ++ +-- +type: text + +-- + -- *`logstash.slowlog.plugin_params_object`*:: diff --git a/filebeat/module/logstash/fields.go b/filebeat/module/logstash/fields.go index 9dd0d29c8e16..5c6b4ebd64ca 100644 --- a/filebeat/module/logstash/fields.go +++ b/filebeat/module/logstash/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLogstash returns asset data. // This is the base64 encoded gzipped contents of module/logstash. func AssetLogstash() string { - return "eJzslc1u2zAMgO95CqLnJg/gQy/FChTYD7DtHjA2LWuRSUM/Tf32g+U4cRw5gbdip+kWKeL3mSKlNeypzcCIch5dtQLw2hvK4GGYelgBFORyqxuvhTN4WgHAaQd8kSIYWgGUmkzhsri6BsaaLuJ2w7cNZaCshOY4k4h8GWkS7TR3Fv08Ej2tXYFmYf14iUgordTgK4IhaPyCzeivU7exXz2kYjx6lT21B7HFZO2GUDd+VnSMCWIhN+gcHCqyFBXpjdiDWK00o6dNUslXlnCK7ZU8vftlPq9ciq2xWwbcSfDRwwZmzeqIGgkaUff0jKht/I6koex+Ub7QcU8tIBfwhiYQFLQLSnV2+ux+VkmfIjmHKn2MaDS6yUqDvprbVWtlsVf1NlA6B/RGZiHNiNqk9s3xBpYzcph00dJOuQ5xsyVuJHN5AT4Le9TsYnkFXjdoHRWx0FKg/335p30535PL7b7jAYpQNyBlxB/RJgEZ8I0JSvO2+/Fxp/YVaxocesAtdgf6wIppmwk7g1dugneP8KKNJ+se4Vvw3UxXU89SUO5mSkdkv9W8rbUxeno99I5GWC0T/PROeYgF5HVNUIoduYJm6GmUCxczXsfENWixTmstr50f3nYl3F/mF/mDXLjUKvTX3X2hbfIx+bt3Zv10aXahBKG7mnbtyPnOw/MvHgJIFBIjS/rA5rmxdzdFKv3X8N8BAAD//3IWvbQ=" + return "eJzslctu2zwQhfd+ioOsEz+AFtn8+AME6AVouxdoaUSxJjkCL3H09oUky5ZkKoWTNECBcmeOOec7oxnyDntqM2iWPghfb4CggqYMN+PWzQYoyRdONUGxzXC/AXA6gc9cRk0boFKkS5/10TtYYWiWt1uhbSiDdByb404i8zzTIttp7wz6aQJ6il0IrYoN66GXROXYINSEMWnvYDv565JtymfGUkzXgLKn9sCuXMReAOrWj5qOOcEOhRbe41CTox6RnsgGsFNSWRFom0QKtSOxlH0D0qOt2BnRhSF2HEOP4qK1ysqj2oRRs1wjBEzUQeWpgs4c0HO4CI4eLoKTVsn7AiWt8+4nFcvQb5zvqYWwJZ6EjoSSdlHKzrM6V+RsMN0e5L2Q6f4QWgm/iDQi1GunjJJODKjBRUrXgJ5IX6mmWW5T59b0Ri2v+bAYz2tH8DLFv1n7K2Ztfc5eZfubOKCMpgFXva+jJ53U+ZO+Gh2lsnn34/3cfRGGRmeDwEvandA79njbLLQzPNomBn+LB6UDOX+LrzF0O90U/MclFX6l2Zn3ubK5UVqr5V0yMGq28jrA/5+piH2/B2UIFbsJK5TFoEYF23KF61i4Rjhh0livKt334LqhGy7/WQlRsK2UjMP1+PHtOTjNk0/a2167u/u535lRRE8ldu2kEukP8hGvEBKNaYXldAOs6/Y3zLZc+ZYL8V8BAAD//6XJ7J4=" } diff --git a/filebeat/module/logstash/log/_meta/fields.yml b/filebeat/module/logstash/log/_meta/fields.yml index dd46dcbef949..5d8fc352bbcb 100644 --- a/filebeat/module/logstash/log/_meta/fields.yml +++ b/filebeat/module/logstash/log/_meta/fields.yml @@ -9,9 +9,12 @@ description: > The module or class where the event originate. - name: thread - type: text + type: keyword description: > Information about the running thread where the log originate. + multi_fields: + - name: text + type: text - name: log_event type: object description: > diff --git a/filebeat/module/logstash/slowlog/_meta/fields.yml b/filebeat/module/logstash/slowlog/_meta/fields.yml index f10626d7c125..924a0a457fb7 100644 --- a/filebeat/module/logstash/slowlog/_meta/fields.yml +++ b/filebeat/module/logstash/slowlog/_meta/fields.yml @@ -3,22 +3,24 @@ description: > slowlog fields: - - name: message - type: text - description: > - Contains the un-parsed log message - name: module type: keyword description: > The module or class where the event originate. - name: thread - type: text + type: keyword description: > Information about the running thread where the log originate. + multi_fields: + - name: text + type: text - name: event - type: text + type: keyword description: > Raw dump of the original event + multi_fields: + - name: text + type: text - name: plugin_name type: keyword description: > @@ -32,14 +34,16 @@ description: > Execution time for the plugin in milliseconds. - name: plugin_params - type: text + type: keyword description: > String value of the plugin configuration + multi_fields: + - name: text + type: text - name: plugin_params_object type: object description: > key -> value of the configuration used by the plugin. - - name: level type: alias path: log.level From 12a604186e8cfd41a25b9aab1557c5002edf6859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20=C3=81lvarez?= Date: Wed, 30 Jan 2019 17:51:54 +0100 Subject: [PATCH 25/66] Mark indices with the beat name (#10313) To facilitate APM re-indexing / migration scripts, it is very convenient to uniquely identify `apm` indices without searching for values in data. Since everything is configurable by the user, right now we don't have any attribute that we can rely on. We have been recommended to put a mark on the `_meta` mapping. This enables us to set it in code without users tampering with it. --- libbeat/template/template.go | 6 +++++- libbeat/template/template_test.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libbeat/template/template.go b/libbeat/template/template.go index bd5b0714599c..5a03ca770dd9 100644 --- a/libbeat/template/template.go +++ b/libbeat/template/template.go @@ -46,6 +46,7 @@ type Template struct { name string pattern string beatVersion common.Version + beatName string esVersion common.Version config TemplateConfig migration bool @@ -116,6 +117,7 @@ func New(beatVersion string, beatName string, esVersion common.Version, config T name: name, beatVersion: *bV, esVersion: esVersion, + beatName: beatName, config: config, migration: migration, }, nil @@ -189,7 +191,7 @@ func (t *Template) Generate(properties common.MapStr, dynamicTemplates []common. keyPattern: patterns, "mappings": buildMappings( - t.beatVersion, t.esVersion, + t.beatVersion, t.esVersion, t.beatName, properties, append(dynamicTemplates, buildDynTmpl(t.esVersion)), common.MapStr(t.config.Settings.Source), @@ -215,6 +217,7 @@ func buildPatternSettings(ver common.Version, pattern string) (string, interface func buildMappings( beatVersion, esVersion common.Version, + beatName string, properties common.MapStr, dynTmpls []common.MapStr, source common.MapStr, @@ -222,6 +225,7 @@ func buildMappings( mapping := common.MapStr{ "_meta": common.MapStr{ "version": beatVersion.String(), + "beat": beatName, }, "date_detection": defaultDateDetection, "dynamic_templates": dynTmpls, diff --git a/libbeat/template/template_test.go b/libbeat/template/template_test.go index 144b3318e358..814656f91850 100644 --- a/libbeat/template/template_test.go +++ b/libbeat/template/template_test.go @@ -76,3 +76,17 @@ func TestNumberOfRoutingShardsOverwrite(t *testing.T) { assert.Equal(t, 5, shards.(int)) } + +func TestTemplate(t *testing.T) { + beatVersion := "6.6.0" + beatName := "testbeat" + ver := common.MustNewVersion("6.6.0") + template, err := New(beatVersion, beatName, *ver, TemplateConfig{}, false) + assert.NoError(t, err) + + data := template.Generate(nil, nil) + assert.Equal(t, []string{"testbeat-6.6.0-*"}, data["index_patterns"]) + meta, err := data.GetValue("mappings.doc._meta") + assert.NoError(t, err) + assert.Equal(t, common.MapStr{"beat": "testbeat", "version": "6.6.0"}, meta) +} From 1566e660d752c62f28d3d4fbbea39ed73c11543f Mon Sep 17 00:00:00 2001 From: Christoph Wurm Date: Wed, 30 Jan 2019 17:55:58 +0000 Subject: [PATCH 26/66] [Auditbeat] Login metricset (#9327) Adds the login metricset to the Auditbeat system module as the last of the six initial metricsets. It only works on Linux, and detects not just user logins and logouts, but also system boots and shutdowns. It works by reading the /var/log/wtmp and /var/log/btmp file (and rotated files) present on Linux systems. In reading a file, it is similar to Filebeat, except that UTMP is a binary format, so reading happens using a binary Go reader. --- CHANGELOG.next.asciidoc | 1 + auditbeat/docs/fields.asciidoc | 22 + x-pack/auditbeat/auditbeat.reference.yml | 7 + x-pack/auditbeat/auditbeat.yml | 5 + x-pack/auditbeat/docs/modules/system.asciidoc | 11 + .../docs/modules/system/login.asciidoc | 21 + x-pack/auditbeat/include/list.go | 1 + .../module/system/_meta/config.yml.tmpl | 13 + .../module/system/_meta/docs.asciidoc | 2 + .../auditbeat/module/system/_meta/fields.yml | 24 +- x-pack/auditbeat/module/system/fields.go | 2 +- .../module/system/login/_meta/data.json | 30 + .../module/system/login/_meta/docs.asciidoc | 7 + .../auditbeat/module/system/login/config.go | 20 + x-pack/auditbeat/module/system/login/login.go | 232 ++++++++ .../module/system/login/login_other.go | 29 + .../module/system/login/login_test.go | 63 +++ x-pack/auditbeat/module/system/login/utmp.go | 535 ++++++++++++++++++ .../auditbeat/module/system/login/utmp_c.go | 120 ++++ x-pack/auditbeat/tests/files/wtmp | Bin 0 -> 384 bytes .../auditbeat/tests/system/auditbeat_xpack.py | 7 +- .../auditbeat/tests/system/test_metricsets.py | 18 + 22 files changed, 1164 insertions(+), 6 deletions(-) create mode 100644 x-pack/auditbeat/docs/modules/system/login.asciidoc create mode 100644 x-pack/auditbeat/module/system/login/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/login/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/login/config.go create mode 100644 x-pack/auditbeat/module/system/login/login.go create mode 100644 x-pack/auditbeat/module/system/login/login_other.go create mode 100644 x-pack/auditbeat/module/system/login/login_test.go create mode 100644 x-pack/auditbeat/module/system/login/utmp.go create mode 100644 x-pack/auditbeat/module/system/login/utmp_c.go create mode 100644 x-pack/auditbeat/tests/files/wtmp diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 5cf468f595d2..509115e037ec 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -192,6 +192,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add `group.id` (GID) and `group.name` for ECS. {pull}10195[10195] - System module `process` dataset: Add user information to processes. {pull}9963[9963] - Add system `package` dataset. {pull}10225[10225] +- Add system module `login` dataset. {pull}9327[9327] *Filebeat* diff --git a/auditbeat/docs/fields.asciidoc b/auditbeat/docs/fields.asciidoc index 709aa94ac8a4..c11aa32565f6 100644 --- a/auditbeat/docs/fields.asciidoc +++ b/auditbeat/docs/fields.asciidoc @@ -6175,6 +6175,28 @@ These are the fields generated by the system module. + +*`event.origin`*:: ++ +-- +type: keyword + +Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). + + +-- + + +*`user.terminal`*:: ++ +-- +type: keyword + +Terminal of the user. + + +-- + [float] == system.audit fields diff --git a/x-pack/auditbeat/auditbeat.reference.yml b/x-pack/auditbeat/auditbeat.reference.yml index b760fb747237..c359e2ad942d 100644 --- a/x-pack/auditbeat/auditbeat.reference.yml +++ b/x-pack/auditbeat/auditbeat.reference.yml @@ -117,6 +117,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - login # User logins, logouts, and system boots. - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets @@ -139,6 +140,12 @@ auditbeat.modules: # detect any changes. user.detect_password_changes: true + # File patterns of the login record files. + # wtmp: History of successful logins, logouts, and system shutdowns and boots. + # btmp: Failed login attempts. + login.wtmp_file_pattern: /var/log/wtmp* + login.btmp_file_pattern: /var/log/btmp* + #================================ General ====================================== # The name of the shipper that publishes the network data. It can be used to group diff --git a/x-pack/auditbeat/auditbeat.yml b/x-pack/auditbeat/auditbeat.yml index 14a30af52a3e..7b0ca2d075e5 100644 --- a/x-pack/auditbeat/auditbeat.yml +++ b/x-pack/auditbeat/auditbeat.yml @@ -50,6 +50,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - login # User logins, logouts, and system boots. - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets @@ -65,6 +66,10 @@ auditbeat.modules: # detect any changes. user.detect_password_changes: true + # File patterns of the login record files. + login.wtmp_file_pattern: /var/log/wtmp* + login.btmp_file_pattern: /var/log/btmp* + #==================== Elasticsearch template setting ========================== setup.template.settings: index.number_of_shards: 3 diff --git a/x-pack/auditbeat/docs/modules/system.asciidoc b/x-pack/auditbeat/docs/modules/system.asciidoc index 6e3c52b39857..d6f902d07df7 100644 --- a/x-pack/auditbeat/docs/modules/system.asciidoc +++ b/x-pack/auditbeat/docs/modules/system.asciidoc @@ -51,6 +51,7 @@ sample suggested configuration. - module: system datasets: - host + - login - package - process - socket @@ -87,6 +88,7 @@ so a longer polling interval can be used. - module: system datasets: - host + - login - package - user period: 1m @@ -113,6 +115,7 @@ auditbeat.modules: - module: system datasets: - host # General host information, e.g. uptime, IPs + - login # User logins, logouts, and system boots. - package # Installed, updated, and removed packages - process # Started and stopped processes - socket # Opened and closed sockets @@ -127,6 +130,10 @@ auditbeat.modules: # /etc/passwd and /etc/shadow and store a hash locally to # detect any changes. user.detect_password_changes: true + + # File patterns of the login record files. + login.wtmp_file_pattern: /var/log/wtmp* + login.btmp_file_pattern: /var/log/btmp* ---- [float] @@ -136,6 +143,8 @@ The following datasets are available: * <<{beatname_lc}-dataset-system-host,host>> +* <<{beatname_lc}-dataset-system-login,login>> + * <<{beatname_lc}-dataset-system-package,package>> * <<{beatname_lc}-dataset-system-process,process>> @@ -146,6 +155,8 @@ The following datasets are available: include::system/host.asciidoc[] +include::system/login.asciidoc[] + include::system/package.asciidoc[] include::system/process.asciidoc[] diff --git a/x-pack/auditbeat/docs/modules/system/login.asciidoc b/x-pack/auditbeat/docs/modules/system/login.asciidoc new file mode 100644 index 000000000000..d042abb7addc --- /dev/null +++ b/x-pack/auditbeat/docs/modules/system/login.asciidoc @@ -0,0 +1,21 @@ +//// +This file is generated! See scripts/docs_collector.py +//// + +[id="{beatname_lc}-dataset-system-login"] +=== System login dataset + +include::../../../module/system/login/_meta/docs.asciidoc[] + + +==== Fields + +For a description of each field in the dataset, see the +<> section. + +Here is an example document generated by this dataset: + +[source,json] +---- +include::../../../module/system/login/_meta/data.json[] +---- diff --git a/x-pack/auditbeat/include/list.go b/x-pack/auditbeat/include/list.go index 4c2e3507ade7..1bfa48fc08f8 100644 --- a/x-pack/auditbeat/include/list.go +++ b/x-pack/auditbeat/include/list.go @@ -10,6 +10,7 @@ import ( // Import packages that need to register themselves. _ "github.com/elastic/beats/x-pack/auditbeat/module/system" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/host" + _ "github.com/elastic/beats/x-pack/auditbeat/module/system/login" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/package" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/process" _ "github.com/elastic/beats/x-pack/auditbeat/module/system/socket" diff --git a/x-pack/auditbeat/module/system/_meta/config.yml.tmpl b/x-pack/auditbeat/module/system/_meta/config.yml.tmpl index 5ac792217918..6e7bf4a44b73 100644 --- a/x-pack/auditbeat/module/system/_meta/config.yml.tmpl +++ b/x-pack/auditbeat/module/system/_meta/config.yml.tmpl @@ -7,6 +7,9 @@ - module: system datasets: - host # General host information, e.g. uptime, IPs + {{ if eq .GOOS "linux" -}} + - login # User logins, logouts, and system boots. + {{- end }} {{ if ne .GOOS "windows" -}} - package # Installed, updated, and removed packages {{- end }} @@ -38,3 +41,13 @@ # detect any changes. user.detect_password_changes: true {{- end }} + + {{ if eq .GOOS "linux" -}} + # File patterns of the login record files. +{{- if .Reference }} + # wtmp: History of successful logins, logouts, and system shutdowns and boots. + # btmp: Failed login attempts. +{{- end }} + login.wtmp_file_pattern: /var/log/wtmp* + login.btmp_file_pattern: /var/log/btmp* + {{- end }} diff --git a/x-pack/auditbeat/module/system/_meta/docs.asciidoc b/x-pack/auditbeat/module/system/_meta/docs.asciidoc index e9da6bc8f55b..55614c4d69fd 100644 --- a/x-pack/auditbeat/module/system/_meta/docs.asciidoc +++ b/x-pack/auditbeat/module/system/_meta/docs.asciidoc @@ -46,6 +46,7 @@ sample suggested configuration. - module: system datasets: - host + - login - package - process - socket @@ -82,6 +83,7 @@ so a longer polling interval can be used. - module: system datasets: - host + - login - package - user period: 1m diff --git a/x-pack/auditbeat/module/system/_meta/fields.yml b/x-pack/auditbeat/module/system/_meta/fields.yml index f27178a0931d..fd47f2be7716 100644 --- a/x-pack/auditbeat/module/system/_meta/fields.yml +++ b/x-pack/auditbeat/module/system/_meta/fields.yml @@ -4,7 +4,25 @@ These are the fields generated by the system module. release: experimental fields: - - name: system.audit - type: group + + - name: event + type: group + fields: + - name: origin + type: keyword description: > - fields: + Origin of the event. This can be a file path (e.g. `/var/log/log.1`), + or the name of the system component that supplied the data (e.g. `netlink`). + + - name: user + type: group + fields: + - name: terminal + type: keyword + description: > + Terminal of the user. + + - name: system.audit + type: group + description: > + fields: diff --git a/x-pack/auditbeat/module/system/fields.go b/x-pack/auditbeat/module/system/fields.go index 41afad4cae69..0719e4b4ac6b 100644 --- a/x-pack/auditbeat/module/system/fields.go +++ b/x-pack/auditbeat/module/system/fields.go @@ -19,5 +19,5 @@ func init() { // AssetSystem returns asset data. // This is the base64 encoded gzipped contents of module/system. func AssetSystem() string { - return "eJy0WE1v20YQvetXDHKxDSjKpQgKHQokLdAGSBqjtoHerBF3RG693CF2lpbpX18sPyRRWkqRxfDmsfje2/levocnquYglXjKJwBee0NzeHdXG95NABRJ4nThNds5/DYBALjPSAjQEfiMYKXJKIGULDn0pGBZ1fYGE3JWpaHZBMCRIRSaA70U5HRO1qOZQAswr6Hfg8WcOkEzLJX29T8AfFXQHFLHZdFaItL6aLuIGYvfGGNog4jNswgAC0jYetS2O6+pcUHbFbscw3uznbeGTtw9+1q3asvC65x6AhrFhm3aMx+RHJ6HGgi0BYuWhRK2SmYRxiWzH+BU6Okczs/MHgJWjKd1IDn9SipCtmQ2hPYcvjvyoFdtJARwyxETEIS9sqVZ+DMi4ImqNTt1joC/MSfgVZ32HXz3d1A1BZqlM/h8d39UEK9WQn4mlIwQ+PutjoAaMuBI9IPK8fzxV4sWY9KxoL+RA778EaNAl2TaU+JLN+KBerBwXUf05dePjx9/uYmJyDEWxTdwf/v0O6BSjkQoGjtdRIj2jCc4vtwep2CJUOw3zxMsC5ad9rnTMQGXXPq6WLgIM0TbtBsAPYzDdrlVWBj0AXGPdNjrJ33y/W4D2kY7IetZplAuS+vLKay1VbyWm1lU0UE5XaomALZKvmESLP8OUK8w16YalbyBbOkdqQz9FBQtNdoprBzRUtQpjzyTE812VF0tZpzwiZwlMx7ffSRFr6SlOZSyyU1MnjCli7aPFuNoBaEFbcWjMaSAHTjK+ZlUxz/OZjLWlLhtRMHQnIgly4VUkVzp2Fp/jMnWQg4NqDGpdidTjM/ohOy4p2sho/OoycFRlsmOrsUc3CpFv16+LXdkASxKUuY5uuoNgM2LMczSmTHD8vDP18P+Uwq5i5pPADg5u8OPBIIpMrzP7zc/a5ACPAi5g7az4y29j3g5W39P3XKl43L9GWI6SKa0G/tgVwIZ5xSgKfHcT/GdwsnIjDiGAW4dpw5z8AyutIAeDKd6YAsIifm4k7NRIZ5e/Nnubj8BBILeJwD4buGrtuXLFHymJVxKQ4WklLA0qT6QDgcbdSePl/9RcqbARQ13YmOoGlLZlHAQW6Dz4f56vaSKrdr870qgcDq0suatvT0vXsZwvJThRC78UCRgk/yHdQ1H621Lr62nlPZL5Ez6odorUCRyuKGL1OnYdoDHw7uJWvtruLbcdOuNRXshszo7kkH5z4rkpwPZAXYGtyyil4bgGU1JUn+BXEiGitePG38MYF73Dp2hZCHRtW0+VdYYsNKGbqZb3z4qLbg0pBbTAdSF5S1z4GiKXaFNyXEpgBJqjC1BgjY0KdD2ZgpoY86pERNXFX4XdJ2R7Yesjk3Q/oF88qE2KxCiXAZAPXdZEu4IZGuO+mLQIB5Ef2d1RPGPSRYONFw6Bztd8/xQsMOdSmHV6zHdQdcotQBoBcwm/wcAAP//IWXfjA==" + return "eJy0WF+L27gXfc+nuPSlE0g9/OBHWfKw0O7CbqHdDjsp7NtEtm5s7ci6RleeTPrpF8l2YidyMum4hkKjkc45uv90pXfwiLsl8I4dljMAp5zGJby5DwNvZgASObOqcorMEn6dAQCsCmQEYRFcgbBRqCVDjgatcCgh3YXxBhNKkrXGZAZgUaNgXAI+V2hVicYJPYMWYDmbAbwDI0o/4wmNC1xuV+ESckt1FX53k/3/u9lkVa5MGOoWPOJuS1a2Y5E9+O9rWAe0CXoDZwKrQjFkwkCKIGCjNEIlXAE3mOQJrG+fhL3VlPt/yf/W88UejWyA8ZI6yNYEGZUVGTQOXCEccF1VWqEMU6RwosM26LQyj+t50rdFzWhfbAqHtlQmmPVKY6zalZ12TzvQ0WwmEbVUcddEgPsS+zILYrcfPEU6K9R/aw+whoyME8p0wacDLiizIVsKvy7prRoLv+471trzQOVUiQMBjWJNJh8Mn5Hsv28BCJQBIwwxZmQkJxHGlMiNcErh8BrOj0QOPFaMpzUgWvUdZYQsJdIozDV89+hAbVpPMIgDR0yAF/adDCb+Z0TAMHRfJOCvXgJ28N1vr2oBIds+3q/OCqLNhtEljNkEjl8ddHhUHwFnvO9VTmePP1u0GJOKOf0HOeDT7zEKYbNCOcxcbSfc0AC2rZ/Pv7x/eP//eUxEKWJe/AHuLx9+AyGlRWaM+k5VEaKjwQscn+7OUxBHKI6L5wWWNXGvfPYqJoiUaheShSp/oCuTd6V/gHFaLg8KKy2cRzwiHbf6RZt8vd+Dtt7O0DjiBdRpbVy9gK0ykrY8T6KKTtLptWrCMd8o+SIyP/LPCPVGlErvJiVvIFt6i7IQbgESUyXMAjYWMWV5ySJPaFmRmVRXixknfERrUE/Ht4qE6FtuaU6l7GNTZI8ix1d1Hy3G2QwSBpRhJ7RG6XtDiyU9oez4p+lMpjol7hpRMHZOxILllVSRWOnYWntMydZCjh1QU1L1T6YYn1YZmml310JGz6MmBidpJju6FnO0q2T1/fXdckfmwaIkdVkKu/sBwGZhDLO2ekq3fPv782n92V/n+hTXFB8PcPHs9pMY/FDk8L6+3vysgxTgG6M9KTs9a6ljxNezDfvUA1c+Ldcf3qejZFLZqTf2lqGgEj00Zo6GId5LnAL1hMcwwJ2l3IoSHIGtDQgHmnI10gX4wHzoxWxUiMNnd7W52ycATzB4AoCvBj4rUz8vwBWK/aXUZ0iOGXET6iPhcNJRd/Io/RezKwWuA9yFjmHXkPI+hb3YSljn7683Ke7IyP3f3jJUVvlS1qw66vPiaQznUxkuxMKLPAH74D/Nazibbwd6ZRzmeJwiV9KP5V4lmCObG7tIXfZtB3jevXuvtbPhxlBTrfcjyjHqzdWe9Mp/lic/nMj2sAncEbNKNcKT0DVyeA5ecyEkbR/29hjBvBlsuhBc+EBXpnk0DRjh5XW+ONj2QSoWqUa5Xoygrg0dmD1Hk+xSmBwt1QyCfY6RwfC+qykHZeYLECZmnICY2V3l+qDbAs3QZcE3Xvstuuw2DEtgxJJHQB11UeLvCGgCR7gYNIgn3u+1joLdQ1b4DY2nzklP13wvcvYqvEjvBjWm2+hWcBAArYBk9l8AAAD//y0/V6s=" } diff --git a/x-pack/auditbeat/module/system/login/_meta/data.json b/x-pack/auditbeat/module/system/login/_meta/data.json new file mode 100644 index 000000000000..311893d5926b --- /dev/null +++ b/x-pack/auditbeat/module/system/login/_meta/data.json @@ -0,0 +1,30 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { + "hostname": "host.example.com", + "name": "host.example.com" + }, + "event": { + "action": "user_login", + "dataset": "login", + "module": "system", + "origin": "/var/log/wtmp.1", + "outcome": "success", + "type": "event" + }, + "message": "Login by user vagrant (UID: 1000) on pts/1 (PID: 17559) from 10.0.2.2 (IP: 10.0.2.2)", + "process": { + "pid": 17559 + }, + "service": { + "type": "system" + }, + "source": { + "ip": "10.0.2.2" + }, + "user": { + "id": 1000, + "name": "vagrant", + "terminal": "pts/1" + } +} diff --git a/x-pack/auditbeat/module/system/login/_meta/docs.asciidoc b/x-pack/auditbeat/module/system/login/_meta/docs.asciidoc new file mode 100644 index 000000000000..ea1eff217637 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/_meta/docs.asciidoc @@ -0,0 +1,7 @@ +[role="xpack"] + +experimental[] + +This is the `login` dataset of the system module. + +It is implemented for Linux only. diff --git a/x-pack/auditbeat/module/system/login/config.go b/x-pack/auditbeat/module/system/login/config.go new file mode 100644 index 000000000000..2cdfca549046 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/config.go @@ -0,0 +1,20 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux + +package login + +// config defines the metricset's configuration options. +type config struct { + WtmpFilePattern string `config:"login.wtmp_file_pattern"` + BtmpFilePattern string `config:"login.btmp_file_pattern"` +} + +func defaultConfig() config { + return config{ + WtmpFilePattern: "/var/log/wtmp*", + BtmpFilePattern: "/var/log/btmp*", + } +} diff --git a/x-pack/auditbeat/module/system/login/login.go b/x-pack/auditbeat/module/system/login/login.go new file mode 100644 index 000000000000..7af40d1e6a1a --- /dev/null +++ b/x-pack/auditbeat/module/system/login/login.go @@ -0,0 +1,232 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux + +package login + +import ( + "fmt" + "net" + "time" + + "github.com/pkg/errors" + + "github.com/elastic/beats/auditbeat/datastore" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/cfgwarn" + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/metricbeat/mb" +) + +const ( + moduleName = "system" + metricsetName = "login" + namespace = "system.audit.login" + + bucketName = "login.v1" + + eventTypeEvent = "event" +) + +// loginRecordType represents the type of a login record. +type loginRecordType uint8 + +const ( + bootRecord loginRecordType = iota + 1 + shutdownRecord + userLoginRecord + userLogoutRecord + userLoginFailedRecord +) + +// String returns the string representation of a LoginRecordType. +func (t loginRecordType) string() string { + switch t { + case bootRecord: + return "boot" + case shutdownRecord: + return "shutdown" + + case userLoginFailedRecord: + fallthrough + case userLoginRecord: + return "user_login" + + case userLogoutRecord: + return "user_logout" + default: + return "" + } +} + +// LoginRecord represents a login record. +type LoginRecord struct { + Utmp *Utmp + Type loginRecordType + PID int + TTY string + UID int + Username string + Hostname string + IP *net.IP + Timestamp time.Time + Origin string +} + +func init() { + mb.Registry.MustAddMetricSet(moduleName, metricsetName, New, + mb.DefaultMetricSet(), + mb.WithNamespace(namespace), + ) +} + +// MetricSet collects login records from /var/log/wtmp. +type MetricSet struct { + mb.BaseMetricSet + config config + log *logp.Logger + utmpReader *UtmpFileReader +} + +// New constructs a new MetricSet. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + cfgwarn.Experimental("The %v/%v dataset is experimental", moduleName, metricsetName) + + config := defaultConfig() + if err := base.Module().UnpackConfig(&config); err != nil { + return nil, errors.Wrapf(err, "failed to unpack the %v/%v config", moduleName, metricsetName) + } + + bucket, err := datastore.OpenBucket(bucketName) + if err != nil { + return nil, errors.Wrap(err, "failed to open persistent datastore") + } + + ms := &MetricSet{ + BaseMetricSet: base, + config: config, + log: logp.NewLogger(metricsetName), + } + + ms.utmpReader, err = NewUtmpFileReader(ms.log, bucket, config) + if err != nil { + return nil, err + } + + return ms, nil +} + +// Close cleans up the MetricSet when it finishes. +func (ms *MetricSet) Close() error { + return ms.utmpReader.Close() +} + +// Fetch collects any new login records from /var/log/wtmp. It is invoked periodically. +func (ms *MetricSet) Fetch(report mb.ReporterV2) { + count := ms.readAndEmit(report) + + ms.log.Debugf("%d new login records.", count) + + // Save new state to disk + if count > 0 { + err := ms.utmpReader.saveStateToDisk() + if err != nil { + ms.log.Error(err) + report.Error(err) + } + } +} + +// readAndEmit reads and emits login events and returns the number of events. +func (ms *MetricSet) readAndEmit(report mb.ReporterV2) int { + loginRecordC, errorC := ms.utmpReader.ReadNew() + + var count int + for { + select { + case loginRecord, ok := <-loginRecordC: + if !ok { + return count + } + report.Event(ms.loginEvent(&loginRecord)) + count++ + case err, ok := <-errorC: + if !ok { + return count + } + ms.log.Error(err) + } + } +} + +func (ms *MetricSet) loginEvent(loginRecord *LoginRecord) mb.Event { + event := mb.Event{ + Timestamp: loginRecord.Timestamp, + RootFields: common.MapStr{ + "event": common.MapStr{ + "type": eventTypeEvent, + "action": loginRecord.Type.string(), + "origin": loginRecord.Origin, + }, + "message": loginMessage(loginRecord), + // Very useful for development + // "debug": fmt.Sprintf("%v", login.Utmp), + }, + } + + if loginRecord.Username != "" { + event.RootFields.Put("user.name", loginRecord.Username) + + if loginRecord.UID != -1 { + event.RootFields.Put("user.id", loginRecord.UID) + } + } + + if loginRecord.TTY != "" { + event.RootFields.Put("user.terminal", loginRecord.TTY) + } + + if loginRecord.PID != -1 { + event.RootFields.Put("process.pid", loginRecord.PID) + } + + if loginRecord.IP != nil { + event.RootFields.Put("source.ip", loginRecord.IP) + } + + if loginRecord.Hostname != "" && loginRecord.Hostname != loginRecord.IP.String() { + event.RootFields.Put("source.domain", loginRecord.Hostname) + } + + switch loginRecord.Type { + case userLoginRecord: + event.RootFields.Put("event.outcome", "success") + case userLoginFailedRecord: + event.RootFields.Put("event.outcome", "failure") + } + + return event +} + +func loginMessage(loginRecord *LoginRecord) string { + var actionString string + + switch loginRecord.Type { + case bootRecord: + return "System boot" + case shutdownRecord: + return "System shutdown" + case userLoginRecord: + actionString = "Login" + case userLoginFailedRecord: + actionString = "Failed login" + case userLogoutRecord: + actionString = "Logout" + } + + return fmt.Sprintf("%v by user %v (UID: %d) on %v (PID: %d) from %v (IP: %v)", + actionString, loginRecord.Username, loginRecord.UID, loginRecord.TTY, loginRecord.PID, + loginRecord.Hostname, loginRecord.IP) +} diff --git a/x-pack/auditbeat/module/system/login/login_other.go b/x-pack/auditbeat/module/system/login/login_other.go new file mode 100644 index 000000000000..73462e1c2f12 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/login_other.go @@ -0,0 +1,29 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !linux + +package login + +import ( + "fmt" + + "github.com/elastic/beats/metricbeat/mb" +) + +const ( + moduleName = "system" + metricsetName = "login" +) + +func init() { + mb.Registry.MustAddMetricSet(moduleName, metricsetName, New, + mb.DefaultMetricSet(), + ) +} + +// New returns an error. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + return nil, fmt.Errorf("the %v/%v dataset is only supported on Linux", moduleName, metricsetName) +} diff --git a/x-pack/auditbeat/module/system/login/login_test.go b/x-pack/auditbeat/module/system/login/login_test.go new file mode 100644 index 000000000000..cbab49369f53 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/login_test.go @@ -0,0 +1,63 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux + +package login + +import ( + "encoding/binary" + "io/ioutil" + "os" + "testing" + + "github.com/elastic/beats/auditbeat/core" + "github.com/elastic/beats/libbeat/paths" + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestData(t *testing.T) { + if byteOrder != binary.LittleEndian { + t.Skip("Test only works on little-endian systems - skipping.") + } + + defer setup(t)() + + f := mbtest.NewReportingMetricSetV2(t, getConfig()) + + events, errs := mbtest.ReportingFetchV2(f) + if len(errs) > 0 { + t.Fatalf("received error: %+v", errs[0]) + } + + if len(events) == 0 { + t.Fatal("no events were generated") + } else if len(events) != 1 { + t.Fatal("only one event expected") + } + + fullEvent := mbtest.StandardizeEvent(f, events[0], core.AddDatasetToEvent) + mbtest.WriteEventToDataJSON(t, fullEvent, "") +} + +func getConfig() map[string]interface{} { + return map[string]interface{}{ + "module": "system", + "datasets": []string{"login"}, + "login.wtmp_file_pattern": "../../../tests/files/wtmp", + "login.btmp_file_pattern": "", + } +} + +// setup is copied from file_integrity/metricset_test.go. +// TODO: Move to shared location and use in all unit tests. +func setup(t testing.TB) func() { + // path.data should be set so that the DB is written to a predictable location. + var err error + paths.Paths.Data, err = ioutil.TempDir("", "beat-data-dir") + if err != nil { + t.Fatal() + } + return func() { os.RemoveAll(paths.Paths.Data) } +} diff --git a/x-pack/auditbeat/module/system/login/utmp.go b/x-pack/auditbeat/module/system/login/utmp.go new file mode 100644 index 000000000000..318ca94927e9 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/utmp.go @@ -0,0 +1,535 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux + +package login + +import ( + "bytes" + "encoding/gob" + "io" + "net" + "os" + "os/user" + "path/filepath" + "sort" + "strconv" + "syscall" + + "github.com/pkg/errors" + + "github.com/elastic/beats/auditbeat/datastore" + "github.com/elastic/beats/libbeat/logp" +) + +const ( + bucketKeyFileRecords = "file_records" + bucketKeyLoginSessions = "login_sessions" +) + +// Inode represents a file's inode on Linux. +type Inode uint64 + +// UtmpType represents the type of a UTMP file and records. +// Two types are possible: wtmp (records from the "good" file, i.e. /var/log/wtmp) +// and btmp (failed logins from /var/log/btmp). +type UtmpType uint8 + +const ( + // Wtmp is the "normal" wtmp file that includes successful logins, logouts, + // and system boots. + Wtmp UtmpType = iota + // Btmp contains bad logins only. + Btmp +) + +// UtmpFile represents a UTMP file at a point in time. +type UtmpFile struct { + Inode Inode + Path string + Size int64 + Offset int64 + Type UtmpType +} + +// UtmpFileReader can read a UTMP formatted file (usually /var/log/wtmp). +type UtmpFileReader struct { + log *logp.Logger + bucket datastore.Bucket + config config + savedUtmpFiles map[Inode]UtmpFile + loginSessions map[string]LoginRecord +} + +// NewUtmpFileReader creates and initializes a new UTMP file reader. +func NewUtmpFileReader(log *logp.Logger, bucket datastore.Bucket, config config) (*UtmpFileReader, error) { + r := &UtmpFileReader{ + log: log, + bucket: bucket, + config: config, + savedUtmpFiles: make(map[Inode]UtmpFile), + loginSessions: make(map[string]LoginRecord), + } + + // Load state (file records, tty mapping) from disk + err := r.restoreStateFromDisk() + if err != nil { + return nil, errors.Wrap(err, "failed to restore state from disk") + } + + return r, nil +} + +// Close performs any cleanup tasks when the UTMP reader is done. +func (r *UtmpFileReader) Close() error { + err := r.bucket.Close() + return errors.Wrap(err, "error closing bucket") +} + +// ReadNew returns any new UTMP entries in any files matching the configured pattern. +func (r *UtmpFileReader) ReadNew() (<-chan LoginRecord, <-chan error) { + loginRecordC := make(chan LoginRecord) + errorC := make(chan error) + + go func() { + defer close(loginRecordC) + defer close(errorC) + + wtmpFiles, err := r.findFiles(r.config.WtmpFilePattern, Wtmp) + if err != nil { + errorC <- errors.Wrap(err, "failed to expand file pattern") + return + } + + btmpFiles, err := r.findFiles(r.config.BtmpFilePattern, Btmp) + if err != nil { + errorC <- errors.Wrap(err, "failed to expand file pattern") + return + } + + utmpFiles := append(wtmpFiles, btmpFiles...) + defer r.deleteOldUtmpFiles(&utmpFiles) + + for _, utmpFile := range utmpFiles { + r.readNewInFile(loginRecordC, errorC, utmpFile) + } + }() + + return loginRecordC, errorC +} + +func (r *UtmpFileReader) findFiles(filePattern string, utmpType UtmpType) ([]UtmpFile, error) { + paths, err := filepath.Glob(filePattern) + if err != nil { + return nil, errors.Wrapf(err, "failed to expand file pattern %v", filePattern) + } + + // Sort paths in reverse order (oldest/most-rotated file first) + sort.Sort(sort.Reverse(sort.StringSlice(paths))) + + var utmpFiles []UtmpFile + for _, path := range paths { + fileInfo, err := os.Stat(path) + if err != nil { + if os.IsNotExist(err) { + // Skip - file might have been rotated out + r.log.Debugf("File %v does not exist anymore.", path) + continue + } else { + return nil, errors.Wrapf(err, "unexpected error when looking up file %v", path) + } + } + + utmpFiles = append(utmpFiles, UtmpFile{ + Inode: Inode(fileInfo.Sys().(*syscall.Stat_t).Ino), + Path: path, + Size: fileInfo.Size(), + Offset: 0, + Type: utmpType, + }) + } + + return utmpFiles, nil +} + +// deleteOldUtmpFiles cleans up old UTMP file records where the inode no longer exists. +func (r *UtmpFileReader) deleteOldUtmpFiles(existingFiles *[]UtmpFile) { + existingInodes := make(map[Inode]struct{}) + for _, utmpFile := range *existingFiles { + existingInodes[utmpFile.Inode] = struct{}{} + } + + for savedInode := range r.savedUtmpFiles { + if _, exists := existingInodes[savedInode]; !exists { + r.log.Debugf("Deleting file record for old inode %d.", savedInode) + delete(r.savedUtmpFiles, savedInode) + } + } +} + +// readNewInFile reads a UTMP formatted file and emits the records after the last known record. +func (r *UtmpFileReader) readNewInFile(loginRecordC chan<- LoginRecord, errorC chan<- error, utmpFile UtmpFile) { + savedUtmpFile, isKnownFile := r.savedUtmpFiles[utmpFile.Inode] + if !isKnownFile { + r.log.Debugf("Found new file: %v (utmpFile=%+v)", utmpFile.Path, utmpFile) + } + + size := utmpFile.Size + oldSize := savedUtmpFile.Size + if size < oldSize { + // UTMP files are append-only and so this is weird. It might be a sign of + // a highly unlikely inode reuse - or of something more nefarious. + // Setting isKnownFile to false so we read the whole file from the beginning. + isKnownFile = false + + r.log.Warnf("Unexpectedly, the file %v is smaller than before (new: %v, old: %v) - reading whole file.", + utmpFile.Path, size, oldSize) + } + + if !isKnownFile && size == 0 { + // Empty new file - save but don't read. + err := r.updateSavedUtmpFile(utmpFile, nil) + if err != nil { + errorC <- errors.Wrapf(err, "error updating file record for file %v", utmpFile.Path) + } + return + } + + if !isKnownFile || size != oldSize { + r.log.Debugf("Reading file %v (utmpFile=%+v)", utmpFile.Path, utmpFile) + + f, err := os.Open(utmpFile.Path) + if err != nil { + errorC <- errors.Wrapf(err, "error opening file %v", utmpFile.Path) + return + } + defer func() { + // Once we start reading a file, we update the file record even if something fails - + // otherwise we will just keep trying to re-read very frequently forever. + r.updateSavedUtmpFile(utmpFile, f) + if err != nil { + errorC <- errors.Wrapf(err, "error updating file record for file %v", utmpFile.Path) + } + + f.Close() + }() + + _, err = f.Seek(utmpFile.Offset, 0) + if err != nil { + errorC <- errors.Wrapf(err, "error setting offset for file %v", utmpFile.Path) + + // Try one more time, this time resetting to the beginning of the file. + _, err = f.Seek(0, 0) + if err != nil { + errorC <- errors.Wrapf(err, "error setting offset 0 for file %v", utmpFile.Path) + + // Even that did not work, so return. + return + } + } + + for { + utmp, err := ReadNextUtmp(f) + if err != nil && err != io.EOF { + errorC <- errors.Wrapf(err, "error reading entry in UTMP file %v", utmpFile.Path) + return + } + + if utmp != nil { + r.log.Debugf("utmp: (ut_type=%d, ut_pid=%d, ut_line=%v, ut_user=%v, ut_host=%v, ut_tv.tv_sec=%v, ut_addr_v6=%v)", + utmp.UtType, utmp.UtPid, utmp.UtLine, utmp.UtUser, utmp.UtHost, utmp.UtTv, utmp.UtAddrV6) + + loginRecord := r.processLoginRecord(utmp) + if loginRecord != nil { + loginRecord.Origin = utmpFile.Path + if utmpFile.Type == Btmp && loginRecord.Type == userLoginRecord { + loginRecord.Type = userLoginFailedRecord + } + + loginRecordC <- *loginRecord + } + } else { + // Eventually, we have read all UTMP records in the file. + break + } + } + } +} + +func (r *UtmpFileReader) updateSavedUtmpFile(utmpFile UtmpFile, f *os.File) error { + if f != nil { + offset, err := f.Seek(0, 1) + if err != nil { + return errors.Wrap(err, "error calling Seek") + } + utmpFile.Offset = offset + } + + r.log.Debugf("Saving UTMP file record (%+v)", utmpFile) + + r.savedUtmpFiles[utmpFile.Inode] = utmpFile + + return nil +} + +// processLoginRecord receives UTMP login records in order and returns +// a corresponding LoginRecord. Some UTMP records do not translate +// into a LoginRecord, in this case the return value is nil. +func (r *UtmpFileReader) processLoginRecord(utmp *Utmp) *LoginRecord { + record := LoginRecord{ + Utmp: utmp, + Timestamp: utmp.UtTv, + UID: -1, + PID: -1, + } + + if utmp.UtLine != "~" { + record.TTY = utmp.UtLine + } + + switch utmp.UtType { + // See utmp(5) for C constants. + case RUN_LVL: + // The runlevel - though a number - is stored as + // the ASCII character of that number. + runlevel := string(rune(utmp.UtPid)) + + // 0 - halt; 6 - reboot + if utmp.UtUser == "shutdown" || runlevel == "0" || runlevel == "6" { + record.Type = shutdownRecord + + // Clear any old logins + // TODO: Issue logout events for login events that are still around + // at this point. + r.loginSessions = make(map[string]LoginRecord) + } else { + // Ignore runlevel changes that are not halt or reboot. + return nil + } + case BOOT_TIME: + if utmp.UtLine == "~" && utmp.UtUser == "reboot" { + record.Type = bootRecord + + // Clear any old logins + // TODO: Issue logout events for login events that are still around + // at this point. + r.loginSessions = make(map[string]LoginRecord) + } else { + // Ignore unknown record + return nil + } + case USER_PROCESS: + record.Type = userLoginRecord + + record.Username = utmp.UtUser + record.UID = lookupUsername(record.Username) + record.PID = utmp.UtPid + record.IP = newIP(utmp.UtAddrV6) + record.Hostname = utmp.UtHost + + // Store TTY from user login record for enrichment when user logout + // record comes along (which, alas, does not contain the username). + r.loginSessions[record.TTY] = record + case DEAD_PROCESS: + savedRecord, found := r.loginSessions[record.TTY] + if found { + record.Type = userLogoutRecord + record.Username = savedRecord.Username + record.UID = savedRecord.UID + record.PID = savedRecord.PID + record.IP = savedRecord.IP + record.Hostname = savedRecord.Hostname + } else { + // Skip - this is usually the DEAD_PROCESS event for + // a previous INIT_PROCESS or LOGIN_PROCESS event - + // those are ignored - (see default case below). + return nil + } + default: + /* + Every other record type is ignored: + - EMPTY - empty record + - NEW_TIME and OLD_TIME - could be useful, but not written when time changes, + at least not using `date` + - INIT_PROCESS and LOGIN_PROCESS - written on boot but do not contain any + interesting information + - ACCOUNTING - not implemented according to manpage + */ + return nil + } + + return &record +} + +// lookupUsername looks up a username and returns its UID. +// It does not pass through errors (e.g. when the user is not found) +// but will return -1 instead. +func lookupUsername(username string) int { + if username != "" { + user, err := user.Lookup(username) + if err == nil { + uid, err := strconv.Atoi(user.Uid) + if err == nil { + return uid + } + } + } + + return -1 +} + +func newIP(utAddrV6 [4]uint32) *net.IP { + var ip net.IP + + // See utmp(5) for the utmp struct fields. + if utAddrV6[1] != 0 || utAddrV6[2] != 0 || utAddrV6[3] != 0 { + // IPv6 + b := make([]byte, 16) + byteOrder.PutUint32(b[:4], utAddrV6[0]) + byteOrder.PutUint32(b[4:8], utAddrV6[1]) + byteOrder.PutUint32(b[8:12], utAddrV6[2]) + byteOrder.PutUint32(b[12:], utAddrV6[3]) + ip = net.IP(b) + } else { + // IPv4 + b := make([]byte, 4) + byteOrder.PutUint32(b, utAddrV6[0]) + ip = net.IP(b) + } + + return &ip +} + +func (r *UtmpFileReader) saveStateToDisk() error { + err := r.saveFileRecordsToDisk() + if err != nil { + return err + } + + err = r.saveLoginSessionsToDisk() + if err != nil { + return err + } + + return nil +} + +func (r *UtmpFileReader) saveFileRecordsToDisk() error { + var buf bytes.Buffer + encoder := gob.NewEncoder(&buf) + + for _, utmpFile := range r.savedUtmpFiles { + err := encoder.Encode(utmpFile) + if err != nil { + return errors.Wrap(err, "error encoding UTMP file record") + } + } + + err := r.bucket.Store(bucketKeyFileRecords, buf.Bytes()) + if err != nil { + return errors.Wrap(err, "error writing UTMP file records to disk") + } + + r.log.Debugf("Wrote %d UTMP file records to disk", len(r.savedUtmpFiles)) + return nil +} + +func (r *UtmpFileReader) saveLoginSessionsToDisk() error { + var buf bytes.Buffer + encoder := gob.NewEncoder(&buf) + + for _, loginRecord := range r.loginSessions { + err := encoder.Encode(loginRecord) + if err != nil { + return errors.Wrap(err, "error encoding login record") + } + } + + err := r.bucket.Store(bucketKeyLoginSessions, buf.Bytes()) + if err != nil { + return errors.Wrap(err, "error writing login records to disk") + } + + r.log.Debugf("Wrote %d open login sessions to disk", len(r.loginSessions)) + return nil +} + +func (r *UtmpFileReader) restoreStateFromDisk() error { + err := r.restoreFileRecordsFromDisk() + if err != nil { + return err + } + + err = r.restoreLoginSessionsFromDisk() + if err != nil { + return err + } + + return nil +} + +func (r *UtmpFileReader) restoreFileRecordsFromDisk() error { + var decoder *gob.Decoder + err := r.bucket.Load(bucketKeyFileRecords, func(blob []byte) error { + if len(blob) > 0 { + buf := bytes.NewBuffer(blob) + decoder = gob.NewDecoder(buf) + } + return nil + }) + if err != nil { + return err + } + + if decoder != nil { + for { + var utmpFile UtmpFile + err = decoder.Decode(&utmpFile) + if err == nil { + r.savedUtmpFiles[utmpFile.Inode] = utmpFile + } else if err == io.EOF { + // Read all + break + } else { + return errors.Wrap(err, "error decoding file record") + } + } + } + r.log.Debugf("Restored %d UTMP file records from disk", len(r.savedUtmpFiles)) + + return nil +} + +func (r *UtmpFileReader) restoreLoginSessionsFromDisk() error { + var decoder *gob.Decoder + err := r.bucket.Load(bucketKeyLoginSessions, func(blob []byte) error { + if len(blob) > 0 { + buf := bytes.NewBuffer(blob) + decoder = gob.NewDecoder(buf) + } + return nil + }) + if err != nil { + return err + } + + if decoder != nil { + for { + loginRecord := new(LoginRecord) + err = decoder.Decode(loginRecord) + if err == nil { + r.loginSessions[loginRecord.TTY] = *loginRecord + } else if err == io.EOF { + // Read all + break + } else { + return errors.Wrap(err, "error decoding login record") + } + } + } + r.log.Debugf("Restored %d open login sessions from disk", len(r.loginSessions)) + + return nil +} diff --git a/x-pack/auditbeat/module/system/login/utmp_c.go b/x-pack/auditbeat/module/system/login/utmp_c.go new file mode 100644 index 000000000000..804683acd539 --- /dev/null +++ b/x-pack/auditbeat/module/system/login/utmp_c.go @@ -0,0 +1,120 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux + +// Pure Go reader for UTMP formatted files. +// See utmp(5) and getutent(3) for the C structs and functions this is +// replacing. + +package login + +import ( + "bytes" + "encoding/binary" + "io" + "time" + "unsafe" +) + +var byteOrder = getByteOrder() + +func getByteOrder() binary.ByteOrder { + var b [2]byte + *((*uint16)(unsafe.Pointer(&b[0]))) = 1 + if b[0] == 1 { + return binary.LittleEndian + } + return binary.BigEndian +} + +// UtType represents the ut_type field. See utmp(5). +type UtType int16 + +// Possible values for UtType. +const ( + EMPTY UtType = 0 + RUN_LVL UtType = 1 + BOOT_TIME UtType = 2 + NEW_TIME UtType = 3 + OLD_TIME UtType = 4 + INIT_PROCESS UtType = 5 + LOGIN_PROCESS UtType = 6 + USER_PROCESS UtType = 7 + DEAD_PROCESS UtType = 8 + ACCOUNTING UtType = 9 + + UT_LINESIZE = 32 + UT_NAMESIZE = 32 + UT_HOSTSIZE = 256 +) + +// utmpC is a Go representation of the C utmp struct that the UTMP files consist of. +type utmpC struct { + Type UtType + + // Alignment + _ [2]byte + + Pid int32 + Device [UT_LINESIZE]byte + Terminal [4]byte + Username [UT_NAMESIZE]byte + Hostname [UT_HOSTSIZE]byte + + ExitStatusTermination int16 + ExitStatusExit int16 + + SessionID int32 + + TimeSeconds int32 + TimeMicroseconds int32 + + IP [4]int32 + + Unused [20]byte +} + +// Utmp contains a Go version of UtmpC. +type Utmp struct { + UtType UtType + UtPid int + UtLine string + UtUser string + UtHost string + UtTv time.Time + UtAddrV6 [4]uint32 +} + +// newUtmp creates a Utmp out of a utmpC. +func newUtmp(utmp *utmpC) *Utmp { + // See utmp(5) for the utmp struct fields. + return &Utmp{ + UtType: utmp.Type, + UtPid: int(utmp.Pid), + UtLine: byteToString(utmp.Device[:]), + UtUser: byteToString(utmp.Username[:]), + UtHost: byteToString(utmp.Hostname[:]), + UtTv: time.Unix(int64(utmp.TimeSeconds), int64(utmp.TimeMicroseconds)*1000), + UtAddrV6: [4]uint32{uint32(utmp.IP[0]), uint32(utmp.IP[1]), uint32(utmp.IP[2]), uint32(utmp.IP[3])}, + } +} + +// byteToString converts a NULL terminated char array to a Go string. +func byteToString(b []byte) string { + n := bytes.IndexByte(b, 0) + return string(b[:n]) +} + +// ReadNextUtmp reads the next UTMP entry in a reader pointing to UTMP formatted data. +func ReadNextUtmp(r io.Reader) (*Utmp, error) { + utmpC := new(utmpC) + + err := binary.Read(r, byteOrder, utmpC) + if err != nil { + return nil, err + } + + return newUtmp(utmpC), nil +} diff --git a/x-pack/auditbeat/tests/files/wtmp b/x-pack/auditbeat/tests/files/wtmp new file mode 100644 index 0000000000000000000000000000000000000000..4b49a1c0b74971467e29b7589631033d46aa06a2 GIT binary patch literal 384 zcmZQ)U|=Y+VqhpJDb_avvT*^BbXj70QDR;RE+q_x26_g1Mtb;+!KrsRNo?=(jER}c M%D~0I#6-wn0BThW7ytkO literal 0 HcmV?d00001 diff --git a/x-pack/auditbeat/tests/system/auditbeat_xpack.py b/x-pack/auditbeat/tests/system/auditbeat_xpack.py index bf3b3edf65c6..af8e5ae68fa0 100644 --- a/x-pack/auditbeat/tests/system/auditbeat_xpack.py +++ b/x-pack/auditbeat/tests/system/auditbeat_xpack.py @@ -29,14 +29,17 @@ def setUp(self): ) # Adapted from metricbeat.py - def check_metricset(self, module, metricset, fields=[], errors_allowed=False, warnings_allowed=False): + def check_metricset(self, module, metricset, fields=[], extras={}, errors_allowed=False, warnings_allowed=False): """ Method to test a metricset for its fields """ + # Set to 1 hour so we only test one Fetch + extras["period"] = "1h" + self.render_config_template(modules=[{ "name": module, "datasets": [metricset], - "period": "10s", + "extras": extras, }]) proc = self.start_beat() self.wait_until(lambda: self.output_lines() > 0) diff --git a/x-pack/auditbeat/tests/system/test_metricsets.py b/x-pack/auditbeat/tests/system/test_metricsets.py index e8007792c2a6..ce45b0bbf9ba 100644 --- a/x-pack/auditbeat/tests/system/test_metricsets.py +++ b/x-pack/auditbeat/tests/system/test_metricsets.py @@ -22,6 +22,24 @@ def test_metricset_host(self): # Metricset is experimental and that generates a warning, TODO: remove later self.check_metricset("system", "host", COMMON_FIELDS + fields, warnings_allowed=True) + @unittest.skipUnless(sys.platform == "linux2", "Only implemented for Linux") + @unittest.skipIf(sys.byteorder != "little", "Test only implemented for little-endian systems") + def test_metricset_login(self): + """ + login metricset collects information about logins (successful and failed) and system restarts. + """ + + fields = ["event.origin", "event.outcome", "message", "process.pid", "source.ip", + "user.name", "user.terminal"] + + config = { + "login.wtmp_file_pattern": os.path.abspath(os.path.join(self.beat_path, "tests/files/wtmp")), + "login.btmp_file_pattern": "-1" + } + + # Metricset is experimental and that generates a warning, TODO: remove later + self.check_metricset("system", "login", COMMON_FIELDS + fields, config, warnings_allowed=True) + @unittest.skipIf(sys.platform == "win32", "Not implemented for Windows") @unittest.skipIf(sys.platform == "linux2" and platform.linux_distribution()[0] != "debian", "Only implemented for Debian") From 864bb874f25870ac3dd185aa69b7ae3cba363845 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Wed, 30 Jan 2019 19:36:59 +0100 Subject: [PATCH 27/66] Use lowercase pattern for years parsing in filebeat pipelines (#10436) Elasticsearch 7.0 will change the date formatter and parser implementation to use Java formatter instead of the Joda one. After this change parsing years with `YYYY` will no longer work as expected, leading to incorrectly parsed dates. `yyyy` works as expected on both implementations, so use it instead. --- filebeat/module/apache/access/ingest/default.json | 2 +- filebeat/module/apache/error/ingest/pipeline.json | 2 +- filebeat/module/mysql/error/ingest/pipeline.json | 2 +- filebeat/module/nginx/access/ingest/default.json | 2 +- filebeat/module/nginx/error/ingest/pipeline.json | 2 +- filebeat/module/redis/log/ingest/pipeline.json | 2 +- filebeat/module/traefik/access/ingest/pipeline.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/filebeat/module/apache/access/ingest/default.json b/filebeat/module/apache/access/ingest/default.json index 3c25b9c17463..5664842dda51 100644 --- a/filebeat/module/apache/access/ingest/default.json +++ b/filebeat/module/apache/access/ingest/default.json @@ -31,7 +31,7 @@ "date": { "field": "apache.access.time", "target_field": "@timestamp", - "formats": ["dd/MMM/YYYY:H:m:s Z"] + "formats": ["dd/MMM/yyyy:H:m:s Z"] } }, { "remove": { diff --git a/filebeat/module/apache/error/ingest/pipeline.json b/filebeat/module/apache/error/ingest/pipeline.json index 3e8413033688..07cb14ef16d0 100644 --- a/filebeat/module/apache/error/ingest/pipeline.json +++ b/filebeat/module/apache/error/ingest/pipeline.json @@ -18,7 +18,7 @@ "date": { "field": "apache.error.timestamp", "target_field": "@timestamp", - "formats": ["EEE MMM dd H:m:s YYYY", "EEE MMM dd H:m:s.SSSSSS YYYY"], + "formats": ["EEE MMM dd H:m:s yyyy", "EEE MMM dd H:m:s.SSSSSS yyyy"], "ignore_failure": true } }, diff --git a/filebeat/module/mysql/error/ingest/pipeline.json b/filebeat/module/mysql/error/ingest/pipeline.json index 0c77ca01cbff..06dac9ce0a8a 100644 --- a/filebeat/module/mysql/error/ingest/pipeline.json +++ b/filebeat/module/mysql/error/ingest/pipeline.json @@ -24,7 +24,7 @@ "target_field": "@timestamp", "formats": [ "ISO8601", - "YYMMdd H:m:s" + "yyMMdd H:m:s" ], "ignore_failure": true } diff --git a/filebeat/module/nginx/access/ingest/default.json b/filebeat/module/nginx/access/ingest/default.json index 058135efdc85..4da914e7ef35 100644 --- a/filebeat/module/nginx/access/ingest/default.json +++ b/filebeat/module/nginx/access/ingest/default.json @@ -72,7 +72,7 @@ "field": "nginx.access.time", "target_field": "@timestamp", "formats": [ - "dd/MMM/YYYY:H:m:s Z" + "dd/MMM/yyyy:H:m:s Z" ], {< if .convert_timezone >}"timezone": "{{ event.timezone }}",{< end >} "ignore_failure": true diff --git a/filebeat/module/nginx/error/ingest/pipeline.json b/filebeat/module/nginx/error/ingest/pipeline.json index c37a9a45d3dc..930587ff8831 100644 --- a/filebeat/module/nginx/error/ingest/pipeline.json +++ b/filebeat/module/nginx/error/ingest/pipeline.json @@ -17,7 +17,7 @@ "date": { "field": "nginx.error.time", "target_field": "@timestamp", - "formats": ["YYYY/MM/dd H:m:s"], + "formats": ["yyyy/MM/dd H:m:s"], {< if .convert_timezone >}"timezone": "{{ event.timezone }}",{< end >} "ignore_failure": true } diff --git a/filebeat/module/redis/log/ingest/pipeline.json b/filebeat/module/redis/log/ingest/pipeline.json index c62c9c749cd5..c9ec2d3371b4 100644 --- a/filebeat/module/redis/log/ingest/pipeline.json +++ b/filebeat/module/redis/log/ingest/pipeline.json @@ -59,7 +59,7 @@ "field": "redis.log.timestamp", "target_field": "@timestamp", "formats": [ - "dd MMM YYYY H:m:s.SSS", + "dd MMM yyyy H:m:s.SSS", "dd MMM H:m:s.SSS", "dd MMM H:m:s", "UNIX" diff --git a/filebeat/module/traefik/access/ingest/pipeline.json b/filebeat/module/traefik/access/ingest/pipeline.json index 4f75c507633b..ff88d43ea31c 100644 --- a/filebeat/module/traefik/access/ingest/pipeline.json +++ b/filebeat/module/traefik/access/ingest/pipeline.json @@ -33,7 +33,7 @@ "field": "traefik.access.time", "target_field": "@timestamp", "formats": [ - "dd/MMM/YYYY:H:m:s Z" + "dd/MMM/yyyy:H:m:s Z" ] } }, From c42ebe4dfcc39cc936a89f4e246e1aa46480a1a1 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Jan 2019 11:19:12 -0800 Subject: [PATCH 28/66] Parse more fields from elasticsearch audit log (#10356) Follow up to https://github.com/elastic/beats/pull/10352 per https://github.com/elastic/beats/pull/10352#issuecomment-457933083: > While working on this PR I realized that we don't have sample lines for the **structured** elasticsearch audit log containing a request body (which is supposed to be parsed into the `http.request.body.content` field). I'm working with `@albertzaharovits` to get such a sample and will incorporate it into follow up PRs (for `master` and `6.x`). Accordingly, this PR adds sample lines to the structured and unstructured log file test fixtures for the `elasticsearch/audit` fileset and teaches the fileset to parse any new fields encountered in these sample lines. --- filebeat/docs/fields.asciidoc | 40 ++++++++++++++++++- .../elasticsearch/audit/_meta/fields.yml | 17 +++++++- .../audit/ingest/pipeline-json.json | 27 +++++++++++++ .../audit/ingest/pipeline-plaintext.json | 7 ++-- .../elasticsearch/audit/test/test-access.log | 1 + .../audit/test/test-access.log-expected.json | 22 +++++++++- .../elasticsearch/audit/test/test-audit.log | 1 + .../audit/test/test-audit.log-expected.json | 25 ++++++++++++ filebeat/module/elasticsearch/fields.go | 2 +- 9 files changed, 135 insertions(+), 7 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index e00a0bbe2277..88a55e93bef2 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4420,12 +4420,21 @@ Where the request originated: rest (request originated from a REST API request), -- +*`elasticsearch.audit.realm`*:: ++ +-- +type: keyword + +The authentication realm the authentication was validated against + +-- + *`elasticsearch.audit.user.realm`*:: + -- type: keyword -The authentication realm +The user's authentication realm, if authenticated -- @@ -4451,6 +4460,24 @@ The name of the action that was executed -- +*`elasticsearch.audit.url.params`*:: ++ +-- +type: keyword + +example: {username=jacknich2} + +REST URI parameters + +*`elasticsearch.audit.url.params.text`*:: ++ +-- +type: text + +-- + +-- + *`elasticsearch.audit.indices`*:: + -- @@ -4462,6 +4489,17 @@ Indices accessed by action -- +*`elasticsearch.audit.request.id`*:: ++ +-- +type: keyword + +example: WzL_kb6VSvOhAq0twPvHOQ + +Unique ID of request + +-- + *`elasticsearch.audit.request.name`*:: + -- diff --git a/filebeat/module/elasticsearch/audit/_meta/fields.yml b/filebeat/module/elasticsearch/audit/_meta/fields.yml index add12776b465..ff0a13cd1a64 100644 --- a/filebeat/module/elasticsearch/audit/_meta/fields.yml +++ b/filebeat/module/elasticsearch/audit/_meta/fields.yml @@ -10,8 +10,12 @@ description: "Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)" example: "local_node" type: keyword + - name: realm + description: "The authentication realm the authentication was validated against" + example": "default_file" + type: keyword - name: user.realm - description: "The authentication realm" + description: "The user's authentication realm, if authenticated" example": "active_directory" type: keyword - name: user.roles @@ -22,10 +26,21 @@ description: "The name of the action that was executed" example: "cluster:monitor/main" type: keyword + - name: url.params + description: "REST URI parameters" + example: "{username=jacknich2}" + type: keyword + multi_fields: + - name: text + type: text - name: indices description: "Indices accessed by action" example: [ "foo-2019.01.04", "foo-2019.01.03", "foo-2019.01.06" ] type: keyword + - name: request.id + description: "Unique ID of request" + example: "WzL_kb6VSvOhAq0twPvHOQ" + type: keyword - name: request.name description: "The type of request that was executed" example: "ClearScrollRequest" diff --git a/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json b/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json index 0ef3601bbd0d..f0479f631708 100644 --- a/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json +++ b/filebeat/module/elasticsearch/audit/ingest/pipeline-json.json @@ -119,6 +119,33 @@ "field": "elasticsearch.audit.user.name", "target_field": "user.name" } + }, + { + "dot_expander": { + "field": "request.method", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.request.method", + "target_field": "http.request.method", + "ignore_missing": true + } + + }, + { + "dot_expander": { + "field": "request.body", + "path": "elasticsearch.audit" + } + }, + { + "rename": { + "field": "elasticsearch.audit.request.body", + "target_field": "http.request.body.content", + "ignore_missing": true + } } ], "on_failure": [ diff --git a/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json b/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json index 1e37f253dacc..48d599ee030c 100644 --- a/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json +++ b/filebeat/module/elasticsearch/audit/ingest/pipeline-plaintext.json @@ -11,17 +11,18 @@ "ES_AUDIT_EVENT_TYPE": "\\[%{WORD:event.type}\\]", "ES_AUDIT_ORIGIN_TYPE": "(origin_type\\=\\[%{WORD:elasticsearch.audit.origin.type}\\])?", "ES_AUDIT_ORIGIN_ADDRESS": "(origin_address\\=\\[%{IPORHOST:source.ip}\\])?", - "ES_AUDIT_PRINCIPAL": "(principal\\=\\[%{WORD:user.name}\\])?", - "ES_AUDIT_REALM": "(realm\\=\\[%{WORD:elasticsearch.audit.user.realm}\\])?", + "ES_AUDIT_PRINCIPAL": "(principal\\=\\[%{DATA:user.name}\\])?", + "ES_AUDIT_REALM": "(realm\\=\\[%{WORD:elasticsearch.audit.realm}\\])?", "ES_AUDIT_ROLES": "(roles\\=\\[%{DATA:elasticsearch.audit.user.roles}\\])?", "ES_AUDIT_ACTION": "(action\\=\\[%{DATA:elasticsearch.audit.action}(\\[%{DATA:elasticsearch.audit.sub_action}\\])?\\])?", "ES_AUDIT_URI": "(uri=\\[%{DATA:url.original}\\])?", + "ES_AUDIT_URI_PARAMS": "(params=\\[%{DATA:elasticsearch.audit.url.params}\\])?", "ES_AUDIT_INDICES": "(indices\\=\\[%{DATA:elasticsearch.audit.indices}\\])?", "ES_AUDIT_REQUEST": "(request\\=\\[%{WORD:elasticsearch.audit.request.name}\\])?", "ES_AUDIT_REQUEST_BODY": "(request_body\\=\\[%{DATA:http.request.body.content}\\])?" }, "patterns": [ - "%{ES_TIMESTAMP}\\s*%{ES_NODE_NAME}\\s*%{ES_AUDIT_LAYER}\\s*%{ES_AUDIT_EVENT_TYPE}\\s*%{ES_AUDIT_ORIGIN_TYPE},?\\s*%{ES_AUDIT_ORIGIN_ADDRESS},?\\s*%{ES_AUDIT_PRINCIPAL},?\\s*%{ES_AUDIT_REALM},?\\s*%{ES_AUDIT_ROLES},?\\s*%{ES_AUDIT_ACTION},?\\s*%{ES_AUDIT_INDICES},?\\s*%{ES_AUDIT_URI},?\\s*%{ES_AUDIT_REQUEST},?\\s*%{ES_AUDIT_REQUEST_BODY},?" + "%{ES_TIMESTAMP}\\s*%{ES_NODE_NAME}\\s*%{ES_AUDIT_LAYER}\\s*%{ES_AUDIT_EVENT_TYPE}\\s*%{ES_AUDIT_ORIGIN_TYPE},?\\s*%{ES_AUDIT_ORIGIN_ADDRESS},?\\s*%{ES_AUDIT_PRINCIPAL},?\\s*%{ES_AUDIT_REALM},?\\s*%{ES_AUDIT_ROLES},?\\s*%{ES_AUDIT_ACTION},?\\s*%{ES_AUDIT_INDICES},?\\s*%{ES_AUDIT_URI},?\\s*%{ES_AUDIT_URI_PARAMS},?\\s*%{ES_AUDIT_REQUEST},?\\s*%{ES_AUDIT_REQUEST_BODY},?" ] } }, diff --git a/filebeat/module/elasticsearch/audit/test/test-access.log b/filebeat/module/elasticsearch/audit/test/test-access.log index c631cc62837d..b71ad94d177a 100644 --- a/filebeat/module/elasticsearch/audit/test/test-access.log +++ b/filebeat/module/elasticsearch/audit/test/test-access.log @@ -6,3 +6,4 @@ [2018-06-19T05:55:26,898] [transport] [access_denied] origin_type=[rest], origin_address=[147.107.128.77], principal=[_anonymous], action=[cluster:monitor/main], request=[MainRequest] [2018-06-19T05:24:15,190] [v_VJhjV] [rest] [authentication_failed] origin_address=[172.18.0.3], principal=[elastic], uri=[/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip], request_body=[body] [2019-01-08T14:15:02,011] [NodeName-0] [transport] [access_granted] origin_type=[transport], origin_address=[192.168.2.1], principal=[username], realm=[active_directory], roles=[kibana_user,my_custom_role_1,foo_reader], action=[indices:data/read/search[free_context]], indices=[foo-2019.01.04,foo-2019.01.03,foo-2019.01.06,foo-2019.01.05,foo-2019.01.08,servicelog-2019.01.07], request=[SearchFreeContextRequest] +[2019-01-27T20:04:27,244] [node-0] [rest] [authentication_success] origin_address=[::1], principal=[elastic-admin], realm=[default_file], uri=[/_xpack/security/user/jacknich2], params=[{username=jacknich2}], request_body=[{"metadata":{"intelligence":7},"full_name":"Jack Nicholson","roles":["admin","other_role1"],"email":"jacknich@example.com"}] diff --git a/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json b/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json index 07caf481db24..3811a496f12c 100644 --- a/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json +++ b/filebeat/module/elasticsearch/audit/test/test-access.log-expected.json @@ -132,8 +132,8 @@ ], "elasticsearch.audit.layer": "transport", "elasticsearch.audit.origin.type": "transport", + "elasticsearch.audit.realm": "active_directory", "elasticsearch.audit.request.name": "SearchFreeContextRequest", - "elasticsearch.audit.user.realm": "active_directory", "elasticsearch.audit.user.roles": [ "kibana_user", "my_custom_role_1", @@ -150,5 +150,25 @@ "service.type": "elasticsearch", "source.ip": "192.168.2.1", "user.name": "username" + }, + { + "@timestamp": "2019-01-27T20:04:27.244Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.layer": "rest", + "elasticsearch.audit.realm": "default_file", + "elasticsearch.audit.url.params": "{username=jacknich2}", + "elasticsearch.node.name": "node-0", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "event.type": "authentication_success", + "fileset.name": "audit", + "http.request.body.content": "{\"metadata\":{\"intelligence\":7},\"full_name\":\"Jack Nicholson\",\"roles\":[\"admin\",\"other_role1\"", + "input.type": "log", + "log.offset": 1626, + "message": "[2019-01-27T20:04:27,244] [node-0] [rest] [authentication_success] origin_address=[::1], principal=[elastic-admin], realm=[default_file], uri=[/_xpack/security/user/jacknich2], params=[{username=jacknich2}], request_body=[{\"metadata\":{\"intelligence\":7},\"full_name\":\"Jack Nicholson\",\"roles\":[\"admin\",\"other_role1\"],\"email\":\"jacknich@example.com\"}]", + "service.type": "elasticsearch", + "source.ip": "::1", + "url.original": "/_xpack/security/user/jacknich2", + "user.name": "elastic-admin" } ] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/audit/test/test-audit.log b/filebeat/module/elasticsearch/audit/test/test-audit.log index 2c74b5cbee95..4937ec8ef76d 100644 --- a/filebeat/module/elasticsearch/audit/test/test-audit.log +++ b/filebeat/module/elasticsearch/audit/test/test-audit.log @@ -4,3 +4,4 @@ {"@timestamp":"2018-10-31T09:35:11,430", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"_xpack_security", "user.realm":"__attach", "user.roles":["superuser"], "origin.type":"local_node", "origin.address":"127.0.0.1:9300", "action":"cluster:admin/xpack/security/realm/cache/clear[n]", "request.name":"Node"} {"@timestamp":"2018-10-31T09:35:12,303", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"elastic", "user.realm":"reserved", "user.roles":["superuser"], "origin.type":"rest","origin.address":"[::1]:61711", "action":"cluster:admin/xpack/security/user/change_password", "request.name":"ChangePasswordRequest"} {"@timestamp":"2018-10-31T09:35:12,314", "node.id":"DSiWcTyeThWtUXLB9J0BMw", "event.type":"transport", "event.action":"access_granted", "user.name":"_xpack_security", "user.realm":"__attach", "user.roles":["superuser"], "origin.type":"local_node", "origin.address":"127.0.0.1:9300", "action":"indices:admin/create", "request.name":"CreateIndexRequest", "indices":[".security-6"]} +{"@timestamp":"2019-01-27T20:15:10,380", "node.name":"node-0", "node.id":"y8fa3M5zSSGo1M_KJRMUXw", "event.type":"rest", "event.action":"authentication_success", "user.name":"elastic-admin", "origin.type":"rest", "origin.address":"[::1]:58955", "realm":"default_file", "url.path":"/_search", "request.method":"GET", "request.body":"\n{\n \"query\" : {\n \"term\" : { \"user\" : \"kimchy\" }\n }\n}\n", "request.id":"WzL_kb6VSvOhAq0twPvHOQ"} diff --git a/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json b/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json index 9d46c4f18007..c3e4ea3d40ef 100644 --- a/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json +++ b/filebeat/module/elasticsearch/audit/test/test-audit.log-expected.json @@ -141,5 +141,30 @@ "source.ip": "127.0.0.1", "source.port": 9300, "user.name": "_xpack_security" + }, + { + "@timestamp": "2019-01-27T20:15:10.380Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.audit.layer": "rest", + "elasticsearch.audit.origin.type": "rest", + "elasticsearch.audit.realm": "default_file", + "elasticsearch.audit.request.id": "WzL_kb6VSvOhAq0twPvHOQ", + "elasticsearch.node.id": "y8fa3M5zSSGo1M_KJRMUXw", + "elasticsearch.node.name": "node-0", + "event.action": "authentication_success", + "event.dataset": "elasticsearch.audit", + "event.module": "elasticsearch", + "fileset.name": "audit", + "http.request.body.content": "\n{\n \"query\" : {\n \"term\" : { \"user\" : \"kimchy\" }\n }\n}\n", + "http.request.method": "GET", + "input.type": "log", + "log.offset": 2056, + "message": "{\"@timestamp\":\"2019-01-27T20:15:10,380\", \"node.name\":\"node-0\", \"node.id\":\"y8fa3M5zSSGo1M_KJRMUXw\", \"event.type\":\"rest\", \"event.action\":\"authentication_success\", \"user.name\":\"elastic-admin\", \"origin.type\":\"rest\", \"origin.address\":\"[::1]:58955\", \"realm\":\"default_file\", \"url.path\":\"/_search\", \"request.method\":\"GET\", \"request.body\":\"\\n{\\n \\\"query\\\" : {\\n \\\"term\\\" : { \\\"user\\\" : \\\"kimchy\\\" }\\n }\\n}\\n\", \"request.id\":\"WzL_kb6VSvOhAq0twPvHOQ\"}", + "service.type": "elasticsearch", + "source.address": "[::1]:58955", + "source.ip": "::1", + "source.port": 58955, + "url.original": "/_search", + "user.name": "elastic-admin" } ] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/fields.go b/filebeat/module/elasticsearch/fields.go index f556467c7104..68ab7c2e03e1 100644 --- a/filebeat/module/elasticsearch/fields.go +++ b/filebeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" } From 69fba5f78c8065205738f77c0c42f0a0a403f34b Mon Sep 17 00:00:00 2001 From: Steffen Siering Date: Wed, 30 Jan 2019 20:22:49 +0100 Subject: [PATCH 29/66] Remove deprecated --setup, --version, and --configflags CLI flags (#10138) * Remove deprecated --setup and --version, and -configtest flags --- CHANGELOG.next.asciidoc | 3 + auditbeat/auditbeat.yml | 2 +- filebeat/filebeat.yml | 2 +- filebeat/tests/system/test_ml.py | 23 +++----- heartbeat/heartbeat.yml | 2 +- journalbeat/journalbeat.yml | 2 +- libbeat/_meta/config.yml | 2 +- libbeat/cfgfile/cfgfile.go | 7 --- libbeat/cmd/instance/beat.go | 37 ++---------- libbeat/cmd/run.go | 8 --- libbeat/docs/command-reference.asciidoc | 23 ++------ libbeat/tests/system/beat/beat.py | 2 + libbeat/tests/system/test_base.py | 58 ------------------- libbeat/tests/system/test_cmd.py | 35 ----------- metricbeat/metricbeat.yml | 2 +- packetbeat/packetbeat.yml | 2 +- .../tests/system/test_0026_test_config.py | 51 ++++++++++++++-- winlogbeat/tests/system/test_config.py | 45 ++++++++++++-- winlogbeat/tests/system/test_eventlogging.py | 2 +- winlogbeat/tests/system/test_wineventlog.py | 29 ++++++---- winlogbeat/winlogbeat.yml | 2 +- x-pack/auditbeat/auditbeat.yml | 2 +- x-pack/filebeat/filebeat.yml | 2 +- x-pack/functionbeat/functionbeat.yml | 2 +- x-pack/metricbeat/metricbeat.yml | 2 +- 25 files changed, 140 insertions(+), 207 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 509115e037ec..15640651e62a 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -23,6 +23,9 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d leaf field `user.group` is now the `group` field set. {pull}10275[10275] - Update the code of Central Management to align with the new returned format. {pull}10019[10019] - Docker and Kubernetes labels/annotations will be "dedoted" by default. {pull}10338[10338] +- Remove --setup command line flag. {pull}10138[10138] +- Remove --version command line flag. {pull}10138[10138] +- Remove --configtest command line flag. {pull}10138[10138] *Auditbeat* diff --git a/auditbeat/auditbeat.yml b/auditbeat/auditbeat.yml index 3522827d7a9f..0004039a77c6 100644 --- a/auditbeat/auditbeat.yml +++ b/auditbeat/auditbeat.yml @@ -73,7 +73,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml index 2664206c560b..6585d1e49a89 100644 --- a/filebeat/filebeat.yml +++ b/filebeat/filebeat.yml @@ -101,7 +101,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/filebeat/tests/system/test_ml.py b/filebeat/tests/system/test_ml.py index d6f69356662b..aa84b92a0fad 100644 --- a/filebeat/tests/system/test_ml.py +++ b/filebeat/tests/system/test_ml.py @@ -31,21 +31,19 @@ def init(self): self.index_name = "test-filebeat-ml" @parameterized.expand([ - (True, False), - (True, True), - (False, False), - (False, True), + (False,), + (True,), ]) @unittest.skipIf(not INTEGRATION_TESTS, "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") @unittest.skipIf(os.getenv("TESTING_ENVIRONMENT") == "2x", "integration test not available on 2.x") @unittest.skipIf(os.name == "nt", "skipped on Windows") - def test_ml_setup(self, setup_flag, modules_flag): + def test_ml_setup(self, modules_flag): """ Test ML are installed in all possible ways """ - self._run_ml_test(setup_flag, modules_flag) + self._run_ml_test(modules_flag) - def _run_ml_test(self, setup_flag, modules_flag): + def _run_ml_test(self, modules_flag): self.init() from elasticsearch import AuthorizationException @@ -55,7 +53,7 @@ def _run_ml_test(self, setup_flag, modules_flag): except AuthorizationException: print("License already enabled") - print("Test setup_flag: {}, modules_flag: {}".format(setup_flag, modules_flag)) + print("Test modules_flag: {}".format(modules_flag)) # Clean any previous state for df in self.es.transport.perform_request("GET", "/_xpack/ml/datafeeds/")["datafeeds"]: @@ -93,14 +91,9 @@ def _run_ml_test(self, setup_flag, modules_flag): "-c", cfgfile ] - # Skipping dashboard loading to speed up tests, unfortunately only works for setup and not --setup + # Skipping dashboard loading to speed up tests cmd += ["-E", "setup.dashboards.enabled=false"] - - if setup_flag: - cmd += ["--setup"] - else: - cmd += ["setup", "--machine-learning"] - + cmd += ["setup", "--machine-learning"] if modules_flag: cmd += ["--modules=nginx"] diff --git a/heartbeat/heartbeat.yml b/heartbeat/heartbeat.yml index 9f607e4a8409..6e1d31515e70 100644 --- a/heartbeat/heartbeat.yml +++ b/heartbeat/heartbeat.yml @@ -58,7 +58,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/journalbeat/journalbeat.yml b/journalbeat/journalbeat.yml index ed12b9d15513..06326ece0819 100644 --- a/journalbeat/journalbeat.yml +++ b/journalbeat/journalbeat.yml @@ -64,7 +64,7 @@ journalbeat.inputs: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/libbeat/_meta/config.yml b/libbeat/_meta/config.yml index af767564d8b0..c038793ef682 100644 --- a/libbeat/_meta/config.yml +++ b/libbeat/_meta/config.yml @@ -18,7 +18,7 @@ #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/libbeat/cfgfile/cfgfile.go b/libbeat/cfgfile/cfgfile.go index f2ff9ca1653b..a973ffccfedb 100644 --- a/libbeat/cfgfile/cfgfile.go +++ b/libbeat/cfgfile/cfgfile.go @@ -18,7 +18,6 @@ package cfgfile import ( - "flag" "fmt" "os" "path/filepath" @@ -34,7 +33,6 @@ var ( // be called prior to flags.Parse(). configfiles = common.StringArrFlag(nil, "c", "beat.yml", "Configuration file, relative to path.config") overwrites = common.SettingFlag(nil, "E", "Configuration overwrite") - testConfig = flag.Bool("configtest", false, "Test configuration and exit.") // Additional default settings, that must be available for variable expansion defaults = common.MustNewConfigFrom(map[string]interface{}{ @@ -199,8 +197,3 @@ func GetPathConfig() string { // TODO: Do we need this or should we always return *homePath? return "" } - -// IsTestConfig returns whether or not this is configuration used for testing -func IsTestConfig() bool { - return *testConfig -} diff --git a/libbeat/cmd/instance/beat.go b/libbeat/cmd/instance/beat.go index 3e0465d5eb6f..2ab590dc900f 100644 --- a/libbeat/cmd/instance/beat.go +++ b/libbeat/cmd/instance/beat.go @@ -111,18 +111,10 @@ type beatConfig struct { ILM *common.Config `config:"output.elasticsearch.ilm"` } -var ( - printVersion bool - setup bool -) - var debugf = logp.MakeDebug("beat") func init() { initRand() - - flag.BoolVar(&printVersion, "version", false, "Print the version and exit") - flag.BoolVar(&setup, "setup", false, "Load sample Kibana dashboards and setup Machine Learning") } // initRand initializes the runtime random number generator seed using @@ -381,13 +373,6 @@ func (b *Beat) launch(settings Settings, bt beat.Creator) error { defer reporter.Stop() } - // If -configtest was specified, exit now prior to run. - if cfgfile.IsTestConfig() { - cfgwarn.Deprecate("6.0", "-configtest flag has been deprecated, use configtest subcommand") - fmt.Println("Config OK") - return beat.GracefulExit - } - ctx, cancel := context.WithCancel(context.Background()) svc.HandleSignals(beater.Stop, cancel) @@ -395,12 +380,6 @@ func (b *Beat) launch(settings Settings, bt beat.Creator) error { if err != nil { return err } - if setup && b.SetupMLCallback != nil { - err = b.SetupMLCallback(&b.Beat, b.Config.Kibana) - if err != nil { - return err - } - } logp.Info("%s start running.", b.Info.Beat) @@ -548,18 +527,10 @@ func (b *Beat) Setup(bt beat.Creator, settings SetupSettings) error { }()) } -// handleFlags parses the command line flags. It handles the '-version' flag -// and invokes the HandleFlags callback if implemented by the Beat. +// handleFlags parses the command line flags. It invokes the HandleFlags +// callback if implemented by the Beat. func (b *Beat) handleFlags() error { flag.Parse() - - if printVersion { - cfgwarn.Deprecate("6.0", "-version flag has been deprecated, use version subcommand") - fmt.Printf("%s version %s (%s), libbeat %s\n", - b.Info.Beat, b.Info.Version, runtime.GOARCH, version.GetDefaultVersion()) - return beat.GracefulExit - } - return cfgfile.HandleFlags() } @@ -722,8 +693,8 @@ func openRegular(filename string) (*os.File, error) { } func (b *Beat) loadDashboards(ctx context.Context, force bool) error { - if setup || force { - // -setup implies dashboards.enabled=true + if force { + // force implies dashboards.enabled=true if b.Config.Dashboards == nil { b.Config.Dashboards = common.NewConfig() } diff --git a/libbeat/cmd/run.go b/libbeat/cmd/run.go index 944b18e3cb5d..4ebab4c6f7af 100644 --- a/libbeat/cmd/run.go +++ b/libbeat/cmd/run.go @@ -46,14 +46,6 @@ func genRunCmd(settings instance.Settings, beatCreator beat.Creator, runFlags *p runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("httpprof")) runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("cpuprofile")) runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("memprofile")) - runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("setup")) - - // TODO deprecate in favor of subcommands (7.0): - runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("configtest")) - runCmd.Flags().AddGoFlag(flag.CommandLine.Lookup("version")) - - runCmd.Flags().MarkDeprecated("version", "use version subcommand") - runCmd.Flags().MarkDeprecated("configtest", "use test config subcommand") if runFlags != nil { runCmd.Flags().AddFlagSet(runFlags) diff --git a/libbeat/docs/command-reference.asciidoc b/libbeat/docs/command-reference.asciidoc index 014c321caf7e..95291cab9e05 100644 --- a/libbeat/docs/command-reference.asciidoc +++ b/libbeat/docs/command-reference.asciidoc @@ -523,21 +523,6 @@ the end of the file is reached. By default harvesters are closed after `close_inactive` is reached. endif::[] -*`--setup`*:: -ifdef::deprecate_dashboard_loading[] -deprecated[{deprecate_dashboard_loading}] -endif::[] -+ -ifdef::has_ml_jobs[] -Loads the initial setup, including Elasticsearch template, {kib} index pattern, -{kib} dashboards (when available), and Machine learning jobs. -endif::[] -ifndef::has_ml_jobs[] -Loads the initial setup, including Elasticsearch template, {kib} index pattern, and {kib} dashboards (when available). -endif::[] -If you want to use the command without running {beatname_uc}, use the <> command instead. - - ifeval::["{beatname_lc}"=="metricbeat"] *`--system.hostfs MOUNT_POINT`*:: @@ -558,14 +543,14 @@ endif::[] ["source","sh",subs="attributes"] ----- -{beatname_lc} run -e --setup +{beatname_lc} run -e ----- Or: ["source","sh",subs="attributes"] ----- -{beatname_lc} -e --setup +{beatname_lc} -e ----- [[setup-command]] @@ -583,8 +568,8 @@ ifdef::has_ml_jobs[] necessary to analyze data for anomalies. endif::[] -Use this command instead of `run --setup` when you want to set up the -environment without actually running {beatname_uc} and ingesting data. +Use this command if you want to set up the environment without actually running +{beatname_uc} and ingesting data. *SYNOPSIS* diff --git a/libbeat/tests/system/beat/beat.py b/libbeat/tests/system/beat/beat.py index 7e114f2def2b..fa88fb1aba32 100644 --- a/libbeat/tests/system/beat/beat.py +++ b/libbeat/tests/system/beat/beat.py @@ -221,6 +221,8 @@ def start_beat(self, def render_config_template(self, template_name=None, output=None, **kargs): + print("render config") + # Init defaults if template_name is None: template_name = self.beat_name diff --git a/libbeat/tests/system/test_base.py b/libbeat/tests/system/test_base.py index a20ae6d1d619..a08af980e9f0 100644 --- a/libbeat/tests/system/test_base.py +++ b/libbeat/tests/system/test_base.py @@ -65,25 +65,6 @@ def test_invalid_config_cli_param(self): assert exit_code == 1 assert self.log_contains("error unpacking config data") is True - def test_config_test(self): - """ - Checks if -configtest works as expected - """ - shutil.copy(self.beat_path + "/_meta/config.yml", - os.path.join(self.working_dir, "libbeat.yml")) - with open(self.working_dir + "/mockbeat.template.json", "w") as f: - f.write('{"template": true}') - with open(self.working_dir + "/mockbeat.template-es2x.json", "w") as f: - f.write('{"template": true}') - - exit_code = self.run_beat( - config="libbeat.yml", - extra_args=["-configtest", - "-path.config", self.working_dir]) - - assert exit_code == 0 - assert self.log_contains("Config OK") is True - # NOTE(ph): I've removed the code to crash with theses settings, but the test is still usefull if # more settings are added. # def test_invalid_config_with_removed_settings(self): @@ -101,45 +82,6 @@ def test_config_test(self): # assert self.log_contains("setting 'queue_size' has been removed") # assert self.log_contains("setting 'bulk_queue_size' has been removed") - def test_version_simple(self): - """ - Tests -version prints a version and exits. - """ - self.start_beat(extra_args=["-version"]).check_wait() - assert self.log_contains("beat version") is True - - def test_version(self): - """ - Checks if version param works - """ - args = [self.beat_path + "/libbeat.test"] - - args.extend(["-version", - "-e", - "-systemTest", - "-v", - "-d", "*", - ]) - if os.getenv("TEST_COVERAGE") == "true": - args.extend([ - "-test.coverprofile", - os.path.join(self.working_dir, "coverage.cov"), - ]) - - assert self.log_contains("error loading config file") is False - - with open(os.path.join(self.working_dir, "mockbeat.log"), "wb") \ - as outputfile: - proc = subprocess.Popen(args, - stdout=outputfile, - stderr=subprocess.STDOUT) - exit_code = proc.wait() - assert exit_code == 0 - - assert self.log_contains("mockbeat") is True - assert self.log_contains("version") is True - assert self.log_contains("9.9.9") is True - def test_console_output_timed_flush(self): """ outputs/console - timed flush diff --git a/libbeat/tests/system/test_cmd.py b/libbeat/tests/system/test_cmd.py index c657a3cad3cd..e29af7301db5 100644 --- a/libbeat/tests/system/test_cmd.py +++ b/libbeat/tests/system/test_cmd.py @@ -67,41 +67,6 @@ def test_setup_template(self): assert exit_code == 0 assert len(self.es.cat.templates(name='mockbeat-*', h='name')) > 0 - @unittest.skipUnless(INTEGRATION_TESTS, "integration test") - @attr('integration') - def test_setup_flag(self): - """ - Test --setup flag on run command - """ - # Delete any existing template - try: - self.es.indices.delete_template('mockbeat-*') - except: - pass - - assert len(self.es.cat.templates(name='mockbeat-*', h='name')) == 0 - - shutil.copy(self.beat_path + "/_meta/config.yml", - os.path.join(self.working_dir, "libbeat.yml")) - shutil.copy(self.beat_path + "/fields.yml", - os.path.join(self.working_dir, "fields.yml")) - - proc = self.start_beat( - extra_args=["--setup", - "--path.config", self.working_dir, - "-E", "setup.dashboards.file=" + - os.path.join(self.beat_path, "tests", "files", "testbeat-dashboards.zip"), - "-E", "setup.dashboards.beat=testbeat", - "-E", "setup.kibana.protocol=http", - "-E", "setup.kibana.host=" + self.get_kibana_host(), - "-E", "setup.kibana.port=" + self.get_kibana_port(), - "-E", "output.elasticsearch.hosts=['" + self.get_host() + "']"], - config="libbeat.yml") - - self.wait_until(lambda: self.es.cat.templates(name='mockbeat-*', h='name') > 0) - self.wait_until(lambda: self.log_contains("Kibana dashboards successfully loaded")) - proc.check_kill_and_wait() - @unittest.skipUnless(INTEGRATION_TESTS, "integration test") @attr('integration') def test_test_config(self): diff --git a/metricbeat/metricbeat.yml b/metricbeat/metricbeat.yml index 9732d9907b1c..b669f2f7fba1 100644 --- a/metricbeat/metricbeat.yml +++ b/metricbeat/metricbeat.yml @@ -45,7 +45,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/packetbeat/packetbeat.yml b/packetbeat/packetbeat.yml index 0c207a4d1991..ffc36d4beab7 100644 --- a/packetbeat/packetbeat.yml +++ b/packetbeat/packetbeat.yml @@ -127,7 +127,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/packetbeat/tests/system/test_0026_test_config.py b/packetbeat/tests/system/test_0026_test_config.py index 81011b741622..d9ea29a89aa9 100644 --- a/packetbeat/tests/system/test_0026_test_config.py +++ b/packetbeat/tests/system/test_0026_test_config.py @@ -1,5 +1,7 @@ from packetbeat import BaseTest import os +import unittest +import subprocess """ Tests for checking the -configtest CLI option and the @@ -9,24 +11,63 @@ class Test(BaseTest): + @unittest.skipIf(os.name != 'linux', "default device 'any' only exists on linux") def test_ok_config(self): """ - With -configtest and correct configuration, it should exit with + With 'test config' and correct configuration, it should exit with status 0 but not actually process any packets. """ + + print("start test") + self.render_config_template() - self.run_packetbeat(pcap="http_post.pcap", - extra_args=["-configtest"]) + self.run_pb_config_tst() assert not os.path.isfile( os.path.join(self.working_dir, "output/packetbeat")) def test_config_error(self): """ - With -configtest and an error in the configuration, it should + With 'test config' and an error in the configuration, it should return a non-zero error code. """ self.render_config_template( bpf_filter="invalid BPF filter" ) - self.start_packetbeat(extra_args=["-configtest"]).check_wait(exit_code=1) + + self.run_pb_config_tst(exit_code=1) + + def run_pb_config_tst(self, exit_code=0): + config = "packetbeat.yml" + + cmd = os.path.join(self.beat_path, "packetbeat.test") + args = [ + cmd, "-systemTest", + "-c", os.path.join(self.working_dir, config), + ] + + if os.getenv("TEST_COVERAGE") == "true": + args += [ + "-test.coverprofile", + os.path.join(self.working_dir, "coverage.cov"), + ] + + args.extend(["test", "config"]) + + output = "packetbeat.log" + + with open(os.path.join(self.working_dir, output), "wb") as outfile: + proc = subprocess.Popen(args, + stdout=outfile, + stderr=subprocess.STDOUT + ) + actual_exit_code = proc.wait() + + if actual_exit_code != exit_code: + print("============ Log Output =====================") + with open(os.path.join(self.working_dir, output)) as f: + print(f.read()) + print("============ Log End Output =====================") + assert actual_exit_code == exit_code, "Expected exit code to be %d, but it was %d" % ( + exit_code, actual_exit_code) + return actual_exit_code diff --git a/winlogbeat/tests/system/test_config.py b/winlogbeat/tests/system/test_config.py index 13b51694cd6b..16862bf44f97 100644 --- a/winlogbeat/tests/system/test_config.py +++ b/winlogbeat/tests/system/test_config.py @@ -1,3 +1,5 @@ +import os +import subprocess import sys import unittest from winlogbeat import BaseTest @@ -20,7 +22,7 @@ def test_valid_config(self): {"name": "Application", "ignore_older": "48h"} ] ) - self.start_beat(extra_args=["-configtest"]).check_wait() + self.run_config_tst(exit_code=0) def test_invalid_ignore_older(self): """ @@ -31,7 +33,7 @@ def test_invalid_ignore_older(self): {"name": "Application", "ignore_older": "1 hour"} ] ) - self.start_beat(extra_args=["-configtest"]).check_wait(exit_code=1) + self.run_config_tst(exit_code=1) assert self.log_contains( "unknown unit hour in duration 1 hour " "accessing 'winlogbeat.event_logs.0.ignore_older'") @@ -45,7 +47,7 @@ def test_invalid_level(self): {"name": "Application", "level": "errors"} ] ) - self.start_beat(extra_args=["-configtest"]).check_wait(exit_code=1) + self.run_config_tst(exit_code=1) assert self.log_contains( "invalid level ('errors') for query") @@ -58,6 +60,41 @@ def test_invalid_api(self): {"name": "Application", "api": "file"} ] ) - self.start_beat(extra_args=["-configtest"]).check_wait(exit_code=1) + self.run_config_tst(exit_code=1) assert self.log_contains("Failed to create new event log. " "file API is not available") + + def run_config_tst(self, pcap=None, exit_code=0): + config = "winlogbeat.yml" + + cmd = os.path.join(self.beat_path, "winlogbeat.test") + args = [ + cmd, "-systemTest", + "-c", os.path.join(self.working_dir, config), + ] + + if os.getenv("TEST_COVERAGE") == "true": + args += [ + "-test.coverprofile", + os.path.join(self.working_dir, "coverage.cov"), + ] + + args.extend(["test", "config"]) + + output = "winlogbeat.log" + + with open(os.path.join(self.working_dir, output), "wb") as outfile: + proc = subprocess.Popen(args, + stdout=outfile, + stderr=subprocess.STDOUT + ) + actual_exit_code = proc.wait() + + if actual_exit_code != exit_code: + print("============ Log Output =====================") + with open(os.path.join(self.working_dir, output)) as f: + print(f.read()) + print("============ Log End Output =====================") + assert actual_exit_code == exit_code, "Expected exit code to be %d, but it was %d" % ( + exit_code, actual_exit_code) + return actual_exit_code diff --git a/winlogbeat/tests/system/test_eventlogging.py b/winlogbeat/tests/system/test_eventlogging.py index adfbef280782..2cc635bdc4e8 100644 --- a/winlogbeat/tests/system/test_eventlogging.py +++ b/winlogbeat/tests/system/test_eventlogging.py @@ -169,7 +169,7 @@ def test_unknown_eventlog_config(self): } ] ) - self.start_beat(extra_args=["-configtest"]).check_wait(exit_code=1) + self.start_beat().check_wait(exit_code=1) assert self.log_contains("4 errors: Invalid event log key") def test_utf16_characters(self): diff --git a/winlogbeat/tests/system/test_wineventlog.py b/winlogbeat/tests/system/test_wineventlog.py index 757bdbc7e18f..fc71c9d1693d 100644 --- a/winlogbeat/tests/system/test_wineventlog.py +++ b/winlogbeat/tests/system/test_wineventlog.py @@ -170,7 +170,8 @@ def test_include_xml(self): self.assertTrue(len(evts), 1) self.assert_common_fields(evts[0], msg=msg) self.assertTrue("xml" in evts[0]) - self.assertTrue(evts[0]["xml"].endswith(''), 'xml value: "{}"'.format(evts[0]["xml"])) + self.assertTrue(evts[0]["xml"].endswith(''), + 'xml value: "{}"'.format(evts[0]["xml"])) def test_query_event_id(self): """ @@ -205,8 +206,10 @@ def test_query_level_single(self): """ self.write_event_log("success", level=win32evtlog.EVENTLOG_SUCCESS) self.write_event_log("error", level=win32evtlog.EVENTLOG_ERROR_TYPE) - self.write_event_log("warning", level=win32evtlog.EVENTLOG_WARNING_TYPE) - self.write_event_log("information", level=win32evtlog.EVENTLOG_INFORMATION_TYPE) + self.write_event_log( + "warning", level=win32evtlog.EVENTLOG_WARNING_TYPE) + self.write_event_log( + "information", level=win32evtlog.EVENTLOG_INFORMATION_TYPE) evts = self.read_events(config={ "event_logs": [ { @@ -223,10 +226,14 @@ def test_query_level_multiple(self): """ wineventlog - Query by level (error, warning) """ - self.write_event_log("success", level=win32evtlog.EVENTLOG_SUCCESS) # Level 0, Info - self.write_event_log("error", level=win32evtlog.EVENTLOG_ERROR_TYPE) # Level 2 - self.write_event_log("warning", level=win32evtlog.EVENTLOG_WARNING_TYPE) # Level 3 - self.write_event_log("information", level=win32evtlog.EVENTLOG_INFORMATION_TYPE) # Level 4 + self.write_event_log( + "success", level=win32evtlog.EVENTLOG_SUCCESS) # Level 0, Info + self.write_event_log( + "error", level=win32evtlog.EVENTLOG_ERROR_TYPE) # Level 2 + self.write_event_log( + "warning", level=win32evtlog.EVENTLOG_WARNING_TYPE) # Level 3 + self.write_event_log( + "information", level=win32evtlog.EVENTLOG_INFORMATION_TYPE) # Level 4 evts = self.read_events(config={ "event_logs": [ { @@ -284,7 +291,8 @@ def test_query_multi_param(self): self.write_event_log("selected", source=self.otherAppName, eventID=556, level=win32evtlog.EVENTLOG_ERROR_TYPE) self.write_event_log("filtered", source=self.otherAppName, eventID=556) - self.write_event_log("filtered", level=win32evtlog.EVENTLOG_WARNING_TYPE) + self.write_event_log( + "filtered", level=win32evtlog.EVENTLOG_WARNING_TYPE) evts = self.read_events(config={ "event_logs": [ { @@ -312,8 +320,9 @@ def test_unknown_eventlog_config(self): "invalid": "garbage"} ] ) - self.start_beat(extra_args=["-configtest"]).check_wait(exit_code=1) - assert self.log_contains("1 error: Invalid event log key 'invalid' found.") + self.start_beat().check_wait(exit_code=1) + assert self.log_contains( + "1 error: Invalid event log key 'invalid' found.") def test_utf16_characters(self): """ diff --git a/winlogbeat/winlogbeat.yml b/winlogbeat/winlogbeat.yml index f310887207c8..d8fc5fd1b178 100644 --- a/winlogbeat/winlogbeat.yml +++ b/winlogbeat/winlogbeat.yml @@ -49,7 +49,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/x-pack/auditbeat/auditbeat.yml b/x-pack/auditbeat/auditbeat.yml index 7b0ca2d075e5..b52dc649e7e1 100644 --- a/x-pack/auditbeat/auditbeat.yml +++ b/x-pack/auditbeat/auditbeat.yml @@ -95,7 +95,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/x-pack/filebeat/filebeat.yml b/x-pack/filebeat/filebeat.yml index 2664206c560b..6585d1e49a89 100644 --- a/x-pack/filebeat/filebeat.yml +++ b/x-pack/filebeat/filebeat.yml @@ -101,7 +101,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/x-pack/functionbeat/functionbeat.yml b/x-pack/functionbeat/functionbeat.yml index 1136f2d26ba4..31c90a1d4af7 100644 --- a/x-pack/functionbeat/functionbeat.yml +++ b/x-pack/functionbeat/functionbeat.yml @@ -164,7 +164,7 @@ functionbeat.provider.aws.functions: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL diff --git a/x-pack/metricbeat/metricbeat.yml b/x-pack/metricbeat/metricbeat.yml index 9732d9907b1c..b669f2f7fba1 100644 --- a/x-pack/metricbeat/metricbeat.yml +++ b/x-pack/metricbeat/metricbeat.yml @@ -45,7 +45,7 @@ setup.template.settings: #============================== Dashboards ===================================== # These settings control loading the sample dashboards to the Kibana index. Loading # the dashboards is disabled by default and can be enabled either by setting the -# options here, or by using the `-setup` CLI flag or the `setup` command. +# options here or by using the `setup` command. #setup.dashboards.enabled: false # The URL from where to download the dashboards archive. By default this URL From 34fecd4c9499e166b351b7b0fb0bbd61833cfebc Mon Sep 17 00:00:00 2001 From: Mario Castro Date: Wed, 30 Jan 2019 22:13:13 +0100 Subject: [PATCH 30/66] Metricbeat overview dashboard for Zookeeper (#10379) --- CHANGELOG.next.asciidoc | 1 + .../docs/images/metricbeat-zookeeper.png | Bin 0 -> 358303 bytes metricbeat/docs/modules/zookeeper.asciidoc | 7 + metricbeat/docs/modules_list.asciidoc | 2 +- .../module/zookeeper/_meta/docs.asciidoc | 7 + .../Metricbeat-zookeeper-overview.json | 504 ++++++++++++++++++ 6 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 metricbeat/docs/images/metricbeat-zookeeper.png create mode 100644 metricbeat/module/zookeeper/_meta/kibana/7/dashboard/Metricbeat-zookeeper-overview.json diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 15640651e62a..213fb6ac3ece 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -261,6 +261,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Rename 'db' Metricset to 'transaction_log' in MSSQL Metricbeat module {pull}10109[10109] - Added 'server' Metricset to Zookeeper Metricbeat module {issue}8938[8938] {pull}10341[10341] - Release AWS module as GA. {pull}10345[10345] +- Add overview dashboard to Zookeeper Metricbeat module {pull}10379[10379] *Packetbeat* diff --git a/metricbeat/docs/images/metricbeat-zookeeper.png b/metricbeat/docs/images/metricbeat-zookeeper.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c57e766082673c3a0b225f4d8503145d85bf2d GIT binary patch literal 358303 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Ð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%0DZJ2+kr9@vG+?~LA$ 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‡Y)Hs;KD%vBMp#942*x4t8 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
2&NF63!G#e%6kUt~(cYliAF5y!_my!wp~ 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
PcD;3zEyXeslLXazwmm-zDUYe8yqv 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 z zte~w;VUSPj(dipv&|4WK>|K;Ye#bkKuT8%8L~^hoS_3Fka2MyV0X0ivxcZ&peFgfv zB5fx+_A@J#s0LI@J}JsC)RoO+k&;posW$-xzN!k))i z1mDHk;vKP<)d+~iP>qMeH85pt((pd>vvl+O+wo+XUw?DPH#cWE(H#V7&HtXVY_^2` z>8RVobCjCrHt&vD(%>5!8v_zPr5uV>+U>~~nmHh#f<^CZ2y3EsnOs*Qdys+tK-&MI zJ@IB@G06ya@jakJKy=G_0}J8Nr*U1M>NId!On|yr5FX6^ucsK)dlprJdIj(wNb>_e zRu62Dlm&UVG!TuWrEP3&1>qP_9ss~*zi55}Ae#C4R&~V3p28U9dAFKGpXRAyOkCMb z;!lC#v>5wH_0HX?VYL==Xw8MXLYv~2!)ZW<$lbz<>$V^5<;DfQJ)JXg!|@GJ_oy-I zdHc-%ohr2-pF~k@$_VZ*n{(-u*J=T39B#mVYMDnMOA7&@kwD?5r>2%D-48;Bpwy%_ zCST*Ylt&Q^qCLKQ49Oi=<}>lseUhI`334pm(rM3Q!a0|zXaNI(eGq(;>fxIReOgQK z?&49$!<0zQ=NIptSu~LZkp3~K(f@(={fxnTs`!BEo1w6D5%T@Zr86G)fFVZ|AhQ4p zSy)Ku)t9&rG|I}#ES~n&6RC>6bp%oQb}x>!*?HWbWJ6e96NNILwXvLqT`Q}R=)_-nvNXU1Rl0bW#4SE2;T;Pd+f zM_T?D?KrNzE;yC;vV_b@qal9{QU3Jxpf&(9i6hWpT)*GRLYT|ck*Fy3lAJn6HS&!z zfgD`NYtKMnJPmW}qDry|Jfjl-_|wj-Z>MJ(O4fDaA>`vdhy3*Ce>^bSsCXbW5xyee z34H5}v0z0D+&nGToxq1}cjDM1&11MxkB;>ipaYY!#^Nm1qok7C4B^JN7ticHxI^H0 zV#?3{EtmFpZ3omFidG@oCC>_q!7L<8R$T)=S)V3(fq3F#RXmK z&U3m%=F)B(^wH?zrwh{z1=5iy?*1>7uWE*(f&S=AsKG5Zzh2Xq88VUx5eWoy-(e5R*r0hH@?dr_sSR=)*mMcQvm9lw?j+4HnM4 zI2sL4b4k#O@P*-~@q@;FnLh)bAktO}PNP&9@7WCWk1oRLYgL7+NY{PZoHBaCmjyh# zS!oWc2YJ&PL-S*6r^9=BMZeNgn7>D>zF!HMyic3fvm9;wZlMA_sO1sg88@U)0BoL7 zJR*YE||PNh}i6EH2d$-Fptgu23VitQcrzr835II1AK%YeAA*0y(%68gXVG zH%n)+kpNt*vcws+)OSC!lAz$ z>r16g)bl@p<4?|_9vRq2to9qf(Coo{6P3lvZnA$;5LcJz3-7i9mH5|;THAXZ$Z|fd;aV9*dxpPuR?`)~?3;IArR5Pt#D~LcP zT5Lm`yYV|)vj9fKLuDHggGW{Z(A%$m=AumG9i5-;ed)!;pha2=f1y7j zmFhOvc&mWt^Fwvv{~*brb)*{4jbDp4yrqz*{t+j--^P_hF`sz7QMXl={r{QKe* zhTI|3^$AZ}^&C5~fSjf#f`k&IWd%Sr;($EioKv@PA+muZRLlob=g&x~s-Ej0X|(9T za`P9a)`R0&ul?ntB950~t}pxv6(kg=c}nFyd&Q?v4TafA_THtC8e6Iy8HsEtXf?)| z$S-Cpd+$wKRlwzPHm{%)4CFJBHHqk}H>rk-kf3$xNl zv-#C7V+%CAu48(5<)r#aS_ioLv^p{h#sZ#CM_=U+WBl&Q{kDblIw$F-jRniKf7r9r zfEjf5a>FO_p2XLhzDOlpl==$K&|CJ4(qw5fVId`YK@Rr>fR2;siS8D}0TzOfo{YjK zV;QWYh%A8eFgIr5?7|v@kPmOvV8$;1srsk6VeyBOhfmd?%+R8KA9o^(WoiR$^A2jv zc^n4Mh-;_@gf}j2d;C`WA=}+#DpY~af`KfMWL=GTEFsqhMy_=S0y_n_&te=^LKBbIS!c!HnuXp=uPT?99c#>DTEk(5+a}}wT4mo2|a|$ zLPt?c_+5sDPObdQ#BgDpINAU-!B==OMpW?=Pcn{6_8_}f_U zUqo#A?%~57D?oKqIhLN{Xqq#2OplJh(dxYZ?{@^MgBnsjX+dtGogy0sKf}hLy7r=jS zguCHi5l4ABMV4Xl<)#1hRLkTC*?R_h#5_;LL~$+sT_RUo#n3)nS3~g> z*;k~Ad?u$N2YWsWyw5pd7W%LE;~eTO43Umcy7?mf9CBi*g|BNL^UQG-#xrDEb!m$u z_X4AGn=xT9Osn8H`jZzyz6G$JJF}~X=oy2Y>#B?d-e%?7y?`imaWQR*3-BWYb~tW_ zt&hEHdkY;eqff$ZF}9=1Dk|c4aEnGAmL6T>W8>#n=Sc1e&{W96^*;xxYH26aW7RF89-L4?e~UHQYBB&DQogSsC_#{o2FCxVJg?%{!Gn-Jjgb`D8Jm?-Mgcgl^-c08%MG?5clZMU4nf>eaR%# z`wUds@&aNrz#HbTOyFG$IqHG{<_BjmuoJozRbLlqV?h@y(^->R7b{}e`zNV?>R*vPK%pfL zMV(A8r)qwh`m`ZL!TEBqC4gr|N64O&gjvWvSJ+XGdojo1h578Js5aYpJf2Vz)Sg$F z)&rxMvgPa{PlYx?EW5fAF035_E_#i_Ny73)o!z-Q!O2IY`~I?vok`;A5XfGmG}hPe z{q_7*J&j_ipbv^4Fb4sKsDhTyJEO0j-vGQ-4$C?9!LoUId7};lXI}76#?A%0_Cn}D zC#4uIa&XeAkwIqX-E*pk_Mh}468bLF&*}xs5*g((dS(_%j#&7o$C(n2p2_O8UxXDC z($FOlBM106IFf@0M@I?b1mc+?5Z5M#qQtJXJ;%GYqxLDXhI(~Jb7e>)EiD0B-JwEP z*1|Ktaz-zm>N@bWB?-OfcVy_@5-fX9<=Hxs?9jbALs+f`HUClGB^U;J=!WU*M+hsU z8>khyGwEb=j@Qwaz4XqUMnM{8G<3xKJT*0IxcMzo(lALnIy&DeK;W&>3h3#=ntC!_XCw4=-cNCfrRuQkeFMZwd=A~YZ=@4U4L_f;>rXGr z4^K8eRYDy{D#b1ZwR#7GTC~IY2>Av{U4c6^ge!*&B|+H?PJ3DFaBhBQE!#!ky4bLd zyzCa&y_uG55-HyGs-2ERWzv$KV)4VihKyZ(-`jBhm*TS(btu_pE#(}@nLff;?uxaV z9A{}iDjUwicRi8fOArU^<7vH@>;0oCW0iAqlJz@5wGci&R|^XJCGbU3VxG}_$vbpy z*)GU}Jtn#&<1+luUj^OL$?VMX1<8(4A?kKJTZfJ1sXTtt@M7z&`k|8rw*h@;QSMtMd%a|wp+iQ_2FpLM+$*uxw#v|mTjP1 zYiWuUS!`RK*s5f-lDSTh-<#W`k`P=9c=F1NXPo#UoSeIW`!_o)i+`hmQZhZ-Xjk_a zlFf0~P#^QGaTO{Iwllb9Gt|ltbb7VfSvvR@8Zpr(sh6w^ zyB@BN?Nj@y#gcF<4e4c?AN5r#rar5XaatYrlR6%`hWu3cg_#iv&xUiUF~a4=ocD&u zj(A92_I%f`^+-;;em~~h>x`6LtjBC~nK?8&?5fY|X7}tFB5gTZuRLCNrFi5pv9ac| z(Vp$RKI*E@S&f`q(QpPIArRT>-w!GsmLo3ixMXEX-Z86m-g8Cnnj!l-dj@*eB84^@ zrt4pA(UWQ-)5%02`42T|(2mEcUAL2#kWz2TB5Ty)}rFp^W=P@o)E$^BuH_bXtoG zxxKxe?XsONmfGet%bFT|K$h`2F|GKi;Rf2o&W??C%lbwBZ?L0-UBz7+B(k7S-4XD@ zb8vG0rbn~%e_>}d$xs8GmPvVy7jTk-^NraX3}59A$}+3i z>)o(ii*m>@)Q7Fi z8ROw|%@syR1jZaTK0>}XxKnw5bEq%R44qNN1~RnQX*kkg?_DK@Z!XnV7Pd0Cwtvxk z50gp#h%;qQx~>Ge2kuZ{p0&=#`n9nQ@3HWsl|4WsO*dBNxX}TNCXRPB-=Fi7a9O6C zbD5eP6t^6(O=jJ_s>4izf1-=Wsc>#YqRs#s;uE$vC3=^gJa|lGWEvkI?%U|58AC;c z1!GuLc=!udjiOmlyJ-g4zJU?9zrWw#uQbwIS_Ei}(pB(~MVp(O>!f!mhfz?SI&G>% zNxW#kiFywily0Y7yHacN!skp8>yI{orYCyhr+)e{vZ6?#YAYnAwLhvZ98EVfKQ(Bm zRiPq3G`CLWR+EbB%aw~_sb8l^_om}D=muXa&Q-9%d3fMPxL)>lla$gV`%z}}F5AtM zefquXw--@$Best_65#xYwo+;bMNDc3Uy}}(WnFr;*9lfhkPY=$kHh8^H9lAD&DQpi z)_`T4+;0*~y|#j^Eu-e&Z;5bK$lqLJbRCNFEb`Au=C|!b+UYGUjg@aWPL7*+nLl(m z?*D?kXCmpMJzJ!RsVHvqFm3M0j{_?s)Z#Xy~M-+v@D~or| zUk;|^?y&kTZqzQO$#ppxr0fB&-T>h1YI9z-1XP=uQO(oSiL!>eNyphc8JU>_g|`x+ z%CzkK{1u>Ms<5!P5L&W2{|jma+fx;a`#cG)M1D>-ashrTYRD!?_Xv{@Psq^Gkxud1 z71=l^r?E?!TSHB4$W}U1NaenBQg^wW^s>~5I#0vQVG&~HBMZs2!ZD?gu@B`5G zH+bPu(P71iw4@J7F<5Zq)&^xC=h#!R5$<(D)5c*%o`Cn0)i*IUj(TTY*~55j_12}Q zAWKt@@Z-8=$iWdQaz^bP-(wy~Xmo{Zo4%obV(|WYbzW3$t?T#BoB{^UrseMyc-B`w zI5--Qb){q-4Ix*y^yw+%g9jn|{K#vWwyKwd`7RUKe6E^U7Y3)lRd;NU8e(Th?i!yG zrgJB}euwXem&=EHk3X$H(QM93FP_Yi7D_o;~p1d(+G|-6%e$bspYUbQY;%vT;nKD8R+cu^~n+ ze07xlxFdKw79#VR+WNcD&dT1ha;lVz=Gxqj-|hFC!9Z=>nM_E}=B{O#sFB{c9VuMu zkL{i)MIjyD{t{6@sybj-uFB@LrPOx0#cz#geW%k>e2*yU>0o5>-OY;9fP4o!>*iy{ zhw0ABepT(4NWiPxn2xgZmLRfX;J5777#l@&e1YhiUxhncF5HxjaWWp$F#OyoXc0#i zLo&3x#TVpPS+*fi@?gNue4j9I_J#i~gWsJt=nE9et=OZ1`=Et>piweCNcRTlwj3E8 zbU3o!6-KphRB6gxtvFa+ES*J~4eeZW{ruh9=6BLnXWA=8fD)IcaZwmq>!&<4F~tf znIPZl3!>gw?GdgWgk6(#eL}kpZU?`^cy^yWbyFh0MU%$fJPav7TfphumwnrjYL>O! zXfgr0;9Qv=Oe`(|u|62903W+YutWUt>jO2XSc zY!gf6Tlfm+-7+d#c|h=Kh)nTeRo06)&_i@7lD!m&Wt>Idk} zW2*7Ub;@1i_V|l}&dQy3OBOfB11}!wby}h^Xrvm`-cF`1QWIJKGP70plDp3Vi zI^gT3jF8}8ufelsus`if`zI%cj2Rmy_B>}{SJ6E4-0Rv90sXH+*m*GuD}zuHR_GU?AJexVwlq(QKr7Ok7Z4{V0O_!t4R}vd7-0tt$n_4R@pz<>2*_F$N8}Pkm zeSqCso2TDa0j$zh4PMa{Qs=FXgSE=amrSWrq1(v@fS22O{5}m$is{U=iPDweK)t$lmrBdN zL6Lchj>as4EGggbNmu)}N!yBiEfg**=Jy)pIdiY|+SqVIZX!{2Y5T+r00GklbyFih zsdm{V4!HxdA zerATEXuH*~*2V`lPRH^&Qc+P6rw2K{JHxr%}rLu{H z=zbO}=4yL-ndB(wQ~Aeb^)?ZHMU#tibEzR5*3~bUt9OJ(s75J1ZK7Eug?xw!vcFQB zY0bUnqEVw$l|w8c{~GyQyJdePs)>tnf1{lKe^EkzZq>`{AMenFbv<{kQ+n^GW;#fv z@yvS3&)u3r*mzKS1R>UGqLpjvJT+tp+mOcWCLY3SBBpJ-BFi7ecoFy7caPyrpp>xuf|Eo>uxK#SAD|h=BH-H=ZsLg!lmF&6zWGZ_1mJ( z3%Q}rm~QnG{%BVI?4ra`qn31f$s!DIx~MYpw}#&2^rcj>;#v25zT*o9x}5k@^6tYD z)i*=M1vZibE754WzmJhN%(Nad-2FtVV9_CMCxe|)9JZmlV?34ou~&pKBR;cmd+WV$ zhLBqs+(sQ^*%*aZY&2w;lYU~$V$P@0?X8rVzH4~IEf5Yc2LKy!POQ0f zVsd`rvMxV`iNP$m$p-X&aXF)yN?td-&vuKkdNxLzR1}CeY}Y=>F1kWRBMy7Evj1E) zl%(BWV3yY9BNU^>Xl%l3f`k`aMN2 zc6KcvZiF&I!)uRCx5}~8c5CYbE?Ru^3_n92r}JFZMLeCV{NH3}KME>7&6-1&?+Od*of@PVq9V43*nL9{LLmi?LH(d7rQ1;#N zRJZ^Ck&sc+GNbH0%ATdd5i%mXvd1|%I5w$}jEsY9;SjQ&!?8*B$ljyuoxS;8bbr2| z`~LK~ANS|iUmlLf>3U!9*Y%pu=kvjAFzb%CF&~_Ol>;fR9@z z3t#L5{n=E~lg3fi1+qkGXM))Ksec;<|L=pvJ6=IG?+d0ZrXS+Y-Ny~3E^@KV*o=b- z*ad5%)PHXe9b_pR5&Hr;IIhd5i5N-(2Uku+Afo|CV$ z{DV45yF_eytTts`$6iZOK%Ha>as=E8VRJ21mXoPS@KCuu(B+FW6b&&7Qi?N z)nc24MiO4MC|qj|=VzG|94##!NMvrXJ%uv7V3qcQlPD9({PTbVhQLY36b2xr-gxfV z!dwO9UgdW?V%|N^rk3t#n}TroU_wn&VQLdP3hyZfL-nYNF7!ov51&J+%TAT$D_Esr zk&X(~uaUa0msj+rXH~0dABjr$xF)Bm_s=LSr^Q{z71OCIRaKqxXPQ3Wq>2}dVMh0| z*$t}%4I}X3L6hI2YA4@{WS}n{o66xQ)!sc_e$v%MX%TH@mw!`C{=4x27c{Gpm|H$4 zj7h(&ZGK$A*_HJS_C!Zl{xM8*iqrU8mS{Tl%i5c!pBqayvqpnvZBgB4{5!QtKPPXh zHkp`ZLTS+U9FlwqXrv(i=kpO34Wq_E8sx}kkyhF`sv^9~gYy@6aFz@01{uicaE92j zu4Y?813nn8<=$_x<_|AETyv24*)Y>YnX-&8}{ z|Lgnzt;h6=C!Ba#PY_nwvs+!5)L#Bj?YWvQpNak>Ups|Bra3{Io93!3 zs*p`?=c1*T4CeIS*yP^jm*r0sR!wj*baJ% zWDtzG9};YlVf^*zUK#takdGI{*R+_in)pT85r*cwk{xERmfyTx47Cp+)W{XbfH@vA7I5E;SvP?$|Gs>m# z9QJcfE8UAa$)*cqFA-?D34b2uvu{4P!IbcmK4DbJHB|yPkNi{XnTW;p4`W6~RiUh7 zU9NJ$T^sS$$YVn3md#g>-U*(rmG3$*l4+K=-~ZV;3dKpIrA2xW)2dH7mw@;i5i*ee zuo$YnsWxPncD~7vHY8D(x?C%>!$Ra}HTHp6Bu5s-AcSI0qu`UC)QbRf=;y2114`)# zcgAKkHut6|<6RLvs#22Vm&0!-w?gF~VMDfd2ZWVVw%SB~mcGc+-=qwE>N{M&+rlq+ zY6&laB@nzxqWr%O_1{J#=>$CZ)O{m)*)6G*Lh~n2IivDbD=1SE+{}9_qjWAt+HsVm zbbp2#qSW(s6U7(LH-(R@+TChEhO35BP|XZh?=Ffs#!gYy(}#6xr?v3OiU9ut%{LFO z?ndV|G40$1g6v{z*Sx-ye=1j7IYheeEiExW?1+?&0jb)&-& z!Zy&Hrqv?!WFGhOT~j@-um0BJrYH>_n??t0#kaVMMT(`}3@#dyj)LPSWJxlJyY%t6 z{!=qDjE8+3yMaq1Jt}SYmS1gGJsh0xA!Tf6WH+tLafw>(F_rt_>VJWsZSXX<*BXE% zWha5*;XlXyVO?A>pJTkM)fvKMi|t@_l7e%}>%tb(5P?QF9itP6{rg7-RW@C;>ge2n z(&7!HggjasIzg?I(GfYb<=DCq%=?yx0X4VH_}C?7JUdT8hboV^C#Bm-?@w` zAAMP%G z7>(w7tk12BKr*280^!>N4^uBC5f$|c{QZn5+% z*jZjHWsxGq{imP9k8re%zzie+X$N<`fLGWwq*UM$kAywBJ?ppzOZnP1d zMnCEI){Erng?Wk4lZfOqW!NZu8j=pcLD<@U&hbAS;mULD=bNVNjgAeeo4O%lL3)Mj z4qT|Pm*<*#NCv}8l;%gdr%WuGC+0C2mlzB)QZ+Ad*Gj<3`Vbg)a%`c~#^O>wd?+ftOB4Husr8CZHa=@u%7P-#H($KxvdTHa2J&Q=by00uk_`(LLJ>Q)X-Qb*aQE=RVpJVezud?!>vk6>HI1`k~k(W z^%Y67Ikg|T^*#=)gooo21(8>i%(+!U#tXMJuy(z*h0Tuj(iOx;yl4Y`zKht4w;oZS zdYm2N$B8t@cD00m!essyeNK(ZD@K7{2Obu{bOp22k_G<;H#9fNo<-d1X!r=0t8%*B zP4Yg1BIh5*mkn8P zhvei;zU;+|#22}bM%W0-O-L4j{2P7}#tVC^FG9^Y%uTG)3M&MzyX9cGzI=uEIapFI z&y?jos?4UezC@w#1$hNmq_@r2?X6VNWgWy)v}N*-M~lszv74fEi^RaNuP=m1i#C?$93sbS<274 z%)~!do~j9{i&lkjO(&HxCf~{!HnmueEid-Mqs%(Z=;!$-2n7C}z6V_b>3e-Fg!!NG zo{MBS>0A+JlNdFNs~*EDUhqt%`5^s9@@zKYOv`T@(81`(kj4r{>RLBrCW1n7|8be{ znriQ1@A1-&EaPHI=jZ($z0tlm9&tt11`18T?ZZ5$^!j)$nB52)=W^L^X#@?x68;M0 zrOSaDog2yJUQTiQoSajp)VC+RvyWe|QnJLHMpH!mOZ0kbZNPto))(BlV7@w^nWJCn zQT~)O=>7XKpfm|ueWb$E-rn9otnLH?gVk-bjRjpUa8E|U=aHhAHp~6zzYp;6S?TZQ z;#@|eg0z}KEbC)AN^Bd*15e-5IPR1dN}c(;2?F0!p7yD@g2U^UBy$_{AzD%>QvgzZ zE|3{f1RZO~4>#%pqW{flqojHfa&w>XIbVk~ef{RH!BC|svt1QLSgZRieSFkIZN*(O zh3f1g>|KunY==Byh19B+rf0C9ll$6|ZjGGlf@}HX)+0}4ld|Cm&U&SC z=xHEa;{w1Mtf<0Xw5vmxGgON6Pu#0tbz9Y$b2RmBk-fu%FC@r~C{*i*Q>3wz*DN7Z zwnHATx*cIwtqM<~K8o!>DWy&_H^M9~4)zAFrtFX1@tK`sHRY2^Mk~dvu)&D=y^#Vc z!%aL>rav?iIX`}MK)=3g(tR2)N%=ku;t+h!%^C4F#`95l#wIi&!8jgRc0Dqs&sm5V z6bwFT^!&ZuCbqVGj<&~U-&%rTJ~#ITX&<%TX7o??lNh1%zVXW*%&yEXrlr;$YW=6< zmbSsEw*@#K>jBImw%r|ed~^t5(*n)S6&g|dSpXT@nw$5PI{3bjQ|STJWyOznCg$wJ zocv&-+alb*Ebq@2m)MTGyR)7k4I`mN;4Uy1Y+M{ot ztDV%iSsI%_TY@`vnnW-)S0~&x(H>$pRLr&>0pPbARIa&*!>UM>F3){4Tb>`I^?`tIv&o^i8 zku(B0U`VXJ=xH~>>}}yKmv) z;azFU;NS6L`;k@Gyb(%$w#_}L`Oh?lU;8jy`O@g70yjK3S;qvz*28{RD=B1X%g{`L z0|f3M!y=0^WCFBh#j2+mR(=Ho34c10`k^wbWpG|tQj6{CgpJy^y3Z$p91WQg`D~T) z`@*%)EC{}_%a&nCn+ZvBs_re9x$Z-YFMZu&F5n!yPI@+it-VDa)r!nH~`DrM`gWUo^AKQkA?-4u%&P*giAM6T>`!j5r5Ph*` zJyoXe=yz>d{}p4YiH=Jlmi?bEhQxoH%u%_wY_OS6R7u_0pQ>P_omf=6ZU?D z+(@GH&Rwl{0%EN85scGI5lrzTj3XxGFg?8lwc89Le&pqBPhQ3$K5(b`)47-Z^cIfBUEm{iUUP{RJ$fJ;esxl!@gq7W$lHj8e>_J zJSxvjv9w_Y)Qe*4vs-kJhG8AwFu+DfZ|Gl z&+f+jl&J2#J(nejHCCM+%ya;@u?n*UU}iG_BZt-H4r?5?t)~T`st#?1W}7%y+2{YJ zy8o-w`r;P-g9zH|*CL0@CI^A?qs8#uk9H!K1Fd?9Fl04&)9(wIMaK_spxV#!4OKq-pic?T^!hC1{NtOGu>M?P{ zQqijX`K-W8hMFF(?kF2$i%HB*OI}Z$S}Oh3FYeS!Zp&q=>}nn_QnnIT%O3Ov1)oaM zcs;*Pf7iLcoqpo4KHWz?QJq~&Bg_Y#jBdRB{98ZY3x{a3=|O~v$aRqh-V`L3Ppp?qK!e@sqg^JW zi8V<$Vf$n6tn@YgFBIwn>@Hn~t6HBlDqD97=Z;gGoH<{(2&sOP z>5{XQ(evc-kPmR&npHCpd9BMZNq6pt+mxW~Gs$C_r8fOE&bd%1xTGznLT@a(ATBhe zvQHp5c>mL~i9_7_wO{qkw)IHj|Mdy~XfsQX;nAe+(hc4w*~Zb%=`Mze>*(k}(t-Tz zm_wi5$%u;F?~N)L`0oz^>E?j~(=n%sz>6L~UqjMu;`(kZglp=jyO%OV0?2MFtw_%I z=qskrb7zP>4+uEOe3R|2l5BB~OFi`rI=Rb*9uzj=c*eJ{+Ej&x3_nez5%hCL_t>J! zp1%98jW$Q?vp+`FWj~2=%Fda7S;F)(t|GMVQ?C!Qo>G*1^L$p))3a?#l4n%TB_c#9 ztXs0OadU8p2}#f|yXl(4Za7?SWMtMPii{*GaLkll5G0*nf_#6M9E;@3c5t^bYNF}W zRydo*?n#}SHnD+iBw=jBriG#GPSg70^WC18>Y#4_2~2s$a-NagZ)s_%jxrp=B=qf* zuJds56Qaoax;iktI-e709t}iAKNxEP5rFJP^6d4xFaOOGaD20Up7%Y1Utu|42wtD( zk5J;EE#t;SCoWEN3st;Bz>_d*;M2$ z-mAUJAEt|DPPT+H2I`UL4b#mu$uPI_PfSsUqO+(m6Gz+5`llX{@IE(LB+C_s1d3l^ zx_=KLY9G^wH3H2xB!sEirTt>cfK~6|l9K3%eM_T}Dx1T270!9>twF}H#?{r;o*u|& zmEyMYQKafcsRNs(A=)yx^_DwrEFlHF{ROY3j$U7V`=tX*gztK7Z^iTW0qSjayxK3* zAj<*+F9obkaC{cr3y#@{?`&!94BZzl95|>Hyt9PS{xKka*Evu3Fd{ECdYRhDxGs8_ z70f2Nm+2&^Qru|mnxd|pn`?~>hr5Dj_yIA*4BZm?gQu0fkHl5-mv{KYW;DmA{o#0dU7C{(QH*(#z$R679Mg_%%!KGvgI`$*rAk>hGwnW{X`;46t9lOTe8I&PlX-@<8BkGbvOngq zod|dl19X)vMaDfwt{z(RcZ`0cVriy2JtZ-^pa6?GI9s*xmo<7-5YdP`J!W$NnAX8$ z(IC6c`5tw40f8RzR}J}}-S@Zjz#SawF6{=SrLrC=fTo6cxy~T zUy2I`f56}7FS4r5-tht8{HWF}V&sUEl6*U98j_o31(I)4d}FUNGCuo6;7tc6JtE7F4Kx-KJZj ztOQ+wLcbFZMPH7Al*4@Y;9#_4E|}nZT3RjuRPiVks@pQBT!TG)xnzM`i!yh8@W#{M zRLQ(3h}13o14G6Q3z}@3$;&xi`RT*N?IZI_A#7|`dW)JCCKEtrA*2H$ zqW5-WL@NgNIB(W_;pSlZsS|m2QgPR8a`I(2?`p}4e0TY|wbt&v8GTMSSlM;y37L&- z^i485FAMx!owvg~RA>YTYPw*CN{G}#(V?o#u?IYX|afu#P|m zqhBMa$HY%%BwXwCz`QcAYOdJyvqb#|b^0^FLlftcAYydXnA*dR?Mg5=~xcqQQC z|23+DuC4Dyx})wi$xV>{8~g}H_ZE#HhQI{~5fGF(p_Wow*NI((fxT$r$T^r~k;1y| z=BqaG27s+_+eoHUWF*%wppSD6)cTK94GeCah}3J|i)C!=3C_hZ}DXP*)nh z>W_dG6wiiHCS<%B-Ztcw*{(LMIz1^Ppg%TTe)B(-pX`}!iVw7PbU3d0CnqPPQH`A) z;Nh{kxi$cw-@9cQJuNG_7UE0i;RJ=Y+Q#PPKwFR zB6TAdF0e!rM>gq6^tPHsmIT>lOSl*YIW1{KfW{QgdC5pq@#wZ&#)?Q{q$zC3;j{T` zk8BWdK$NMGqb_k)={0*%q-t@~vEpK~c7xu}_JByxkX`UkzX+o_)lH*k_nIE_R@qeg zP4S_SoPv(d8f|W5Gzs*e6^o)%MS!n#PQsKc&!AiXt8j&|7ss@EFTK@fUu1e& zmP~6NART)S5S&0&2=E)QUCkdHkwzkB&f|9JZU#s?LoO;EyL88`WM52Rnb%eEQ(%gj~@W=^nhT`nABr8l74CB1ope#`g9x9&XXfEg5@aq3H zU-C)?;~632=l{dyMpb9<@=;e&>PcafhB@xpWjQ3GI`;c>!hQo3Dxg)04vQp%91~#& zx3VHKy|eNf$YBC<*6zl=8k*=b5LUm2jh3|$j*`zicMZ)}+X+biV0m?D|^24_--8v^wL$17%3CjzfP@ zbs^Q6h0{Cc0!vMalQuYYm!f;;I2VzB9xCZ$Unini{ zaIG(c)HX*tn1jhYz~W?93`Sz(w@LY*VL7&L7M`G|cG91pIrZL$*JtO)h7akuWq+$^ ze;<(bSL1#s@@HbhV(zF#pp0${M?O({+y*Uu(23?@V^D~>jOLKx)KqZrWxDJ9kS#pF zBo4hn=8Fg9RgW4|ag;L|LlKu>mVB^t?(&13%_zrFcm-d2G7f!#HL-pq}ZfHo0y`&>|L*#=_ik`uzViXoMBQ}wa_;4oV(b#+V?n@k(0RX_g1D2B8i=w{WH*ixeB0QxnI$sB7We_yV!ADp zF-aOpOj^3aWq*HDwz-T>kYVKFy`SY~ejp%#gx}C|^qWSf&BBVi{)lh% zzWoiiF!93Ryg{UzY-r6WLOr~?Fmnl!a8tha2W2Scb`s7>C;-sa`#)dTert`w`E3gE zdvK^#qu0>}RPt(DS%%M9Ds9(Blti=OTZqPR$89i`S}9~M6Byx?dy%c)gy>Sv+0MFe z{qW9$J@%dwq}){ko^ZtRJ=Fv+Enk~-?plto>w|r4D4!f&vF`ov55MXY)|jn#3Fp_9p|ucTNl)W0;Q!~e;rI0pcjJctG%P5< zGcLjum-#PpUusbOJP?w)_=AbBxxzmjZ;CKOd!)Ms?(n%g(BTe7QYa!{gc7>#8zlc~ z?cTB*HrSRupK{9di^FD@?$ZLr6UVQh;xR%{oP5J9K>9NtJ7v}BlvoXGhwoIFycaCf z;M(wwl)2&MFRlRq(gFgA^9+*m)Fb^?!~A*4U)br<;d;z~iJqxX1D7RJToB7VXBtN9 z(34@Cp}R0pqF*s3=|GwcQmnSt2($gPa)4Pt)OW zY&#Q)U{b7%bbLVhNVMu1n{3Yqfx_2q)0i{rm2b|Kj{lUkj+x005ZU!^$U{3*p#) zZR8jo5TdkXbe-~bk+r~G=Ng@^)>qvrkPbVc!wnY$Hs%QOlI8bI1reR)%dW(IuUl9% z9+~Bo2@j_ub^GZXQ)v}7*!K&j{6C$hY~tr4nsC0{g;wicbD2l5d+TLXgzjHe-=>EM(j&n_@ z;B!qH*iwjpxAB-WHLw&9jnfF(iNIs%D#Ez-x zj@DjC=v0u8KHK9_#Muv1=npX}0Cuf%E%bu;bb%-~;<)ld>C^a4_2z4F)}LBRcxP?8 z;7@F4zF6nWmK>x9vsW?4xNABfi5G^tTm_p5gmo&2Mhm=z2uVIxotoiEvU>K35a~fL z`^T@UW&_|4>u1s_>4~9iWwfRySJ|9j9;0@*Si?6nmeod36D)y9n=R&9C znjoBAErQyWrZE#lsfb+1jrlv*1)XNlV8XVY#Du$gWwtQLfV=U=xs$R*hM=->!@eqf z$Z1?mUzyyBkWaM{{epe@FomW;aDRX(Qj_z!V?) zp4v7YcD=FmP$Zo^iEYzDg;pj1UL-y;5mdti$q2LZ{kL3_aQAVsp# z%VzbMzy-;2=up?0lj>yY7PD9F-9*vDieOi(_xJn_0TjjM5Ab`)iJxicYD)QE{7gfH z22vGd`NlcG(mR$|jKB=fPYZ$yR|Sz2E^n)zsETBkknJ%oJOpLQPk^A2&8fA!zr1Fx=EI@)QFud}wZqmtUl5erLR*KvSD-P(}^6=t3h8Iu8L(OxOA502Qx!Y3+T~yv^{XW7SW7*vnI{> zTE_*SUvOZU$w?VCUC=)K&t(+Fc{%4ifTtDxY=KyWc({((TB)(1JL3>PrnxPP#6>lA zRUiOe4+`hnev|{UQU~zJs7e8}O{4h6i#O$?Usc-R9vUZD)?|r@`}`Lfht)3(s$lhl zv6?lxc5%i*5N@l<*KBD%rBj<=!NJvC_+B4~0fWqe>a2KGOv{VW@{0`;H-#5Zdx{@v zoM=t}b222;Y3;#Qtwl=-zfcNB_loi{xf;76g!G=9!OTeIO>7jF&UxqtEq zzW$cs)hS%tx5<_iK*#RQM8Ee^tC?%65Z)dqJ+|gN1Hk$1d?auRJHLJ9P3^jDybjHB zbEfL3-UrePN(#SX>i-8mH32WS9-e6)7l*o!VvSJH<*uDl9n@zW(ICzl0TbD}`yC-Qv-_TQTYJ()lKD8SZ!3 z{T@?%QDTAj_tRr=nq`PXNMuCkEO_${Uc4jo%|1Pddu#yZB83*Y_KyzyrL=;Vt~o06 zry;|WY<7e~7bh*I30szogeZJZzYoXI*ncAJ>2ASM??BU93lQAdb2DI@(OY!gj7g3K zj=NXXIH)MjLzZ;1phLy>d9iN)cydPInTr+Ixh}npk=}fGr=z24vUjk9X+Y&zGBES( z@?u+5#GS)WbVFb?<3Q1+-=q6iu@Z72K<3d9 z|8SC#d=SZqJgTB#HUgq~kF~XpeezX68P&Q7b&74m&>R0z5`MXKT3zl9*WN#9Wc7tX z#Sd#b8GJCObV1@<{${5w9H7QRt+`q;5 z@$xS#W_>(;`|pa0KeY?JC@reOj&J1%<;uo<;bg(#Nri5e z1#jGaCZQP-1Bxz|N!p)`ytgFoV&OMjgWqH!Lo*goRbkr5{N_=TI_@gQW?ODS2+LoT6klmsR_hD~WcNY1hZ44bzxb0~J(t?ej zT|=njPI!fam}!7nNKn(^?i-R{(wnRgf1@eyO4{kHOpuHW%>*40sj4zE0Q&s~Y7FUJ zZK;`xQ_hbd3%Zw*v@bMR@S0VYmWR&4K1_V5=mPoktX68YUmnuMc)H>X7>Ko=4r zU+Z*`|4kq1Po+|#FYW;RRlae+8!?~zJPOc=Zc5+Tw9rIdUA952uKCv!6TY`GQR)9N z>rF^g_;B)0(c*D0ppFSq^uLq5i;Wc$pL*i44Yg1unYVid7jUYWC^J1N@*I%`s>S3zT7(iGnr<_G^``LPd*Che zYZBys4e%)1$A2AzzZ;SKdXhvx>5fK`ASk7LmZ(DF#$Ns-As1&$v4yDymzY;PavSjM zLeT^XP3})i@^RU!kbL$j)@t9rg@~B1sH8ZB=qP=pacKd!uM6Z*H)rO@CXdQzxS6%F zI&pYQ$MB=73$CIR0L(q7K;e9PEQ-(f1G2<|Pw&G{nk9QH0MwarNfSeK>E8%Af4z(Q zY!L6`%9v_7=j|8c)Y?L3i>K85{~r=-t=_X{Elo(2sF537PX)dMQb=!m0NuK|f`5LS z716ig%x1F&^K3IcG0HBr?7FCG#;$E^`JY@%%M{u1YxNguQ{1GP6=b~iVaM= zH&WL%wRkY~!JSVaj`@#fGZ>1kn*>kk13;Y~>>3spvc9`yLdRo=_m@aF)?9QbG` z{)<3xryDu)%Uqu3BfQDz@EJ-`+R$O`z9q}J<$lF|82)fF-jt0?cy;Zfe|n7Cmx@!T z_!>|UopX<9{&ZLN-yMmntDmm0#-x9vL8mu{GEir8G~3kM7*9BW^IYP+Q18i;e%9ag z75sgTPx-4A!h(B;A>m+-061oh0Z2e*4wSh=!G{1Gvn$#CO6g0>pvum+$%W2zN=uew zJ0VqDcVy^&a7XTAn>W!F?&yT|3=&~=ewWRgz76mxW8UwuiPeJ_^E2s_Pfr)#agt1C zv6TOFbByrKC02H!yV%T{7fZ}^&6${|*b?s9V}-r7DS!`Jv5@C*c*aMZv6#xu`_{TC z_AzAh_FZRgSBx%&1f`MF%|WxQuIV?)u~Rium{OhyWyh6_(Q=NrfEqpX3g7k`n1;}1 zjB1iM6+QVl{&@=;6po{_e3;dx$)qSH)ioECHQ21kbD90NepB?swWTqO)X%42!MBxQ zl(Q-&8}O&APXA`(`*#7?52W~%JpS)qEd4Zu3!?m z7J@R_qvIaepj2LI%17;GC7f@9e;#dZ@b|s|XOARao?D)KHpvd?gyRJ9CZHN!d&n5x zO1-st)Y7KX_Tnf>Jd^Cl+i>3}xAwS!J|Ylcus10ammx1QJ0{CmJS7~EUG|DUI2U%K z6$*nb19gtL_;?Qh%UHM&(rRMh^xeB89FjgaHwSL0Z_x1sn2dpegd=;?=;?-rhRMmv zk21cgsi|cqzfapazL5Bd2zXYKBZg?K7rpEPcRq_9Gdie7F%i|SCVV7l10+N-5MaMPGX)io2|tG z07HotbIdkxc9YCOp6FdJmv4`zl3Hj={vqipfPord;Zr(ed%Z)}l@byX?i;fmgAu<2 zx_&niyeoujrFse3m{Vpo1oYD!dy;)uQKjW2IE!US1dBH<{&XSh7jxd#8f z22_MJ!scgOz<3@y!do~czx89*-13&Dwq8^FMyB*Y>!%BP+1Kv_9vV||ccr_)aG~br z*xFnVWTt2&(+?EstYEgw=c#hTgiy!>JGvi{IDF_3m(NTz6yv`e#Y%)MEtzm`4+b9Y zQQ+{kwuE0TO|qYOqhUgeS%Ez@eU(R>K%>QD76^p`a>sXJrLH`AFF1S8>ewD1$;7vh zGAAHVRSN_HV?Ogc82EPwVa7o==~xQnEMLKE7I*q8^b@q79Nn-MT5Z(F&r)R%n|;2R z-B*dH?@~Z9UITb{V(ghk1xk_oD?^`4TP~BrMN_Ew8v^!tLHJG&3o-;sws-MCx&DJW z_w+EFw0&>-M^E;S%-~JIDtIPu5}eOnS+iHS=KpRz0hjSN;?-;O9yzUx5ihIA7+Iw@ zzR9e39`A$8+;usx>G&yl!A0X>Jyo8EwQu&FlAuFJt^MzQf0chqdQbD>ZxH&16@<=G zCNdP)SV6PX-(4G3s=o9uEC6O?QdsYBt&gAGP%cX1Q3+t{9p4Rg98wYq#UGh@iBI_u z9orYUyZA+cxu+|`lI@X|>y1*7ZZ(ASs-aYG>S)VrP2f0wq{Lml^t7c^$QL&6KGjW&Yisn zDt3wOy@FObS964xtm?Zy#KS)TD{>T3Ae0Kp#lW7Up_j?gK_l5lxY*LPZ7xj$PQ%1m{Nd*x}0|$w@LJQMhH`Gu|bb*0HnfDJLS6=G}iK8QSJ=ssE+8$;MmPmsa5a?RxRon@JrsWP$9cpp*@RMTp#MY`K( zePs(a&qmPli|y3jUVaKjHg@)wu6D`Axg2>#Jzfz_ETSV1S}Zc-7kU-&gwHiOaF)?t z^IFb9rbO`-h8ILyr5Vk}Yd(B}A8SLWPPmT$8NyCM7lWcig9>z zgfS3M%O)WK{7V=Jow7R&<&`VzJj^$bA7MXKiTh}$_Iq6yMG zk9s?{g`fpmx-NEeG46zUN?H?;^np#y=>pSjUPu?d3Xht1V3Kx0yV(H(i4hhtl#tcL|*#kG5>fS52CzKf; z$k6q#+bII=@N)FVFi`cQ1In-U{l3u{w!z)5b(X%O>7W&{JTV8?EnMXWiQovAZUqQ6q{1Bv4$Rx zt^rjl@aGXB;+XBZM=zRyn3|2lL?Bp*HJ$71Sy!o3>e15F%$WAxG)=auhe|xGR=Qj}eakn|!~jtSBr}&G%M#$LQU=7|yCIgs!56JW?d^1ofG@IMT2sDO ziFm$=0$Q`ff{4$E@}gLttT?TMf@L0^W_f6OAl>MWr&RuNj#FG8SDD~3OP^pn(5-uM zJi9+H*f_MAwcB^C;&ZsI+n8TR?Q$wK8yb(z+r_9_bX$xj&gnaFsP%qOo&Pa-5$I%X zrLKG)Vz&mmVPK_?bi%-{2CoFwncTMI$+?!zjw)>oh-_=;uFM4)0iUXY9TS0GL!1;a zJIDDgu)aceoXT9p{KjzO#l>B$YpUd^u)5azUX5lptV~7noNNpRh?#-S7by_16Yf|W z%9;!M6{z0&y##WFB>Y$EZBu@3*9B5T(p^`eNA1bp zotr|BB2R8Fdyr} z7}M0ey_Y?tJ_U~nI%kS@wkgY&ZFc&+NG7>VpVKdn-X)ll`ZVEk`4_OG>T$|%_T8Y z?(Ve5QZih{}(Ziv!*h5+^b4rF2 z6+K5~aqYfoy7G+Sa&sG&Ps7-}s}?$XWBn*x2!`PSmyr0Zi7Oj-vIv4)3^T!rRx2&SI)^eVcBU*T76=t7#<&+uplr!S5Qfen##(-Y zkR;X+a!1@@Au=()>WcOa9NFuRyl3u`<1vP=$4DK-+Er|qjX8RlN)y(J5iIP>wxjAY z-_0*)@0mSp(RE0G9)ul*2yMC8cC=P*ZhfJQqIPvWt`2IIF`OWX@Ff%EIox3BbrWQm zj_UH)iKq zhv4EpLZR@=!^oA<=o`HH6~nt52}>@=Pk#h%f7#bKs=t`MHxlr{`o^KMa{Nwt_cPAu z{Q^g~BG_G%^J|`Cw#Rwdk!pNX&I-p1(_NIPFA@yUN;DL@Vk65wz4d@@r--^D+%}mu z%V77Q;=MA7$7HXR+xD8LP=}(xQN_`19zl2Rp0@Yl2c084+#HRZg@>Dw*5)fxq3_Z; zi&q^5X`AIbhl`FYp`QEWPn9hWmIM+G8iy)^FRd@mNgd9AOo*X4m>lG(%-XAGDM_z0 zSlRuqw>0r&W#*!!!Op_=Qk=HZ9-V>qs7U{Zci4}M%Le79t{D=mmA(`0$BhdY-!uEF zF}?;%v{{9cg7T z43WPoe3(3Q)ZAM#8nUI{GT5|zyhy8T#OPeU`z zbvDf5Al5u;JFLGwjoG3-I9#%(rdd!59MfD6lX4h3ZhAWapU$}f-8ruGJD7wTxVg4g zHoe^)9;I_HU$RWE9yY5MvpCKnezI=*=+R0%wfH7veT=z=Iw8}!{hh%is(?4M?Zc~C4&hNubDlecuYG^Cqh72TGF{|8#s+XTG>AZpP&wbx7|+<^ zjp`?r+ZExJg5a%GxXjKZNF1`HBVeC@UKf;fH5@3XC)~)6(2M z6w^M=b1g<$e!_|$=PTP<%vloN9M0SE#jh`+Zj%@p9J66M*L3?EdP{&&2EO^q@%og; zqSgLh#BEQJ&GDJ6Rs)io!+M)}JC7$qcKi*b4w@~mDT%gcx)!7J95v;alUy@A7pn$V z&|7o|H5JN6v3{;)mO95~Gw(V}Bf>{3&~yH!gOx{F$;ToSEzRIWoWJ=w%gyr+`N+^} zTyKSsGy7xMk|l*g(6G9Pr}6iuC9dP2kmj-QN$$4CgM;GwpRvzZ34H7K7TOQjFV}l! zrf&z{D^j1dNs@XJSBBl{VkyywE{+^lUT}juH^$95NAGVrk_z=*$tgFk7Aq2TUmYG# z_v&zZuJpjACAQGjXQw)INr+LoBHVYYlyg|)>|+%b4BY!{)D%~tMchs{I_r@^4&?_uGE$K$vK1?fmks?w zbgq?U-f?VPfEu{2w#=kPs8=|dl+im)gudShD5PC>JEE5L;F_qK1`ktTqTlxZDmZI7 z7aSzJhBc2*9+o@ao_--czR$&1EFy9=FKJ^rGWy6wxxR=_Y%P=0m#=bkt5Sy0@|t8U zHAjEfQC6Drp~`Usbx+u3Vo$Vjna>)uM`~2kX40t-lS8}bSfu_)lon(6)86$sr0G?- zBj@h-k)^Rk3gNvX0zd#6_wgf{@J+2RA_>|Yeu`KLP0}$i-(9nW9t&^I&T48O3BJko z=pX<)P0;4CQp)0yvvkbiqJ*MSxR90+wqmf?mF9|wUv@rRnU`{x8IYJ0vRIPp7wLbh zr>j{sE|F8{wrjKEZhc3@P2sCp^IE2X<>9=7VnTc1wN!9h7U|Cx z17EUb-L>x(Awe>6?d}V+o|2?W~SMu;^6qX*wa2=8sfT{n*xH;On zPYpRE#gh!KVmGYmgx64qQsK6os~y>q;LvGClxLL`!*tfimd$n{#&@T&Ur)?smutuC zK7ZcvqGP4wkL~sgk23NV8D-Tjx*c~a3vMln^sH+u7#s#pZKHDbR0p#TN&R>cc3-F8 z9T?qmVdBf@;tL=&&>Wz*)!ddBz_JwuOXEFpYR7~P!?sBGrDktS9A8` z%0>&-QV(`@`44+yx*LCnE}6gpJFK+1YAcZ(P_MI_EP<=E7<2h* zQ05&OwYwEMr81(m+2LjsXS@K}tJ{a>aT7fNwftryFi;7d!EuE&;cz~lmZ zGAG)V7FHtTay1(L+Dd}hJ$7sDzN5o7#1+CZfcPkGkOK1;U?)-Ll#o*?le zb>HZLXg|qAg%>G1oaKehY+K5;mZz*F#c88wfeFP;6hbdAI6IBM>)ZHz))%soP>fxL z2H>VA8r%(BOs5&%rhZ0eY}Wz1n&CFuH`X?TaJjPnW=Pb z%D7cJupQm7-ASJj%yb9tZQ53BNtC0CYB8oK#}4u+3K{)i@MfkpYe037+8b0$6`BEe`D~XE8QWn zxDLnkYG?S9@XBJi$akb671(rUICKxY3ystsSS^?VE?V%um8x7C*xr zGuhYuR+L+gHoK#+iE(};yeJ4}Qi++n{ghmttA49a_>2k;KGW2GHa2=o&qUe+2Qb$% z1cQVOZtlMliWBbIsgEd}lZG2Kz7lh7#{GH!1I~4gM6r8#PE~0Mjogm2(An^qt~{FT ztR1y=KZtaH&OY#*Up;K8&XC=0v$MX7-F23^XRnpD6^2PX3MmBU9nbgKcMHBe(7+I!TM=V@-jD+#gPd#?Ct} zDYtJ6vrpJJjFY&zZpPu7Q*k@;uWC+Vf!u91MPNad6$C?1#7O=(v@zKtn0r7a5y{FWH~ix zS!*X9%7%>(tMp_p(}{5CX7G~F+Q$Tas)9MjCl%sG3vL#(IrhqD?9^<9!M1C#^3kuC zS!Uyu{lqqtlqB2E_`|H-th!+prTXhWC{^JT0kSR$<3lgw)N%5%6&QC+=w`ADG!{jJ z3unf!hi=yqsUzmHE02e2^09;DOX_cbx9YH1S8yX5OGw9Ml%=33V>y9}Mr`S&y?%^` zW|!w(Q6xIB72{rMNw{`o5odvoNQQn)U_|Fp@|r*K#AC3PX(G+`<4yPO-3t#;d;FLpumKK-b3S?RIwyD! zj2QiUg!bRyt*Yh7wNl?6&RvfRnvoqH4D1HEI<1ydH}~9wK--%6e1$fLvtskWRFp)Q%*RK-ocx-s2dC^PlK9igQnbNQU(whEU&sv}1cGP~*ST2_Ij^0zfduCt9l6<%Z zgvwli4#P%PBFMC|V@LL>Uw;Tm>p2k;6JyX&#OD_8HflV-pQCFN>=)Hmra`OKf1zmE z1jdHbeIPM|@FJzSt4e;CnWlRv&TRRT@aD!GMC`)IS730gU-cOx1UaWpv3_73tQn3m z54;xaqh&sEGDNlh@yxx4UuU-bcsH4%5Vm{8+U7g2fCwmJTk-}L-nW*ZY+=ng!BQOFiopQUQsIj`;J!`wK9p#>ljx&87=B+wH{EjA2 zi~)n!HNgda28gJ9Z(l0*DF#BbllXP$+G>1KwA9#mpZVNxGlU%fO&k;dW3I5vZN6`n>zQJ_XzmzO54t2l+bPkwyO^pV(mM}6 zCh-*Uh&Ec~p%?qA*Fl(TX(ZZ#*qN+V)F+8K5QhSwQ5Zl8wqQ78n7Rn&oV?)3yZv6#ExU-8H0UR+5ddZ_UAJT@r7AbZA?2@sgl2_ z%d`Fc4_Auv?Csk51F=u;Ve zXKghA%8Dh+v}N4nThuxd?SL@02hi*`ctSKtS*b5CwfSC9t)IWeR1~-bfjz+m#!w6K zVpT{pIsAK)8vGbB!u9jeLfBR2$haGkIv3&B3|KMeGm$>^$#U3YHyZiNz$oqUCkbC+ z2#%c@>I;g0+WQGcouRXFG%cjlt>6?Xy_M`=W{HM|W?}@(%Cs*z^U~oOEgi1*^6}## zSYfk)(a6YVEcNZqX{Ys**+^#CdgjpT!(-*0S$Erqq$yYA;CAUwfs4^-;ga9}-r3X~ zIYLbVGq!AiGPPkfbFCy~=L~UAikP~h1@{#-aAQWhH~}w($l|9e=Fj@461ldZnU(@* zyR>(lUO9PdZS&*J?(h7lWic-P#<&+f zHWt~t*q6sc=8s4aaYpYfpvJ?z;f?Itetn$Uq$$g;o2ppK-q(8>)QCVcOc!#qG8w!Ez7F=PxWn#G=4QRz zoWTmJ3{l-t%ioTV9B=v1t*Ws*a5A9WaoU!_Yfo*pqFF4GI>v6;_KF~A{7%P@Ua~|{ zLt^aos$Wx^ShSXOT(&ojj0^(+PqcU2XhP+rpdp$Qx9Zp8X&|a`3Abj~zL4xv-@cP| zBP~6%X{f=EC4Z@hhp)2lrq#xr63({#4G(n8tywHAD9xzE-gKQZ0BSBgT)4DHk)flr zBXz%JHR~SUl^Iu<=k*<~C}7MFaCI?-Y2f04ug2u{hLW|ccuR6!zi!Scm|>?S6=H@; z$5R+mcm>ukDh*>4rT6-B(`vCh3;`M1aW!!@+(D*OmJ45<)-~z~+9u8}c4PMM67Gubs{d%Qaod0iB&A<(VT!t4|*>GVZ7Mi-Is4#u3R?T15Xos zXPuBV>?S;jOT`W;rLIO%nw915Rr#SELk_!>-WHSGR(B&@_%99)%Yh-pUW-Tajz(dlJgF zNvn0+Um}d;a2<~KT;%H9njx{)36(+lAi#&Zi%w@QYk-X96xboX??q@>6-dCA;`6FPf$gAl-Eh1uN6mikE^RVsydQBhTSGo>2RO%L3;?bmAOC z#`VFHXJfTgL9ZqZ0rW)nZ*8vY91j|#fa$0_nuZt;M!K|}i|qrUv^HG2nxd+U4qI?k z(98#<)JTlc;JHLG$=~mkJg;_3Z{jy<5whZ#aqMLs)Sx@daQCVpbsAmj=Q!o}m+yez zbHZO~#0rXHm$re?p#yP9$iNQp6k->Lt@B*=$jFG+v?qe@0=NA?_CGQaV+#TOs&t6+w z3v}N|;1-!Q1)XqwUQZvl+(VC?2~r(QoSvRuwVdfSd%oE{J?F&1I2z-?Ks8~@IvT@Q z9IG0enPj_XR0jtQTAGv^{{m{N*R5v1#INdDDy!UUM_dVd@apVSM#Lrere?>F#YIuO zKAhB*35M+tM+Tr>Ezn|OZcGbW1-s5JV(X6O#*_=HF4aU$xW>cFRj`)bZk&_4(O~iY zY;UeX5IVC^IJen;4^4aYMJGP(0(e;p2d4uSjE(>542U6_AAJSF+!T}YLeB-RnoXlX zgx6F@LXHPfR>DEi7$xX9oz9KZHeeI{`c)MYd@+L~jrB826km6had~NWC0BArS_((P zsO1$gF}tM1YO{~ z7NGpv+=T707{6m$AtJuavGv8?R40?X_fxP~fLMX?9v^CYZs1+-Ou|=j-gk1SY-4z6 zcEhN`o}{>Fi~sEmyOyF|bHRgp5(8S1;hR?FWhq%Au&)nl$yR+Pjiq6=D{4UWkuP5h zpS%x$f}vj1uj`)BIo=ufsh78lr}Fqq{>K!Wj>NkpARMSd-W@8NdP7dMT}nTvFk6pJ z@QIdYI9-(8+Qz4&X#Z&QIn(QHT52kq;g3#;{@y8QSC*JvnU-QP&wQFm|H&@(?)|pM zfiQASW8z)#rVl}C_!k$wH!8_YM8u0Ao;?^lUi{u*)UjbS7jPj}&+UQ4y)V+0W&4m&&-dJVpbn*b8?d$Tf1sd z$}PtFDTxR@wwsz-<w~!A<342k>|nrQ^~VtJ&SbE;8~zT;| zQsiPwFqLkY02*P6J5o#`M~@ygH#e`SsBm&}A`#mjz3X@4?_tZoqvqw$j{sk%+lkJE zBgSrgnhjM6!je=b@fX$%bffD)RYk3-Rw}9MJ4Q0p9GeBqbREJAG zvR^MZ^uFS!hR+0zAcZZ#L)Z6e3yQ5Y_RZ6(eCSQ znVKrOECyT&aC+Fz%d}eNE9t)TOaq;KYX)_!4>@h_C_Eny_U(al-YB>BF56jUC(2D_ zerhD5D4wxczvgQ$uHAYMaw?}}WtvLt5tnxTg;o&jWSBtZ&r(RHzfMpgCVsa2^p5@N zy&`(fCk5qp6D?5AMlBFv-KZ<%mX|?X^8aM=x;H6M#+-8UZ6=$`VAtwK(Ar+)+FnFh zG_7mA16we(!&2s+ATh_T|8sF{p0B%NN}92~O2<60=!1E?E%HQa)BD^csnrSZ

mj!TGUZy@*uB%Nb~KYQ`Z&RifD?pe~!rY>!6mK);f{thfhC9%CBwvZqt8l+d&EXrETBY zvtQbF&|d#Ck_YYeue0qSNB*yzZIdkq76%YXmEDn5N7tFQ7gr=HBU`COZFF ztDOhsWof1mdC0yU6pF?-w~maA+$dp{kBya$I(Xb3u&f-apu67GYaixsKlflgZ)|Gn zvbWkm=5rVLAbNUwpa(3tQSoJ9V7KZhiKg>#j4+f|*n!Q9i-+f}n5kTFGIQ4<$G%51 zIT#XIsy|KuVRW~SG(KG`or#rZJRc~sCI!lah!}WnK+IyQIXwGG;k=?^ad9yMySvaF z#%^k6CKDJJGC6mukl-QTXQXr~j&!KE+1x=+EY*rpI8#;!x~orgLRfRD!`SqNYym$XM$L<6g8 zmP}k+c(|&D251;OJTej|CT5PA3fDm`ExCbfOMtugt3sLErBeQiDG@y3+x__MNIt2; zdl6zDC4y5xH|z-L-_PLH)YRm+lNw|@(`M*rWG5dZq@tq(1Fd}7G)uT5WS(hO)J#(K z+a1O+2LMcsW}Z$9JvW=}l zOA-bdc7@8|$vOV7he-kJ??4K!IZqQL604?8`2_?_Pfp6jgj~8zMHS)vTz_(BCQhF5 zJl^yDBz1q{VX)E1uZQjhvCO*0nEK4EpaUDv#EXP(;lk8yJY^pUkdD0RjQ>QczP9 zFdsIGa|1<3px7iVEX?N*6beOpM}*e$`EwRFHa1SqIIT4wF9t6VEM%>4p()NcN>p8E z8hBak0Nq}PnI6ybhGT9xnnK4~(e2)d3#&b-RQTUHWN$dQ=Fru1l=uwIH!@olO{}b} z%)`rDH?expmm-lluwjD1>-Fo`8`a7#W@Z_gne1LGlOghQ6}w;tk2k4B<<2w|fkEa= ziSfq&eh4Q@?)-MVNtMW0h=3EC-nY%ompqQ1yhKgiN&GgX@u`xMlDK&Fi{r#e)35I* z;HTOo2k`Ur(}}q{E)5id(Ivo!GI*&o#zpoV=Id(415b+e7*7nrrf^8;*1aaLtE-FnWts+*Vw_z|G7#?&rNXq16V&c>%A2QH1Swmf2o$-8XdU}*|AP~Xrm9c?= z0T3Wg%F@&}bQ!`pSGP()-MS{fM&aSJgtHmmRunm!PLX&5wi{(B6 zJO1V%ICuQQ^>&6NWdg0VqB;V$p7M2DdwX_fX2q9oX{tDeokST*iSM64@JT+!pKZ=b zJ_HZ@M(Y1*v7dqYj{fb#VOIXYW2+YNv=6t*9HI^f_wm-T3)hYQm?f~V|3uk;e#_+o zlq$cNJLK@Me!F6iGvH@b^koNVKkOkb+F;)oms%LVeb%>v@%Q^mF9AA)ocNRD@NW`s z8zneCU4*#_ZPZ~jlK$GZgS+!<+rBf?|6jGuBf4MSt<$KeuyARp)V4AB8h$KMR}^zd zBQVqwug=*+p)=FdJzZU9LnXNx8Em3!RUSvd9q!1BK6UzFIu$uNIT%`{lcQVxspPQ4 zz(Jz($x5D`ehaP`=GZUv+`aO<&)p=g`A&I=+hSiXxEKYXH_6$vG=esh;OL^;t~z;x zm6dtC9f0KduG9}7J{a5W&CY^$G6Dkcq!^3L2aB9H=b@GBF_aI*g2aC|Dou4P%j3vY zM@I*{M$u*P%IPReG3Slh0$)Mb?Uh`EhR0c&JF)0;W);_=j*it#OSgpxqu8C5SCHsO z4twA~lFQ13LYaf4q6KZIfgd64xH1}iO}ZyTo!i{~uX477GJKF3-&iiq*Hzo%HL5!c zsmZZIHj|%`(2;%M?|_jo&*L1x1h@|44Vq;~$uuEBuN>o!51R|UPzQ%tF*oM{meguv zo-)^+wbm&9SEO<=Lc9_m{|fW}%-fYmFM*b;CDs$QB#?6JiFzBl=fV$w$b%33j+Z5x9t-ie zot{2r^uohz`&B_fL6A110tG@_#Y$IGuSTq|t$}QK7O!c~C(FvS z)0!mLN>ha0qUs3qbUst$?t3sO_$%`A?qK z&qzyXPrp@CsRQ{yrCvecDilsTBFpT%ySwMA!Oa=>sZdp55r#3t=%hf?zk}f4vE@Ho zZKZysSHi<)USQJ0!y}cI?&8Jk0Qn2W-ptdh^#*e-!I+c0)=%<_Lu=GoKpa1DW31*SXnSE`0Fq;7 z`m6r_pbj)qI$X}L<%?7|Kjj6@J<`u05JI)4*&3dOWJW})hz=@)6{RxWpO&Z+HWyPi zipaMOTbH@|AF2sZ!#9Qj*o@J#3njF23ZOes|U~&@g z(dkg8+&QY*COD+>us8heR?LWZc zUq|LIZ99k^{*M^R+igS1Zx6GPS=JtoB9$Po0OE;3K|uhsb%T@>fIri`n`pEpsAMx~ z0lpTW#gKsg5McyWGaDHF?B19{jvrh77RC3V7Iw9P4utx_06j2y9d!TUEMK_;5>7`+ zM7SjCD=RCNlI5l*C+{YNV8bjy-?uaQnpeJMyT^h&a5FZGlONyx&WaIyub&uzB>cd> zASn^hzyly`aHIS)=n5CcsZ$B!p(w|{48!q4J0WCZf{HzIx|9ryZL7Yab_i>G@ zhn%)8^k4e=E(SJO!k3Da?QMt{&ij}R6tFNe8v)eFEh9sIo$|tk7Sf6H1kZWu363ta zK10(VgMg~U(>#29-lV`Wju2zuJ?ra)KID4s!tZ#TjuLL-^SzKOdSzauXJxd1P6H7c>pXL z9UTpj-9|O(oqwl~Tt7tJP!Mxkn*?RjqocZDOULVcK`aA+N+x}RH{GVE#s@QNISykv zhl(!9uP_@$>Rd}cA$k8k$J^^Ff0l#j26+9a9o4jq9pth*8ccoWE8zHa5YHPjz&3BqVCH zwBWI>YmFqZ?OJ@8Ia1&z=u9KhQ7Lu_4B+i;xRY^(_;|TXzEx*-)HN5hHopcHxFApx z``CaTY|m#7k5xMQibH7m?5r`kIKU5`PxJ|TNlck^?n%JiE1 zI^u@bf+Bf^gvy}H!#)?!5=e6i>Ui{fSEOa`@gE0@M{gYiX`AuYZSb13E=T=mFc^#| z9=KonlZux>(c%CoSp^d>Ij@x@B~2^VWR<>Ku-EDxy6-ruPUMJgJJR|#{caT;eWU+R zRyV&kR#{y!JUh!(j>svvr%xge@laF~Zi9P>L=3cnMk1OfjP|?}U(X;x2#PAJj8NHo z6M^z9*l4i7K6q>s?qvRjl+4Vt3_ydD+U1!-WMySRK!TWpO^Oa-49CYhtV#`ADP>s+ zElJihe8y=V<;X|C!|%?+^8O>Nk29`wa0~;NZFF?>Qw0dJeHj^nfn?v^D?wel($dW! zU{(f)Dhvf5 zT;QUCJdhG-;@1cI5D^m-Ydm>!>C&Z#4XjDr&|HL$$S)-fJ50O1vEcRC0#CBz@#R#uG) z=gml7Qw|W)G&etc_ADqn^7QlsnFoNIzhv~Bx`hqKv+R( z$&ZkqRlFSthyo;71L9w{HZ~?ECSh#qUy(?+mC@=1$-v5Gw`GkoySY!FK>q$+x;UY| z{!X22uK;zDyLgQtcJ^UfrISwvm7G_Pwgo_E4wMquC^msMs4m;Fk{yg`K10SaxHSnc}M ze+}_P*8h-*aMdCJQ0;B4Yy@)r&L96`B0XTE=R&};Oh6oaa1evRbT)Jjf~Z?XlnDsx zd6CxF*DE5`nd2h+3E};B_MWKa3BcePb20?j)uWkWc5(3xgYx6Y&st>sK_^}g1J`K_ z5Ef-T&%(|w`?A%1Ey8l?u=@d;QsCJypZXCj6$G(1wzfdc(B#aF(MOIOH%>EbY-~LB zYyaZkFaewha1MWNZkB%8s<%dkS|CK)e?vYSkdJ3{ssy%0m*Y4%5`pj~J(D>b;O8e( z!LuZFD`F_mP?|_@qTZkEH``FxEAfYA-&*eIMvk0rzv4?+BX)aK@faRY>UGR+pEM@( z`Bb2qe6Diit29tFOP9ex3Qlbi>&>PR#MXc*S$|gVeK)uL&9VYhV=afVOe7l?lp=Yg zkD4X3s$?QyBi%MwL^Pi7@1FV1>Ctkh>QqzyZEnI!yJsv4%E}i48zk}EW7@wxFfu}S z=QHp4yW=}7PL^xK`}4o1JDpsr(SQr@?H~$|sMaFg z$jb}iE7KUGTAkO9rsyst!3O7^*GUf7g*6Vlp}{cq$r#Kaq17HQ2=0XOZ<0-blV zwJUbDmYr1@&p$w1xKr}~t30l#h|dc+d+)>qBV_n^dC4zaU{lMXcN0md0Pj-OaVyNq zvKRohhBcv#?Iq!d6)yaf7OCax-?O$}1yK9M$&)w|7bvYxw>=%vo=Nx{(x^{NRegPZ zCk!5ElaBWVG}1~TyPijW43P`Bi{V3leV*L;JZdf&^_=@b6p!pUqkqVseF0H@t8!I* zd{Vk(4*5h3tH+2KPAx@}l(kLmu#bx}obo^{lVFByVKYPPl{4j2@8hyQ)C)T-8e3W- zrXx*1L|x(M;SoU(*#b#@Bm;`BKxrt*L%#sg0m;x)FV6_e8&4gUkn~oihdIJKsR`xl z;$3=9PD@~w04_DQx8JOJNi6;FA%L(Bs3G;okBjW)zNU-;OB@v$396^?nLT=$zC#*kvi~?XHMZGBNKCY(E^vUs zD%+D}qhei9rSwF=$$QosSqMS}EXAus4>mzI#lmO2;6$U$19_Sh6X z(XBZVlawE#E`VvSGSG`VF)D99AUM7}PqolE78DeKa^CQ;u=-@CSFQM^f@CQb_cO0o z#3yMzH!ng_qqxDZQRc} zybnQ*-fUJ8jMss)l37_PralHLKLg#FkN`<5DUsDpPES)@xZpkf2#kn~Ua%%2MRqD-9S5j0w zf1LH(ClIjk8x!@-cesvuG&72qCL|c_ZLi`B8``At33U#QBDT}Q?t9zbXQ@H)Aiw#5 z-AoMh{^sewf66~@>KSo*D3N)+Zb(2t01yy{GiFV1SxkE}PQ4ffNi+%LtW$>w;y0xJ z^^(;i;qotR9z1xkN7h`fDY61Qx8`ymDT1T?a6T)Z);xEr$<578OG`@v?rB4M3>=TZ zB?1MIEFQ`Pf^o?H16cK@^tStSya8Vx@Rf;PY;A!i-NnVAyDl0X9va#TN<_v#`FIAF zf+}GOU-N;2)RdIjqCpF4kv{dGq`HmON|5n7dUJDXW~LWF&fZ?UhC`tz#d82e+F73g zR$Pc5Z4dQve?Izq*#;VYQrxQcEI&xkCKVKHl&c;24g~&qJ1=UE+DIvIu(HCzlmw7* z2i_>q>$$n-#>QZ>1f|3Ba7V)= zx>T9}g(Q9>L$`~LgiE{ty8;k}Z>*EMI~FYA#*G{J%b6hGinQyL1;Lz-eteJx2&&MT z7o)Qs37}a1vjmCg1{RG#ynj!ReS7OCWlQ~(Cex{=#`e;Zl9IGEljY$GX1VAT5C=H- zr^&OHch*aVy{Nw23H*=^2+UnMF3SoGMzBk+H*;g7pw2ho&S`#7^$;HY%$5y8$!ea_ z+U7T&%Xejh0A~CnNu&CwC$(FA16K+sEYn4{6PucwJ?V{s=ONPavvP8Rvczop{pDlT zs}l{L^zXRzYDSNVlSYd;-6DE1KJJJ5FF}KPzjX%zzM~w-pg>vqgon(!iHRYPAmv9M z53D$AD_9yq?uq^{Wo0F@YRc;5R8LRO4gsiQv4-O0jTozPRRpqxBDgmc0 z^PiW+TuXo^W-QLm3OKDjbxfE7CB=km7dk3nL*qM%*>Dsq(y?F zmW>wT)2FjQeK&es>C3*t|&rb!N`#Vtf1H1J3 zF<#SRxmRZA=S={7SXyHLt0cX>vGGC9JN^}^6uX~HyH|1jW#bqm_4LL-BgI!i_f>za z?B7xMl=V%N`B8v`4%*-!eTf2act&=x6k^e2h@dP+(`jyd7567B;W^T;^Pc-=@g=^uJ5{Udwljxk4Bkx!rT*{M&q{&Y%0$e|gw}pLI5-{9JVHHofU@r<&A5o_}M#4?i(Mb%7B0+1%4E z0{`{!AHFFBur#BQ=Q}a@M;`vgF8UboGrL>!KdY2aZojbUd3x!`5C4wOZ{)zwgs3(T z-6_KLK4k}bV|wfC0pU4Juz#uBK|cRdx9?=;m%4ptF@CArcV_L^>2^?Yew}W=PPgyW zt~o4=T>*Utsc}kMPTPJLrD?^4$o1B4B%e`EK7GKzS6O+so?I%)bl` z;p_Rpy>@W>1++*t&92zmUC0ikGXwn-K^d2F2nb9mC~$!=e#Fth6m1Uz=H7oYS}t7j z_UP>LGOi=gy}$*H0!6JaUc3Mq6;POz0dCSUI2y+=+l?PgTwRR(!++%v`tnji{-qmq7;AxCUf~&d~@d3#<^mc#l9J^7HeP zla0Vtc~H-)mH$i@#Pu&^5SodrjBgsxaZDxBfg!#77<3>=rhtGP=<)&R6}1|zf{*N@ zSd^0Pu1cUp=EVt@NJM%u50Lt1j_2FRAD&cv9372@fXXnC1XyiK9R`}fjdgz9#6+JuG%F%*O{gR=VsMQ;xkUYu(9x- zqXbCQkJlp~(pk|(2YSJP`(2C!{dhFFX znoA;I3B$%ERvrw?quQYC2c)_AE9PYN96*2_T$%NyU>5>~r=X^!*5hpHIx$S!`Jl68 z){;p;59y!BI709lz3H|XYSDChB9NT|`>mg==HlYw>Sj~wINH(M8}9n>EWyvtWZ%}( zLXtXIf!zZa)IgvVMDbTAO4piLJ?RA;S9H|`3)&`xl?gf@fG2pf=^BVV6*~KE_{M7I z6h4Imat&u*=z^TmsZO#UP&9WXUTiD}R84~vKB(A@A12Imo`F|=aj*g$+~41C#8iUD zk~5Q&mm%&VmuJ2R(QVDVQ+b7Sqlx%bY#(Q2N$v2pe=zca<$iVIzHph_zG#FZ9(iMYx8S(rdViePo0mMy5Sg z?@aT`hX~EpD|JtK=BPO0&rm+~ZpK{kI5TL-?V3M74~c2K#_f8wb;VpTgjM_PyGrb^ zOjgv`D>HApe$jo)KLbN$bnEbD057^M7A>6lEGu^3iXWH5v9*Ra1#gjH5Qhh~#h@J2 zixwn>DUVgpbw0-xRvbt^NgJaGmD*cN*I2lus3`w=z!(RoyA-3>Z|o9v};^tMHn+`!(^b81+XG&NW-)$cZZN$$(qla;o+9O9cT zbuQiCjrmNJkOdZe9j&Sc+=vM+99aJ62u4%h|=3 zIYQxLT>Z9~JyWwdZJtumTT~0(&YL^0#T=`4%N{xYy0ExqTcIhZ;T(38L<3>-0ovZ2 zz4vLnsZcr@d)G!y1HGDj4px@*+|5=J30~{V+B>YU8Zent*2x=1jnF1bN6jq|)lSQo zT@^Iz^vVc%RqH<sq`j-YrqODAA`T{0KNK^;5 zYf`08^wfX)kT#jal>~U~mvv#K}`_O^(6Rd{mar-Je<44O~;|MFOs{)Y6J>tAf?<_Jr5k!|moV!L@Qw zUNJ3n#6UiAp8JETvP7j`_IGPVlR2L3oRwYM{sT#yqHbDaGFseot&MuZ@*>*Q8i>*< z>f?fm_82j%1wRsbYN)wQ-&WGA+R(>0QE7GLrpvMGQ7@em8}-J>Pf|?2P7GZ@MXqZ! z-aJaY1~Jj^F3eqKduP)QWFXzhjm@x+`>4Dv5IsuON+=*e!^oAv4JR;rv$w*fvE~CE7-uK3E=;fX-U;w-~XYZ#pVdp0`s;l-P%MZ^D z+OEw-dK6dg4b=c@!sT6X@VBe(GF? zvNnC`$+3gZiyFML3mA+GAV^EIbSv^fdPuE9?6&wePXoEk6V2SMA}WZ6AZmUx$2|9> zX=G0?ZF<&a=qAt!X#0+%yTv%f>xB4<;snf_o40sx`kE2tq$LxScO`di*$DDjPE;U$ zv}o%pos&{GXVMv$GL#P30b%()dd=s>ZQE9O4RlWf;u#;t&M=Udie`EhGbczcSKSyO z;d@f-sbz|zk&T+$LNh1NkPcAy{AAuUaEG;+Mm@N^7h@swT9v0Q1aWC;0M~ zP3Kj;zE9)o(l>gBZ(>xXiO*YF{(h{w$6(}iZCXN!>4H;Lw+jsY)JTi;n2VfP#mr=D`EsNJ4>!Xin17bNyxW~)vyf}KEV6pH>DUxa0|K{HfuQyl9a#x2>lt`^ zs;Mw{lLWDgsLeUMiF3}&=P-O>BWt#wa1wXxjLY~6#13u$QAWW%eiiG#sUtw$L&a0D zfA5j@bMP?c1*|pDV36is5_8|)=y_0=ZyB|kuQ#)bb2A>H<1JXe{FwzeRyj@A#-ih} z^l@^d5DN$jT@echqNqFLL#GMZL8VSiH=w}*;u9dDgWQqUn=0z_OcF%32Rh^S! zPC16Qq{p&jow40Y?ed%zVuoRZ{Akzm#B>It7f9x~0k^f(bmpu`QFnD$h&X8hI(ly{ z5bL701B9QGUo`LO{6OA|PlyNhAMFSE9dOPUi+Hy(MO)>Q0r$X(1U8WKj0<))d_hA; zF5W9guxAJ4v`!L50H~DSpbC^i}7Al0u&IbTs zbda05sNsA|CE)-_*~E4NG3zj2;&zkOnGRSWw0yTvE8FmEZ+&I{#HR#)S=?NC^e6rb zQRX=8bZp?OOg?_sCEaFU7P7ad`U`XetPi(}|ECrJC#lz0pP(Z!Yzeef#<5>^a6}# zJHJ*-0~lIczE(?}MvbeTw5aBwsN#z#ZuT2&1By$$}v4i3=3VKb(P{8gJy zsE)-hDmZnSIvm1snuz$7yyZ?ks@MJKQ|XDLF7jegcrn?E*~Ezb&gX=h4Zk!1<;c>E z`qEuBb8i!>vk%eR=a$5d%%KeM%QIM@6W&PWT3oG#^-^vCc^X#3Ed#`H>6o~!k(=8B z>$M#+CG2n=5T(N6oqmtNP)d@bay9i^oKw^tyKZsDLhB|#H>2W^gL{jiWEQ0+HA|=D zay=_8bW%2IsKBaekeRam0g-S|C1wGx-CUh1_;^2IA`t1kh1Rw?U*izt zIzH&4(>#kDTIsH3$8!=Ka&!YYL`@MS16Ldp^GZ?9+1zX&O@h6LXE(%tvoH}zSnldV zJME6y#Vue!*gmrZ3EKmEp(BXZIZB+Din43{IIhmJ-iyG@$6bDoq&-%RRf^h*8&Fnp zFlaip-;PAk4qL!xd>Wv!j;`2`#Vyyh-n_R?%g174vJG75 zY0Lwe?dIf|x=M|S;>W9>`4e1>8;rCFX}96)zXVsTwC}x~js+S?;Vo)A$!#v$Kq>Pe z2ru?@?iHtA=(^0PCeg8^3ejH(rw&_8Q*&EnsnRnJp<56A`pVz zE_mK~gH;F9s1CY`0A=>%MxD>1g}x&@wjWorQ&+!*)NvHtJS$K;T2ua2eyG4nqf_D$ z)=-mq=5=Si7RFQ>f!mHpIIXQfV$x-AXz}l$0y)ZY>B6vFrXsPq$#}oSYM2le`Vy8p=n-=# zX&aJNUYON-*ltlcV*BAZ;`OJ7x0CYQ6;S|ZWe7cl`a-BfjlwwgLazn7;zo5ul+Y0= zw@Pz>F1kC6g(C_k5ayQ70(jC)rrQw{O_1Gi^W{`wEiypbuv>Q=Tb#p)4#H7G1MM@J z|ETpspos!t<(JEmI&u>sXUiF8<7y~#nh;~GqvE2i4D)rLk!_@(+dht)&@?>YHL zL<9zwGq&|qEin)?w*`7UKmZ}Bz7MaVZjRLm*lH+Ah0UIer&ng|W-hPl9v0GDo=~|IDqb@zyxblx z<2IsWUbzYUWAPe1BcFv0uQXDg57{P*+?&p0Ubi6@+th!pvGyt`erI{4V8^i`9akn= z*P4@XZr#=wJ37q{Tr9|LsL!mjYkc0*VZg}6#xj`m-j|WOUgozm@?{e<7Tdcp)NUbr z1Fe(*In1$ngCrBa%P9umXVw*@5arv|t1p#sHtU(5oS#Rua#I0>N;Xv-8iiEW;+&*gJ(M`_`Yf&{f3R^H zD+uI-Z2{*3vNj)gKeX{BYm@5USN{dNA+%&v0M=!#Kjqnjse!mkRKAYmlqVijr^#>( z-Nf{wV%Jw;17%6MZmQr*({8G`ZotX?kyd{D&DedV^K-Ox6=Uh0^{qGrXU0XTEAp%A zm-+lEXO!P+ZYCF#Y*~k)?)+8aqI>Z;htEFdOYHI+{^_wP4rE;Yxwfg9OP&}3;jrTw z!?_~D^?W6NbPJcXC))S4Cvax&+ya-nI4nIfw(`YEKbEYnTsx_(pzx(TbetImTF;1+ zG7jmPg0Ne2SOx0UNl*>v2JQyoTW6vXxcyVrEG#vF6>mWyu8s1g6)RmA{~kOz3ibZS=<|*`!4g zbEZd4v+F9)96Q$S*Xso#YP2}RWUg{kb33PD1v1{Uf?8Oiv{U@G5k|*tw|a%Z@GWKk zTTh#GYN*yO-g1?u9`-%wRB-9P-Moiqvx8!dt9m5e>)PMe)};Z*EtvUK6>mN zhh9Jct>`Xj+{vz8z8$7v@jzhH61QbZ#w4@d7`N9*PvqU>M0#vwV12M7PK@M*?xT+O zA;q)BI*mPJE@Ls0rOSIK^(XVW7WXs{(;aCFJTL&y>AMD6JQ)Cfm=3>l60OE4!sySSV+ zt);aQ^V!R2?Zt-_CN`d}F0n3Wi>e7*BdqdHX)@XI-k%ucDlxcQc2d?DDH#D7Sd@G8qLaoR-0@UN=K-XUjCgIfTv-$LzD~h}j#tPPNN8 zW(XK5x`Lo9voqQivr!s;-@5HnT*RAkxeu@4{H}CRh zm6mkT_B*$H5uL0`St$zkf5ce5_bXID$W^s}CTRwNDjxTwpCxw2PIN`NV1yHL;%?yD zwujPYx!9sn!fSEt%lM7 zk{YlDg?8?av8G^oO`Q!gu!{ZF3%XXJB^MONe5o(iIj)*Y^~1b+=7j{ zG-I!V#S52J=H~8af2b`zZdnTFscX&WhwdqvHpFH@|9jZ|Lk6% zQaWbWC1DrSM90w_Lkr|lsp2G^fSbkcX`6btr!}38{ezpLQFPDu)w&$?Q9~}x2r57; zPyx|ScZ=t(H%d0m6K5#2FFfwt*`aKY)<{_=9?5qe!o3CzJG&G&)W5kjYo)%*$;K*% z{_y8KVq}Z@6&!YvrZRPsB%A#SHF((nYwyeBsb1Ue&v84KCipW%C zj>?oFLy1Guq$q@h3Q2^bGE>SJLdcMrBJ+@$-`do9?4I*J=Y4*Ezx{LibZp=6zK82x z*SfBIEt`n!0fm94uY*?6^E*Mxd==t#?f$5nKBc<%^7tJYp&jGJnBJ7}ciHvB>ASA^ z9&}D;i`mJ}Uo&0oq~gBy34dwGl*dY6h0AKK)%^vmHj?92T!pOf|KG;~;-5ZfY8c4t?JSzVY5{Ye#T$-How`M5|*tNLf62 zY;=#MS!-4|s9)M%o;dArDE=IH<2whBze+Xk8{Wv1pF`AiK$1g0A|r@A<_WjO^>V4oV+81`020+VqO!=Z+0V zom?_vQeu%WPhC(^X}W!l#Js-^T(9mG$TXi-|LFx-2tcKvd&f8D2tDK8(KpsBGy8Uq zs1U05(h!ugsJ;8Q0@c2=^8*$W1$R9tUB=#O{&8gRb#2(qH9hlIAa6S#4Ujl{P_Wus zpP9q1^6{6;FvTt9q_;*bSl z?Fl6Qv|l{uXmC*Q31_jCp(CvaLXTt{pXyA{=$di0)0QKQvdmf@icbeYKzXG9sNOTj zvH0<*Rl4E2pLG!imSDYXrl(4-vGcl|mFvi-pw27~j@VvhM;KbN@K zo%`_uFYR9RkyKCFeqf9@;WS@ZLM=g&VIr zaMRuR+p}+&*Y(%U1yG9UI?B4)VE6XPkS-QXl2~%Dw}(?<^S+zn*J}p5QL(@qC5ES- zGn8uz5{{oQ{BrsiF4|^4-OJ3D!66UIwAOf~cl8d`&qrmoF=&xbCFN7z#p=Hsk%&>1 zP}f_ep%s+V*tjC5qGJnqK`bMw#ye!B+F9MDoE)nEl!baj(P!Vf4=PNiKHnU-s z@q7kqGJVf_ify$?#P9gM=Hl{0GgjAPfYp z(LWSFWm@py-5;#ad1SQAQs@tz3O@Xkgchro?3nP+5fc$RZzx9}aUuF(hE2`HwjvY0 z(^D4*lbwx+;@Y2WwmMho0L6dp8ay>v%chH8Cab2 zN4z_kCVOj=S^1hXo(+E{eQgQ*vrm#bFI`rxdHZC1myK&F>6w*t+fJ-FkNs6p?{t}O zd#7jS^GM^iTendtd3yZNMgGF8r8&E|i*27fukyqrc2R#bk3*>AhKsX{%nj!7Qy-|8 z)>8Am7jE6)HtpE60+x))uFxQU@p0b@6gJ13-Q5ignlDR_KDc);*?p(YB8TBzEXgf1 zJ6e_D*q1(wYl^At?^O2}H%qFkY`!bVd@mJYRCQ@JJND9WZWd1>{vgbWfe?dNv zCQmr?r2H3?ZlTEi(vM478d!t5>duJ zAOkntndCSp@vl3;Z+bf(OQ(^%Wzju=o1bMN{uAT+{uiss`ZsbfQJJP*w7>nR@VRpCB&_OG+=VmQ?A{{G{=tk7H+R+OXeG5O?jrG;a^awTcB9Lg2RZ{O(M&z-c{4GSK|OI^@1h2@LuXvJQb zK`;pD>8Pt$e)vFQv>=@Z;Ra5cmciCMH5U85dka9Up}ParVsRi}NlCf8L9|yB6WLu% zSuKi<{Vfnz`vlX2ni@yklD{--;66Ksdu4SPH(Wx*EfFC>#aB;9}2OqyeqMMOKVPgl@#Jo zAPFIQ%+1YZd+dd91!399m-6zc>aPWV-IC^v;q;v|)FXSHNFKtYK9x|h?M^MX@P!Ji z3*HFW_%Z82;|yIYpe*g|?bnAZLcO`WDrRJ4q@<)|h0D#04&k`1yYvlU+jy5Es1ayz zw^-L6`zkVtDHAQWxLHfWvY;a7fXGS6EBh9c-y0UXL%F=}HF{4V;T_H7iW_PHJV(^S zuO%`?jZ6rgAb*f7T5Bxd@0Hh#SlTU<>a}d$fWq08t3Mz9Wm=aE{?ZTp#Fhj`3tV(6 zsP|!{{imP&>m#JUcqr@0dJbbHDyl!+6{oW3do1CjRZ){Ewd%F!GpD zcJ2)t{@}|j`4VkjSlj}~(|69f^ftV*L6^~x=ujtGd2kD#E1NUh6*}~|8jCx@uU@`f zE_YZ<%kdqZHvh2{ZkhSB$zb{BBUxupV$}h2LvKpN?7a^9ny@`xwRuX=5d$48tCJ_c z_V)`23X-haNFLX zy~Z~XzeqRWC)1z{(>G+JRih((Yt!OHwydLLygH!acqK&8`+8?{Q`6jgk@Bs+_IP7- zekmvTCZ^4NKg6+vddOIg@F|P)&$q1l{O*aKXXusQG?z)ZT{2hC)=6&B^egJUvUry^ zk56b_#Ps);JjuQ1HtQK~tvU0CuJ8VOS*A5Xx%=Yvr<+^vGS4oAU5~ZvoR9bPP#xd% zY9$3?^`}%@69WSS6%~~?vA9T&);X`@!6d{cTo~?*Wuww}9eM|mXAI!cqvF`^pr;`C z0tv2xhF1ep11_pC{`xowamMBx_xXvTcBmJAuB%IfnA{&L)?`k99tamcabSbL-flb! zlJ$+Xwc1$Y2zsABP4p(0L(06#wt#u)^`39U>=m6x8x{sO6PM#-!q4@*4-vuny)wr8 zC1ZTbviu!xyX7t7v$N;0_l9ir9_)cg4DpI6ed2>3*Qxc=DL970ir4HI89TFf7B^wh zS{D!z5fM6_E@LBF*d*hsAJm+EYO5K$(dr-Ls(^82qf#m)jq9z5SFUT#U&pm%CUYz< zX_~~`eXjit7ikBWx~Ex8p0^;!)~B@{iy$C zOw1S957eP;4i}@dfHperZ(hMtG*;ltI$!fD`)swQ_O^&s7P!8hkk)k$IcMQAKcanUgp7>;@0WK3)vdYE zVaD$9v0wD}t;Ec)b2fw8udhrs9F5T%DGFq`K;P7o=-IJR?Z@z_7-Rd$52$E^4x5bx#L|e#F!o9?6+Kl2Jw{%Yp znKY%@e}VXob=Fu71V<;P03q~fw2pZ;Y;)NC&>|ikcB!e(XI5KSo?$g#48b1C@`fGR zN9x$kp8qD0?j9WA*p!$ZG@gA5|8x!-^4?c1^?? z`o-EV9wBJaE4)Bjg43qmLeZGV)`^ljxdIDr+MwJk2@6}B^RKP#cb_Pq6q|AUrDYus z>14~g=M#->A0ODhh*6Db!UpZFOXfOscY_wG)pIcS4}+ODhRvHcwNb3U4pmhQTxaJc zE}#XIXP;2ugW6x)9*kZw^ix=fj9Q#d`r6uPpaT$S*QKMU*V5E{XZ#HE4j71D((b*r zp7By(O=TrXpDHd9j_!Pk2X)Ff3M}Wd>Y&f%9wjb}5=W~QZ|laRCM(%~+zIzk)-Y7a zIkGME6FXe;CXe?o;H zcQ4W{Xx3AZ8Ta37K^t!Qu#19H$!K+hoIwlIsc;oT1?|LH8wtn7%cq7uR5*L8uLi@9 zBe*NHy3Zf(R5h@kaG&ldD=X{j>Oy>jhKgKxE_8G}*@AbNC^1&yP=N~LiQ)h+PJb@d zvZ5k!w;5-hh{j0(w2N%}tQi*?EvY;qYLl9hw{{(4cVG?97qqu-prd;*5Cr`OoM zR^y~frIX+H#x&g0HCa^JxY(>zwrO+NQAaw8Wh=d_Sbz2ckf4`g6s1zXq-OE026oOQ zj0!i8)gTtnZ1$-r^Vj{NMs-|F`g#anw?^gtdivgC7jm9}kX^(y z&*js!;kOk#FH!l7ZhCn!+pn&|5phfx+wEeBc*ZA2d$>zzj!SS5+>jFfuhw49t z%vNmN?`^@Kc|-5~c{rstAb3wrPnQ%In;{Cq^Zew!8XbiPKRTf^E0zh*s08L3Uk?6F zxFgSK)c1BJmgpx)fK*hd9X?DttAK#N4zN+m88!zHj~*@c{A?lILRmu-nWO!h(6wcc zyW}_aPi9S~jEMJa_Kvp}LSD;5D$|Ly2qCfagUbk)8PwR~L@ifbSZiJ!?N2GJhcPR1 zIK2Rib9Hdbo>*hH)s{#KFKBfNFl7o`GoZH_lqiF~vk_hzN-EI)02+p|Tf^Df;|#MW zlQS|TsnAgF>7|9u_T@{2xIO0+)vuXoMwO9yr@oRe&st=Fn11a|@VY|RXl6-A%WpML z(T;pq+}^A>#%~fUNS#7IA#h{DGejT+sr2-8sF1+Q;fy$hR8Gy!OhSCQtW@fJySqiN z-SMsA42$UNjJ^j=&XG&ApV-4|MH>Dz8m0AQYkX?cn7RWqWz({DPJJlMscB%&YH^=&2ffQBDWvpgpCm_MQnt9NT@?RV^Lk^j2dR4k+#5$)=jOeP;muA zp)0l>EwZbx)TXI89QV4P{sFe3oUrBF&IWejJc`X^|oT$RMoZ`$z@w`);cUfCnSzTzJZrW9Nmx(lJO71;-`>tWs1|Qj0 z0_Z}Y2mdcsE4OStUhLX+se`z3_+$W}VB(~Bdd7P^69G1%>)FJ!h; zUcL7i?ohbnSpf94NP`IpnuiaQBy*AA^#P0_MZA$65{6xu_6n;lARu6C?PXDD>U`_( zS5c9+wz0v!u-pyd6x1C*xTIfy!Yb zjb7neN%o%3>s$OL4}i6y@-!UJj zcAnAj#%hYr4L_n$+A5k7Ctk_7?1H{Vp!liF-cJysVgKAq5j!g_L*i?=Dw@p!8gdTO%naD+mp=JE;f4 z^q@-E)Z+}XVN~@YJ5yRxay=aiJJgp zKePM67^L#!dq@T{xB1oPCr!s}-VcXT!m?Ic74`hgTTWj?%5jnvzq9uU%B^AeC6CnO}05c37^%SbRT>+aUVVLisJ}aNX12Zx6r<;K^6_Dh6Qy4!H$m&T z@?!H}LP{I6wjDEBsqhm!mgurIkW%Tq3>Kv~ISBGuSyD##aQ2cUTNgMWUzNHCmp3dR zfD||HIH7fj$|2<{T8PRad1iFt>qt?#dIQzsC7Vc2zrKZ?b?65532wh?fTps;nxDQ> znZ6*MXy)pAi!zpa_y3gSHehSnCkl7a)t)W57j@9Z1EYYv6?hMf=(ofiX(~?}w~rwNncO8{426A z`L^d7nLkI;OtV99EXlG~2aykO1parNhwdUHZU$G_QFsgR0RZkPMA9mg^8YG1w%lOz z>mzN?*5h;>t>9wEUL;~v|1v>{G|)m`S3h_y(1AXlvM))LMWhgqz^y>p zmlnJ8$`IYX);Y3M)RFQU>WZ30g=(Lh5UZ)ME$iofri1L?E#GG&NtRBxtFseXh~wF_ zibvm3GYF8hwg4_4P5=(^C8Qcp4tHYUZ}K9hk*wYTc5ESFhP90K8x>^=0ZDww$N07+ zx=Q{f;`k<196l27A!>~7LhNg`yn_;?LG{cfXdUy;D>L1pb84fpex=bK9g}49a*_=p z&}t-?J`S4CXKSBAg%b}_ix#C<O2W90FNJ-$D_9u+&^FV(tBVEk9&$P6>zF2WG z=3vNkXhlxQoH1?Q&_-iKzoq&$wIlt-X`jbA+H#x|as(QqS)7e0LtQ>mmEvsdI>L5) zaRBe;5*9LQD@Q%<^⁡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 3.4.0. Versions prior to 3.4 do not support the `mntr` command. +[float] +=== Dashboard + +The Zookeeper module comes with a predefined dashboard: + +image::./images/metricbeat-zookeeper.png[] + [float] === Example configuration diff --git a/metricbeat/docs/modules_list.asciidoc b/metricbeat/docs/modules_list.asciidoc index dc02877d6cc6..b08a39c0b244 100644 --- a/metricbeat/docs/modules_list.asciidoc +++ b/metricbeat/docs/modules_list.asciidoc @@ -160,7 +160,7 @@ This file is generated! See scripts/docs_collector.py |<> |image:./images/icon-yes.png[Prebuilt dashboards are available] | .2+| .2+| |<> beta[] |<> -|<> |image:./images/icon-no.png[No prebuilt dashboards] | +|<> |image:./images/icon-yes.png[Prebuilt dashboards are available] | .2+| .2+| |<> |<> |================================ diff --git a/metricbeat/module/zookeeper/_meta/docs.asciidoc b/metricbeat/module/zookeeper/_meta/docs.asciidoc index 67f71737cad6..847229fa0bd5 100644 --- a/metricbeat/module/zookeeper/_meta/docs.asciidoc +++ b/metricbeat/module/zookeeper/_meta/docs.asciidoc @@ -6,3 +6,10 @@ metricset is `mntr` and `server`. The ZooKeeper metricsets were tested with ZooKeeper 3.4.8 and are expected to work with all version >= 3.4.0. Versions prior to 3.4 do not support the `mntr` command. + +[float] +=== Dashboard + +The Zookeeper module comes with a predefined dashboard: + +image::./images/metricbeat-zookeeper.png[] diff --git a/metricbeat/module/zookeeper/_meta/kibana/7/dashboard/Metricbeat-zookeeper-overview.json b/metricbeat/module/zookeeper/_meta/kibana/7/dashboard/Metricbeat-zookeeper-overview.json new file mode 100644 index 000000000000..eae9c76f04ac --- /dev/null +++ b/metricbeat/module/zookeeper/_meta/kibana/7/dashboard/Metricbeat-zookeeper-overview.json @@ -0,0 +1,504 @@ +{ + "objects": [ + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "title": "Approximate data size [Metricbeat Zookeeper]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_min": "0", + "axis_position": "left", + "axis_scale": "normal", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metricbeat-*", + "interval": "auto", + "series": [ + { + "axis_position": "right", + "chart_type": "line", + "color": "#68BC00", + "fill": 0.5, + "formatter": "bytes", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Approximate data size", + "line_width": 1, + "metrics": [ + { + "field": "zookeeper.mntr.approximate_data_size", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "avg" + } + ], + "point_size": 1, + "separate_axis": 0, + "split_mode": "everything", + "stacked": "none" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "@timestamp", + "type": "timeseries" + }, + "title": "Approximate data size [Metricbeat Zookeeper]", + "type": "metrics" + } + }, + "id": "8d3b7770-2319-11e9-bb66-8baac426dfd4", + "type": "visualization", + "updated_at": "2019-01-30T13:29:19.163Z", + "version": 2 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "title": "Latency [Metricbeat Zookeeper]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_min": "0", + "axis_position": "left", + "axis_scale": "normal", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metricbeat-*", + "interval": "auto", + "series": [ + { + "axis_position": "right", + "chart_type": "line", + "color": "#68BC00", + "fill": 0.5, + "formatter": "ms,ms,2", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Latency", + "line_width": 1, + "metrics": [ + { + "field": "zookeeper.mntr.latency.avg", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "avg" + } + ], + "point_size": 1, + "separate_axis": 0, + "split_mode": "everything", + "stacked": "none" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "@timestamp", + "type": "timeseries" + }, + "title": "Latency [Metricbeat Zookeeper]", + "type": "metrics" + } + }, + "id": "c0be43c0-2319-11e9-bb66-8baac426dfd4", + "type": "visualization", + "updated_at": "2019-01-30T13:29:05.974Z", + "version": 2 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "title": "Alive Connections [Metricbeat Zookeeper]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_min": "0", + "axis_position": "left", + "axis_scale": "normal", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metricbeat-*", + "interval": "auto", + "series": [ + { + "axis_position": "right", + "chart_type": "line", + "color": "#68BC00", + "fill": 0.5, + "formatter": "0,0.[00]", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Alive connections", + "line_width": 1, + "metrics": [ + { + "field": "zookeeper.mntr.num_alive_connections", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "avg" + } + ], + "point_size": 1, + "separate_axis": 0, + "split_mode": "everything", + "stacked": "none" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "@timestamp", + "type": "timeseries" + }, + "title": "Alive Connections [Metricbeat Zookeeper]", + "type": "metrics" + } + }, + "id": "1c2f8930-231a-11e9-bb66-8baac426dfd4", + "type": "visualization", + "updated_at": "2019-01-30T13:28:52.034Z", + "version": 3 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "title": "Used file descriptors [Metricbeat Zookeeper]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_position": "left", + "axis_scale": "normal", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metricbeat-*", + "interval": "auto", + "series": [ + { + "axis_min": "0", + "axis_position": "left", + "chart_type": "line", + "color": "#68BC00", + "fill": "0.1", + "formatter": "percent", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Used file descriptors", + "line_width": 1, + "metrics": [ + { + "field": "zookeeper.mntr.open_file_descriptor_count", + "id": "b92e4550-231a-11e9-9e57-679640dc0c7c", + "metric_agg": "avg", + "type": "avg" + }, + { + "field": "zookeeper.mntr.max_file_descriptor_count", + "id": "918d0c60-231b-11e9-9e57-679640dc0c7c", + "type": "avg" + }, + { + "id": "7e4d11e0-231b-11e9-9e57-679640dc0c7c", + "script": "params.a/params.b", + "type": "math", + "variables": [ + { + "field": "b92e4550-231a-11e9-9e57-679640dc0c7c", + "id": "81c03fa0-231b-11e9-9e57-679640dc0c7c", + "name": "a" + }, + { + "field": "918d0c60-231b-11e9-9e57-679640dc0c7c", + "id": "8a3af6c0-231b-11e9-9e57-679640dc0c7c", + "name": "b" + } + ] + } + ], + "point_size": 1, + "separate_axis": 1, + "split_mode": "everything", + "stacked": "none", + "value_template": "{{value}}" + }, + { + "axis_min": "0", + "axis_position": "right", + "chart_type": "line", + "color": "rgba(0,98,177,1)", + "fill": "0", + "formatter": "0,0.[00]", + "id": "dffaffe0-23cc-11e9-b1ff-37c851471450", + "label": "Open file descriptors", + "line_width": "1", + "metrics": [ + { + "field": "zookeeper.mntr.open_file_descriptor_count", + "id": "dffaffe1-23cc-11e9-b1ff-37c851471450", + "type": "avg" + } + ], + "point_size": 1, + "separate_axis": 1, + "split_mode": "everything", + "stacked": "none" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "@timestamp", + "type": "timeseries" + }, + "title": "Used file descriptors [Metricbeat Zookeeper]", + "type": "metrics" + } + }, + "id": "ddb13c60-231b-11e9-bb66-8baac426dfd4", + "type": "visualization", + "updated_at": "2019-01-30T13:28:22.583Z", + "version": 5 + }, + { + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "title": "Packets received / sent [Metricbeat Zookeeper]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_min": "0", + "axis_position": "left", + "axis_scale": "normal", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metricbeat-*", + "interval": "auto", + "series": [ + { + "axis_position": "right", + "chart_type": "line", + "color": "#68BC00", + "fill": "0", + "formatter": "0,0.[00]", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Packets received", + "line_width": "2", + "metrics": [ + { + "field": "zookeeper.mntr.packets.received", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "avg" + }, + { + "field": "61ca57f2-469d-11e7-af02-69e470af7417", + "id": "34949540-231c-11e9-9707-f128cdaa3bf2", + "type": "derivative", + "unit": "" + } + ], + "point_size": "0", + "separate_axis": 0, + "split_filters": [ + { + "color": "#68BC00", + "id": "5811d190-231c-11e9-9707-f128cdaa3bf2" + } + ], + "split_mode": "terms", + "stacked": "none" + }, + { + "axis_position": "right", + "chart_type": "line", + "color": "rgba(115,216,255,1)", + "fill": "0", + "formatter": "0,0.[00]", + "id": "753b2e60-231c-11e9-9707-f128cdaa3bf2", + "label": "Packets sent", + "line_width": "2", + "metrics": [ + { + "field": "zookeeper.mntr.packets.sent", + "id": "753b2e61-231c-11e9-9707-f128cdaa3bf2", + "type": "avg" + }, + { + "field": "753b2e61-231c-11e9-9707-f128cdaa3bf2", + "id": "7ed33c60-231c-11e9-9707-f128cdaa3bf2", + "type": "derivative", + "unit": "" + } + ], + "point_size": "0", + "separate_axis": 0, + "split_mode": "everything", + "stacked": "none" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "@timestamp", + "type": "timeseries" + }, + "title": "Packets received / sent [Metricbeat Zookeeper]", + "type": "metrics" + } + }, + "id": "d2f52b50-231c-11e9-bb66-8baac426dfd4", + "type": "visualization", + "updated_at": "2019-01-30T13:26:42.583Z", + "version": 3 + }, + { + "attributes": { + "description": "", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "lucene", + "query": "" + } + } + }, + "optionsJSON": { + "darkTheme": false, + "hidePanelTitles": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "1", + "w": 15, + "x": 0, + "y": 15 + }, + "id": "8d3b7770-2319-11e9-bb66-8baac426dfd4", + "panelIndex": "1", + "title": "Approximate data size", + "type": "visualization", + "version": "7.0.0-alpha2" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "2", + "w": 17, + "x": 15, + "y": 15 + }, + "id": "c0be43c0-2319-11e9-bb66-8baac426dfd4", + "panelIndex": "2", + "title": "Latency", + "type": "visualization", + "version": "7.0.0-alpha2" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "3", + "w": 16, + "x": 32, + "y": 15 + }, + "id": "1c2f8930-231a-11e9-bb66-8baac426dfd4", + "panelIndex": "3", + "title": "Alive Connections", + "type": "visualization", + "version": "7.0.0-alpha2" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "4", + "w": 25, + "x": 23, + "y": 0 + }, + "id": "ddb13c60-231b-11e9-bb66-8baac426dfd4", + "panelIndex": "4", + "title": "Used file descriptors", + "type": "visualization", + "version": "7.0.0-alpha2" + }, + { + "embeddableConfig": {}, + "gridData": { + "h": 15, + "i": "5", + "w": 23, + "x": 0, + "y": 0 + }, + "id": "d2f52b50-231c-11e9-bb66-8baac426dfd4", + "panelIndex": "5", + "title": "Packets received / sent", + "type": "visualization", + "version": "7.0.0-alpha2" + } + ], + "timeRestore": false, + "title": "[Metricbeat Zookeeper] Overview", + "version": 1 + }, + "id": "467207a0-231e-11e9-bb66-8baac426dfd4", + "type": "dashboard", + "updated_at": "2019-01-30T13:34:01.235Z", + "version": 6 + } + ], + "version": "7.0.0-alpha2" +} \ No newline at end of file From 5f90c08eb46ca32c85ede26388829da22aaa80aa Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 31 Jan 2019 01:50:11 +0100 Subject: [PATCH 31/66] Migrate system process metricset fields to ECS (#10332) --- CHANGELOG.next.asciidoc | 2 + dev-tools/ecs-migration.yml | 32 +++ libbeat/metric/system/process/process.go | 53 +++-- metricbeat/_meta/fields.common.yml | 5 + metricbeat/docs/fields.asciidoc | 40 ++-- metricbeat/include/fields.go | 2 +- metricbeat/include/fields/fields.go | 2 +- metricbeat/module/system/fields.go | 2 +- .../module/system/process/_meta/data.json | 205 ++++++++++++++++-- .../module/system/process/_meta/fields.yml | 40 ++-- metricbeat/module/system/process/process.go | 34 +++ metricbeat/tests/system/test_processors.py | 10 +- metricbeat/tests/system/test_system.py | 7 +- 13 files changed, 347 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 213fb6ac3ece..730268c675ac 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -84,6 +84,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d *Metricbeat* +- Migrate system process metricset fields to ECS. {pull}10332[10332] - Refactor Prometheus metric mappings {pull}9948[9948] - Removed Prometheus stats metricset in favor of just using Prometheus collector {pull}9948[9948] - Adjust Redis.info metricset fields to ECS. {pull}10319[10319] @@ -259,6 +260,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Release use of xpack.enabled: true flag in Elasticsearch and Kibana modules as GA. {pull}10222[10222] - Add support for MySQL 8.0 and tests also for Percona and MariaDB. {pull}10261[10261] - Rename 'db' Metricset to 'transaction_log' in MSSQL Metricbeat module {pull}10109[10109] +- Add process arguments and the path to its executable file in the system process metricset {pull}10332[10332] - Added 'server' Metricset to Zookeeper Metricbeat module {issue}8938[8938] {pull}10341[10341] - Release AWS module as GA. {pull}10345[10345] - Add overview dashboard to Zookeeper Metricbeat module {pull}10379[10379] diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 6d8942935b6e..c50e1755cf95 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -1541,6 +1541,38 @@ alias: false beat: metricbeat +### System + +- from: system.process.name + to: process.name + alias: true + beat: metricbeat + +- from: system.process.pid + to: process.pid + alias: true + beat: metricbeat + +- from: system.process.ppid + to: process.ppid + alias: true + beat: metricbeat + +- from: system.process.pgid + to: process.pgid + alias: true + beat: metricbeat + +- from: system.process.cwd + to: process.working_directory + alias: true + beat: metricbeat + +- from: system.process.username + to: user.name + alias: true + beat: metricbeat + ### Zookeeper - from: zookeeper.mntr.version diff --git a/libbeat/metric/system/process/process.go b/libbeat/metric/system/process/process.go index 189b0964831a..6cec53a27b4e 100644 --- a/libbeat/metric/system/process/process.go +++ b/libbeat/metric/system/process/process.go @@ -45,14 +45,16 @@ type ProcsMap map[int]*Process // Process is the structure which holds the information of a process running on the host. // It includes pid, gid and it interacts with gosigar to fetch process data from the host. type Process struct { - Pid int `json:"pid"` - Ppid int `json:"ppid"` - Pgid int `json:"pgid"` - Name string `json:"name"` - Username string `json:"username"` - State string `json:"state"` - CmdLine string `json:"cmdline"` - Cwd string `json:"cwd"` + Pid int `json:"pid"` + Ppid int `json:"ppid"` + Pgid int `json:"pgid"` + Name string `json:"name"` + Username string `json:"username"` + State string `json:"state"` + Args []string `json:"args"` + CmdLine string `json:"cmdline"` + Cwd string `json:"cwd"` + Executable string `json:"executable"` Mem sigar.ProcMem Cpu sigar.ProcTime SampleTime time.Time @@ -98,15 +100,16 @@ func newProcess(pid int, cmdline string, env common.MapStr) (*Process, error) { } proc := Process{ - Pid: pid, - Ppid: state.Ppid, - Pgid: state.Pgid, - Name: state.Name, - Username: state.Username, - State: getProcState(byte(state.State)), - CmdLine: cmdline, - Cwd: exe.Cwd, - Env: env, + Pid: pid, + Ppid: state.Ppid, + Pgid: state.Pgid, + Name: state.Name, + Username: state.Username, + State: getProcState(byte(state.State)), + CmdLine: cmdline, + Cwd: exe.Cwd, + Executable: exe.Name, + Env: env, } return &proc, nil @@ -130,12 +133,16 @@ func (proc *Process) getDetails(envPredicate func(string) bool) error { return fmt.Errorf("error getting process cpu time for pid=%d: %v", proc.Pid, err) } - if proc.CmdLine == "" { + if len(proc.Args) == 0 { args := sigar.ProcArgs{} if err := args.Get(proc.Pid); err != nil && !sigar.IsNotImplemented(err) { return fmt.Errorf("error getting process arguments for pid=%d: %v", proc.Pid, err) } - proc.CmdLine = strings.Join(args.List, " ") + proc.Args = args.List + } + + if proc.CmdLine == "" && len(proc.Args) > 0 { + proc.CmdLine = strings.Join(proc.Args, " ") } if fd, err := getProcFDUsage(proc.Pid); err != nil { @@ -283,6 +290,10 @@ func (procStats *Stats) getProcessEvent(process *Process) common.MapStr { }, } + if len(process.Args) > 0 { + proc["args"] = process.Args + } + if process.CmdLine != "" { proc["cmdline"] = process.CmdLine } @@ -291,6 +302,10 @@ func (procStats *Stats) getProcessEvent(process *Process) common.MapStr { proc["cwd"] = process.Cwd } + if process.Executable != "" { + proc["exe"] = process.Executable + } + if len(process.Env) > 0 { proc["env"] = process.Env } diff --git a/metricbeat/_meta/fields.common.yml b/metricbeat/_meta/fields.common.yml index 78ba58faf8ee..bbdf7f039c06 100644 --- a/metricbeat/_meta/fields.common.yml +++ b/metricbeat/_meta/fields.common.yml @@ -15,6 +15,11 @@ description: > The name of the metricset that generated the event. + - name: process.pgid + type: long + description: > + Process group id. + - name: service.address description: > Connection address of the machine from which the metricset was collected. This diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 2172b0ab549d..468847d659bc 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -1975,6 +1975,16 @@ The name of the module that generated the event. The name of the metricset that generated the event. +-- + +*`process.pgid`*:: ++ +-- +type: long + +Process group id. + + -- *`service.address`*:: @@ -23348,10 +23358,9 @@ The number of outgoing packets that were dropped. This value is always 0 on Darw *`system.process.name`*:: + -- -type: keyword - -The process name. +type: alias +alias to: process.name -- @@ -23368,30 +23377,27 @@ The process state. For example: "running". *`system.process.pid`*:: + -- -type: long - -The process pid. +type: alias +alias to: process.pid -- *`system.process.ppid`*:: + -- -type: long - -The process parent pid. +type: alias +alias to: process.ppid -- *`system.process.pgid`*:: + -- -type: long - -The process group id. +type: alias +alias to: process.pgid -- @@ -23408,20 +23414,18 @@ The full command-line used to start the process, including the arguments separat *`system.process.username`*:: + -- -type: keyword - -The username of the user that created the process. If the username cannot be determined, the field will contain the user's numeric identifier (UID). On Windows, this field includes the user's domain and is formatted as `domain\username`. +type: alias +alias to: user.name -- *`system.process.cwd`*:: + -- -type: keyword - -The current working directory of the process. This field is only available on Linux. +type: alias +alias to: process.working_directory -- diff --git a/metricbeat/include/fields.go b/metricbeat/include/fields.go index 96d61794b2ae..81a5fb7eb933 100644 --- a/metricbeat/include/fields.go +++ b/metricbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMetricbeatMetaFieldsCommonYml returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/_meta/fields.common.yml. func AssetMetricbeatMetaFieldsCommonYml() string { - return "eJyUUktu2zAU3OsUg+yjA2hRoPAVcoEXchwS5Ucln6zq9gVpOqiN1kW04+ObD2f0ih88FpgcY04ToF4DF5xuZ8tqil/V57Tg2wQAp5xUfKoDhLNnsBVyER/kPRA+QUIAL0wKPVbWecJYW6bO8YokkQsitXhTqXPMdgvsl39Vbd+bY8chn6GOuGKgThQfTCyitP2ma88D2CwskOCljskq6paxdCcc/UeRq6yWjf8y285ftHrDPnF7J1ZZLt5wFmsLa32udsop0bQpxv6nrhjnE3EuOWJ33rgHO7u0IkOgUdoZb87XT9peGaIcSFnxTqyFtZW6O6bOY0XlngIhGwnheHhO62DwFv7cfKEdEV+H/CVxDX+G/J8nt4BtNlu8/WQzvoddjooecsaLzeZlnn4HAAD///yQ6RY=" + return "eJyUUkuu2zAM3PsUg7d/PoAXBYpcoIt3AT5pYhHVx5XopL59YccJ6qBNUe9EcmY45rzjO5cBrqRUcgeYWuSA0/3t2VzVybTkAV86ADiVbKK57SCcldE3yEU0ymckNENiBC/MBlsmtr7DPjZ0G8c7siQOSLSqrtH6VPwcuTX/qLp+H4EbDuUMC8QNAwtiGJlZxei3zqbd78B1hQESVdpemcTCsA8dhJOOVW6yVmf+bdn1/Z+r3rEvtj2ITbU4ttZPo/qDj1jy+Fr72w2KsZZ5gvon5sZ6UcdevK9s7TXXqeRMt1axzz8ciQuaiXMtCdegLjwZvcoakRjpjL7HR9D2oN3CgCQLcjF8ElNlW+NyDcwbjxeTIwVicRLj8mRn/Ss7b+WPWSv9frxbkT8lTfH38/3D8no6X9yc7vHt8TVeZWnYzlfw5ot767tfAQAA//+UqgK/" } diff --git a/metricbeat/include/fields/fields.go b/metricbeat/include/fields/fields.go index 73ad084e4f9c..f4607c4fce74 100644 --- a/metricbeat/include/fields/fields.go +++ b/metricbeat/include/fields/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLibbeatFieldsYml returns asset data. // This is the base64 encoded gzipped contents of ../libbeat/fields.yml. func AssetLibbeatFieldsYml() string { - return "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" + return "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" } diff --git a/metricbeat/module/system/fields.go b/metricbeat/module/system/fields.go index 3ab3285ce0bf..3fb8d395e3d2 100644 --- a/metricbeat/module/system/fields.go +++ b/metricbeat/module/system/fields.go @@ -32,5 +32,5 @@ func init() { // AssetSystem returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/system. func AssetSystem() string { - return "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" + return "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" } diff --git a/metricbeat/module/system/process/_meta/data.json b/metricbeat/module/system/process/_meta/data.json index dbf4f77633cb..78ece4aa1144 100644 --- a/metricbeat/module/system/process/_meta/data.json +++ b/metricbeat/module/system/process/_meta/data.json @@ -12,36 +12,209 @@ "metricset": { "name": "process" }, + "process": { + "args": [ + "/usr/bin/dockerd", + "-H", + "unix://" + ], + "executable": "/usr/bin/dockerd-ce", + "name": "dockerd", + "pgid": 2080, + "pid": 2080, + "ppid": 1, + "working_directory": "/" + }, "service": { "type": "system" }, "system": { "process": { - "cmdline": "/var/folders/k3/xlwbcsmj6dd7vjv2tg1d7c_40000gn/T/go-build019306533/b001/process.test -data", + "cgroup": { + "blkio": { + "id": "docker.service", + "path": "/system.slice/docker.service", + "total": { + "bytes": 844576104448, + "ios": 54869430 + } + }, + "cpu": { + "cfs": { + "period": { + "us": 100000 + }, + "quota": { + "us": 0 + }, + "shares": 1024 + }, + "id": "docker.service", + "path": "/system.slice/docker.service", + "rt": { + "period": { + "us": 0 + }, + "runtime": { + "us": 0 + } + }, + "stats": { + "periods": 0, + "throttled": { + "ns": 0, + "periods": 0 + } + } + }, + "cpuacct": { + "id": "docker.service", + "path": "/system.slice/docker.service", + "percpu": { + "1": 7058282754012, + "2": 7053634662537, + "3": 7069386293853, + "4": 7050055153087 + }, + "stats": { + "system": { + "ns": 7202920000000 + }, + "user": { + "ns": 19573240000000 + } + }, + "total": { + "ns": 28231358863489 + } + }, + "id": "docker.service", + "memory": { + "id": "docker.service", + "kmem": { + "failures": 0, + "limit": { + "bytes": 9223372036854771712 + }, + "usage": { + "bytes": 21139456, + "max": { + "bytes": 480030720 + } + } + }, + "kmem_tcp": { + "failures": 0, + "limit": { + "bytes": 9223372036854771712 + }, + "usage": { + "bytes": 0, + "max": { + "bytes": 0 + } + } + }, + "mem": { + "failures": 0, + "limit": { + "bytes": 9223372036854771712 + }, + "usage": { + "bytes": 3337703424, + "max": { + "bytes": 5245300736 + } + } + }, + "memsw": { + "failures": 0, + "limit": { + "bytes": 0 + }, + "usage": { + "bytes": 0, + "max": { + "bytes": 0 + } + } + }, + "path": "/system.slice/docker.service", + "stats": { + "active_anon": { + "bytes": 779677696 + }, + "active_file": { + "bytes": 1753378816 + }, + "cache": { + "bytes": 2127810560 + }, + "hierarchical_memory_limit": { + "bytes": 9223372036854771712 + }, + "hierarchical_memsw_limit": { + "bytes": 0 + }, + "inactive_anon": { + "bytes": 409075712 + }, + "inactive_file": { + "bytes": 374431744 + }, + "major_page_faults": 53164, + "mapped_file": { + "bytes": 7491584 + }, + "page_faults": 21923702, + "pages_in": 57261049, + "pages_out": 56521859, + "rss": { + "bytes": 1188753408 + }, + "rss_huge": { + "bytes": 56623104 + }, + "swap": { + "bytes": 0 + }, + "unevictable": { + "bytes": 0 + } + } + }, + "path": "/system.slice/docker.service" + }, + "cmdline": "/usr/bin/dockerd -H unix://", "cpu": { - "start_time": "2019-01-23T13:12:46.639Z", + "start_time": "2019-01-08T17:06:39.000Z", "total": { "norm": { - "pct": 0.0087 + "pct": 0.0049 }, - "pct": 0.0692, - "value": 239 + "pct": 0.0195, + "value": 27827810 } }, + "fd": { + "limit": { + "hard": 1048576, + "soft": 1048576 + }, + "open": 68 + }, "memory": { "rss": { - "bytes": 49573888, - "pct": 0.0029 + "bytes": 1187336192, + "pct": 0.0716 }, - "share": 0, - "size": 4515098624 + "share": 8253440, + "size": 4438523904 }, - "name": "process.test", - "pgid": 40547, - "pid": 40583, - "ppid": 40547, - "state": "running", - "username": "ruflin" + "state": "sleeping" } + }, + "user": { + "name": "root" } -} \ No newline at end of file +} diff --git a/metricbeat/module/system/process/_meta/fields.yml b/metricbeat/module/system/process/_meta/fields.yml index 9acb7b271abc..d89f43461c18 100644 --- a/metricbeat/module/system/process/_meta/fields.yml +++ b/metricbeat/module/system/process/_meta/fields.yml @@ -5,25 +5,25 @@ release: ga fields: - name: name - type: keyword - description: > - The process name. + type: alias + path: process.name + migration: true - name: state type: keyword description: > The process state. For example: "running". - name: pid - type: long - description: > - The process pid. + type: alias + path: process.pid + migration: true - name: ppid - type: long - description: > - The process parent pid. + type: alias + path: process.ppid + migration: true - name: pgid - type: long - description: > - The process group id. + type: alias + path: process.pgid + migration: true - name: cmdline type: keyword description: > @@ -31,17 +31,13 @@ arguments separated by space. ignore_above: 2048 - name: username - type: keyword - description: > - The username of the user that created the process. If the username - cannot be determined, the field will contain the user's - numeric identifier (UID). On Windows, this field includes the user's - domain and is formatted as `domain\username`. + type: alias + path: user.name + migration: true - name: cwd - type: keyword - description: > - The current working directory of the process. This field is only - available on Linux. + type: alias + path: process.working_directory + migration: true - name: env type: object object_type: keyword diff --git a/metricbeat/module/system/process/process.go b/metricbeat/module/system/process/process.go index 964e48fbb612..ec707e67bdac 100644 --- a/metricbeat/module/system/process/process.go +++ b/metricbeat/module/system/process/process.go @@ -25,6 +25,7 @@ import ( "github.com/pkg/errors" + "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/metric/system/process" "github.com/elastic/beats/metricbeat/mb" @@ -124,9 +125,42 @@ func (m *MetricSet) Fetch(r mb.ReporterV2) { } for _, proc := range procs { + rootFields := common.MapStr{ + "process": common.MapStr{ + "name": getAndRemove(proc, "name"), + "pid": getAndRemove(proc, "pid"), + "ppid": getAndRemove(proc, "ppid"), + "pgid": getAndRemove(proc, "pgid"), + }, + "user": common.MapStr{ + "name": getAndRemove(proc, "username"), + }, + } + + if cwd := getAndRemove(proc, "cwd"); cwd != nil { + rootFields.Put("process.working_directory", cwd) + } + + if exe := getAndRemove(proc, "exe"); exe != nil { + rootFields.Put("process.executable", exe) + } + + if args := getAndRemove(proc, "args"); args != nil { + rootFields.Put("process.args", args) + } + e := mb.Event{ + RootFields: rootFields, MetricSetFields: proc, } r.Event(e) } } + +func getAndRemove(from common.MapStr, field string) interface{} { + if v, ok := from[field]; ok { + delete(from, field) + return v + } + return nil +} diff --git a/metricbeat/tests/system/test_processors.py b/metricbeat/tests/system/test_processors.py index 0adabd129e69..92a73ddc2214 100644 --- a/metricbeat/tests/system/test_processors.py +++ b/metricbeat/tests/system/test_processors.py @@ -188,7 +188,7 @@ def test_multiple_actions(self): "period": "1s" }], processors=[{ - "include_fields": {"fields": ["system.process"]}, + "include_fields": {"fields": ["system.process", "process"]}, }, { "drop_fields": {"fields": ["system.process.memory"]}, }] @@ -207,17 +207,17 @@ def test_multiple_actions(self): for key in [ "system.process.cpu.start_time", "system.process.cpu.total.pct", - "system.process.name", - "system.process.pid", + "process.name", + "process.pid", ]: - assert key in output + assert key in output, "'%s' not found" % key for key in [ "system.process.memory.size", "system.process.memory.rss.bytes", "system.process.memory.rss.pct" ]: - assert key not in output + assert key not in output, "'%s' not expected but found" % key def test_contradictory_multiple_actions(self): """ diff --git a/metricbeat/tests/system/test_system.py b/metricbeat/tests/system/test_system.py index 0405900163ed..b439ca2c85e4 100644 --- a/metricbeat/tests/system/test_system.py +++ b/metricbeat/tests/system/test_system.py @@ -48,8 +48,7 @@ # for some kernel level processes. fd is also part of the system process, but # is not available on all OSes and requires root to read for all processes. # cgroup is only available on linux. -SYSTEM_PROCESS_FIELDS = ["cpu", "memory", "name", "pid", "ppid", "pgid", - "state", "username"] +SYSTEM_PROCESS_FIELDS = ["cpu", "memory", "state"] class Test(metricbeat.BaseTest): @@ -442,11 +441,11 @@ def test_process_metricbeat(self): output = self.read_output()[0] - assert re.match("(?i)metricbeat.test(.exe)?", output["system.process.name"]) + assert re.match("(?i)metricbeat.test(.exe)?", output["process.name"]) assert re.match("(?i).*metricbeat.test(.exe)? -systemTest", output["system.process.cmdline"]) assert isinstance(output["system.process.state"], six.string_types) assert isinstance(output["system.process.cpu.start_time"], six.string_types) - self.check_username(output["system.process.username"]) + self.check_username(output["user.name"]) @unittest.skipUnless(re.match("(?i)win|linux|darwin|freebsd", sys.platform), "os") def test_socket_summary(self): From 58753e7702f1c4e3578daaa0e939a72fe1b274a5 Mon Sep 17 00:00:00 2001 From: Pier-Hugues Pellerin Date: Wed, 30 Jan 2019 22:45:13 -0500 Subject: [PATCH 32/66] Disable test for CM that fails until the snapshot is ready (#10446) --- x-pack/libbeat/tests/system/test_management.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/x-pack/libbeat/tests/system/test_management.py b/x-pack/libbeat/tests/system/test_management.py index 21fea6101025..dc8d87698cd7 100644 --- a/x-pack/libbeat/tests/system/test_management.py +++ b/x-pack/libbeat/tests/system/test_management.py @@ -85,8 +85,9 @@ def test_enroll_bad_pw(self): new_content = open(config_path, 'r').read() assert config_content == new_content - @unittest.skipIf(not INTEGRATION_TESTS, - "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + # @unittest.skipIf(not INTEGRATION_TESTS, + # "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + @unittest.skip("Skipping because snapshot is not ready yet. see #10446") def test_fetch_configs(self): """ Config is retrieved from Central Management and updates are applied @@ -152,8 +153,9 @@ def test_fetch_configs(self): proc.check_kill_and_wait() - @unittest.skipIf(not INTEGRATION_TESTS, - "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + # @unittest.skipIf(not INTEGRATION_TESTS, + # "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + @unittest.skip("Skipping because snapshot is not ready yet. see #10446") def test_configs_cache(self): """ Config cache is used if Kibana is not available @@ -255,6 +257,7 @@ def create_and_assing_tag(self, blocks): url = self.get_kibana_url() + "/api/beats/agents_tags/assignments" r = requests.post(url, json=data, headers=headers, auth=(self.es_user, self.es_pass)) + assert r.status_code == 200 def get_elasticsearch_url(self): From ae83e461cbfbc0f0613fc92810ac18b4e4dd4038 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Jan 2019 20:48:51 -0800 Subject: [PATCH 33/66] Updating Metricbeat stack modules to ECS (#10350) This PR updates a few fields in the Elastic stack modules in Metricbeat, viz. `elasticsearch`, `logstash`, and `kibana` to their ECS names and types. Based on discussions happening in https://github.com/elastic/beats/pull/10218, but only scoped to Elastic stack modules. --- CHANGELOG.next.asciidoc | 3 ++ dev-tools/ecs-migration.yml | 44 ++++++++++++++++ metricbeat/_meta/fields.common.yml | 6 ++- metricbeat/docs/fields.asciidoc | 52 ++++++++++++++----- metricbeat/include/fields.go | 2 +- metricbeat/include/fields/fields.go | 2 +- metricbeat/module/elasticsearch/fields.go | 2 +- .../index_recovery/_meta/fields.yml | 8 +-- metricbeat/module/kibana/fields.go | 2 +- .../module/kibana/stats/_meta/data.json | 43 ++++++++------- .../module/kibana/stats/_meta/fields.yml | 12 +++-- metricbeat/module/kibana/stats/data.go | 30 +++++++++++ .../module/kibana/status/_meta/data.json | 30 ++++++----- .../module/kibana/status/_meta/fields.yml | 8 ++- metricbeat/module/kibana/status/data.go | 21 ++++++++ metricbeat/module/logstash/fields.go | 2 +- .../module/logstash/node/_meta/data.json | 27 ++++++---- .../module/logstash/node/_meta/fields.yml | 14 +++-- metricbeat/module/logstash/node/data.go | 42 +++++++++++++++ .../logstash/node_stats/_meta/data.json | 24 +++++---- metricbeat/module/logstash/node_stats/data.go | 34 ++++++++++++ 21 files changed, 323 insertions(+), 85 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 730268c675ac..2bb1564f9d41 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -101,6 +101,9 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - mongodb.metrics.replication.executor.network_interface - php_fpm.process.request_uri - php_fpm.process.script +- Update a few elasticsearch.* fields to map to ECS. {pull}10350[10350] +- Update a few logstash.* fields to map to ECS. {pull}10350[10350] +- Update a few kibana.* fields to map to ECS. {pull}10350[10350] *Packetbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index c50e1755cf95..406d7daafb0e 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -1573,6 +1573,50 @@ alias: true beat: metricbeat +### Kibana + +- from: kibana.stats.uuid + to: service.id + alias: true + beat: metricbeat + +- from: kibana.stats.transport_address + to: service.address + alias: true + beat: metricbeat + +- from: kibana.stats.version + to: service.version + alias: true + beat: metricbeat + +- from: kibana.status.uuid + to: service.id + alias: true + beat: metricbeat + +- from: kibana.status.version.number + to: service.version + alias: true + beat: metricbeat + +### Logstash + +- from: logstash.node.host + to: service.hostname + alias: true + beat: metricbeat + +- from: logstash.node.version + to: service.version + alias: true + beat: metricbeat + +- from: logstash.node.jvm.pid + to: process.pid + alias: true + beat: metricbeat + ### Zookeeper - from: zookeeper.mntr.version diff --git a/metricbeat/_meta/fields.common.yml b/metricbeat/_meta/fields.common.yml index bbdf7f039c06..b3154f976d8f 100644 --- a/metricbeat/_meta/fields.common.yml +++ b/metricbeat/_meta/fields.common.yml @@ -22,9 +22,13 @@ - name: service.address description: > - Connection address of the machine from which the metricset was collected. This + Address of the machine where the service is running. This field may not be present when the data was collected locally. + - name: service.hostname + description: > + Host name of the machine where the service is running. + - name: type required: true example: metricsets diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 468847d659bc..d88521ae5ec1 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -1990,7 +1990,15 @@ Process group id. *`service.address`*:: + -- -Connection address of the machine from which the metricset was collected. This field may not be present when the data was collected locally. +Address of the machine where the service is running. This field may not be present when the data was collected locally. + + +-- + +*`service.hostname`*:: ++ +-- +Host name of the machine where the service is running. -- @@ -7485,9 +7493,9 @@ Target node id. *`elasticsearch.index.recovery.target.host`*:: + -- -type: ip +type: keyword -Target node host address. +Target node host address (could be IP address or hostname). -- @@ -7515,9 +7523,9 @@ Source node id. *`elasticsearch.index.recovery.source.host`*:: + -- -type: ip +type: keyword -Source node host address. +Source node host address (could be IP address or hostname). -- @@ -11028,7 +11036,9 @@ Kibana stats and run-time metrics. *`kibana.stats.uuid`*:: + -- -type: keyword +type: alias + +alias to: service.id Kibana instance UUID @@ -11068,7 +11078,9 @@ Kibana instance hostname *`kibana.stats.transport_address`*:: + -- -type: keyword +type: alias + +alias to: service.address Kibana server's hostname and port @@ -11078,7 +11090,9 @@ Kibana server's hostname and port *`kibana.stats.version`*:: + -- -type: keyword +type: alias + +alias to: service.version Kibana version @@ -11259,7 +11273,9 @@ Kibana instance name. *`kibana.status.uuid`*:: + -- -type: keyword +type: alias + +alias to: service.id Kibana instance uuid. @@ -11269,7 +11285,9 @@ Kibana instance uuid. *`kibana.status.version.number`*:: + -- -type: keyword +type: alias + +alias to: service.version Kibana version number. @@ -13309,7 +13327,9 @@ node *`logstash.node.host`*:: + -- -type: keyword +type: alias + +alias to: host.hostname Host name @@ -13319,7 +13339,9 @@ Host name *`logstash.node.version`*:: + -- -type: keyword +type: alias + +alias to: service.version Logstash Version @@ -13346,9 +13368,11 @@ Version *`logstash.node.jvm.pid`*:: + -- -type: long +type: alias + +alias to: process.pid -Pid +Process ID -- diff --git a/metricbeat/include/fields.go b/metricbeat/include/fields.go index 81a5fb7eb933..a1115095c3c5 100644 --- a/metricbeat/include/fields.go +++ b/metricbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMetricbeatMetaFieldsCommonYml returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/_meta/fields.common.yml. func AssetMetricbeatMetaFieldsCommonYml() string { - return "eJyUUkuu2zAM3PsUg7d/PoAXBYpcoIt3AT5pYhHVx5XopL59YccJ6qBNUe9EcmY45rzjO5cBrqRUcgeYWuSA0/3t2VzVybTkAV86ADiVbKK57SCcldE3yEU0ymckNENiBC/MBlsmtr7DPjZ0G8c7siQOSLSqrtH6VPwcuTX/qLp+H4EbDuUMC8QNAwtiGJlZxei3zqbd78B1hQESVdpemcTCsA8dhJOOVW6yVmf+bdn1/Z+r3rEvtj2ITbU4ttZPo/qDj1jy+Fr72w2KsZZ5gvon5sZ6UcdevK9s7TXXqeRMt1axzz8ciQuaiXMtCdegLjwZvcoakRjpjL7HR9D2oN3CgCQLcjF8ElNlW+NyDcwbjxeTIwVicRLj8mRn/Ss7b+WPWSv9frxbkT8lTfH38/3D8no6X9yc7vHt8TVeZWnYzlfw5ot767tfAQAA//+UqgK/" + return "eJyUU0tu3DAM3fsUD9nHB/CiQJBNl13kAozEWET1cUV6pr59YVkT1EUzab0TxfcR+fyI77xNcCWlkgfAxCJPeL6dPaurspiUPOHLAADPJRtJ1g7Cm3D0CrqQRHqNDMmgGMEXzgbbFtZxQG+bhsbxiEyJJyS2Kk7ZxlT8Grld/lV1/14CNxzKGywwDgwskGHmzJWMfbtp2mMH7hYmUBTSXlnIwtSbTsJJ5kqHrNWVPzK7n//T6g17x+1JbKnFseq4zOJP74glz/e1vx1QzLWsC8T/waxcL+J4JO8rq97nejqa3p9BLkhmXANXbpXOBlHUNWfJ84iXIPrO0PaORBtyMbwylsq6J+MaODcKT0a40h6oGNntU4nFUYzbB85DUft8BV+L2nkH/2L+rLiPvBNW/rFKZd+TcRT5J6Ul/p6NT+a558IXt6bbvzHiKV5pU7RsFDz44h7G4VcAAAD//8J8HrM=" } diff --git a/metricbeat/include/fields/fields.go b/metricbeat/include/fields/fields.go index f4607c4fce74..49d53046bb62 100644 --- a/metricbeat/include/fields/fields.go +++ b/metricbeat/include/fields/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLibbeatFieldsYml returns asset data. // This is the base64 encoded gzipped contents of ../libbeat/fields.yml. func AssetLibbeatFieldsYml() string { - return "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" + return "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" } diff --git a/metricbeat/module/elasticsearch/fields.go b/metricbeat/module/elasticsearch/fields.go index 3d771737ef18..90b49186eb60 100644 --- a/metricbeat/module/elasticsearch/fields.go +++ b/metricbeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" } diff --git a/metricbeat/module/elasticsearch/index_recovery/_meta/fields.yml b/metricbeat/module/elasticsearch/index_recovery/_meta/fields.yml index e41b967c780d..e61a341e272a 100644 --- a/metricbeat/module/elasticsearch/index_recovery/_meta/fields.yml +++ b/metricbeat/module/elasticsearch/index_recovery/_meta/fields.yml @@ -26,9 +26,9 @@ description: > Target node id. - name: target.host - type: ip + type: keyword description: > - Target node host address. + Target node host address (could be IP address or hostname). - name: target.name type: keyword description: > @@ -39,9 +39,9 @@ description: > Source node id. - name: source.host - type: ip + type: keyword description: > - Source node host address. + Source node host address (could be IP address or hostname). - name: source.name type: keyword description: > diff --git a/metricbeat/module/kibana/fields.go b/metricbeat/module/kibana/fields.go index dece8615f471..5fa5228de54e 100644 --- a/metricbeat/module/kibana/fields.go +++ b/metricbeat/module/kibana/fields.go @@ -32,5 +32,5 @@ func init() { // AssetKibana returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/kibana. func AssetKibana() string { - return "eJzEmN9u6zYMxu/7FERuzs2pHyAXA4ZtwIahxXC2YhfDEDAWE2uVRU+k02ZPP8h/UseRG3eLcXxRtHbyfT+RImn1Hp7puIZnu0WPdwBq1dEaVj83N1Z3AIYkD7ZSy34N39wBALQPoWRTO7oDkIKDbnL2O7tfww6dxLuBHKHQGvZRWEjV+r2s4Y+ViFt9hlWhWq3+vAPYWXJG1o32PXgsaUAULz1WUSdwXXV3ElTnOkMtUVQ53U3JTUq2V7fgRgfQGwi1v1dbEpSkweaSDT5+vu7+GrMN+eramrMHPeIzHV84jJ+9AzqAtV4UfU7w9PTT90nb+HM52wv13tZ6Q6+3833EkoB3nf8nAeuVgkeXMOoRChbNll1+tJgMgQb0UsWiQWMCidycQygcKHySE0ezbaNlEuhAQSz7m2OkdE9V6bGSgjVpumV2hGOgK6a/F6QFBdCCeoBtbZ0BK4Anv/ZeGklR69sno98UMR2ETouUUc+Qs8/rEMg3HdVTHsXTTI79/oPFUpdbCrFccmfJKwwsoERDoNyEr90/GTyyEmiBCtvAL0JBIEcPQt5AWTu1lSMQG39FT1zLmaIyBPq7JtHBhxtlQBGKzVSBfU6fm+2pBR0b+UD3tRCQKG6dlYLMUDZLxq0KnE9V0rjVz4jUL61c3+BHz1Pd/A2FDjF7jrnaGHJ4zMrx93swydGR2ewc47gOrhIC/BB9IPpA4wPWQ2mds0I5ezM27fFKKjkcs4JwHJP34jWDp49ZVJ4I3FToBr2RFV22PSpdfvedjd9IcyhR1zD15asLAPgturcLQOc4RyUTt3G3u2KE0+qnWS5kvhr9j5E7EsD2OB9Z7D+0cba0+tXAH/A1A3YGpMKcGqLz+D+yoewv6Rf1eUYiqviCliq9K8uZgfvUaMc2OgjyZOX1RF0rvFWHAvjS9daca68f6lRvUMZK11qXCNTbvOkWL+0weaFAA2saz9VRO1iArC10f8E3kTmp2AttYtpvlb8vnShE0Y8NmjcyPOyX2eLfHijgnk5LbyivDJjBiMHXZbAe8NWWdTkTa/K97sMnwF8bhS4d/+uwt/ypK/1+tOwhM6qnfbsjQNaW2lInjK6S0wht+jOOW9q5LP55+xR06o3ZRArSJf6fG8hDK3e5KWFG45h1zIAbVOx3rcvAcPpdHi6n5TRS+iV1FlM/OGOurOjoHzj9NRVCmD0+4Vr8ZvJCYmANp+f7EYUZ43RJ0jO4fwMAAP//HHg2MQ==" + return "eJzMmM1u4zYQx+9+ioEve0n0AD4UKNoCLYoExbZBD0VhjMWxxYYiVc7Iifv0BSnJkWXKllsLuzoEiT7+85vhfJB5hFc6rOBVb9DiAkC0GFrB8ud4Y7kAUMS515VoZ1fwzQIAoHkIpVO1oQUAF87LOnd2q3cr2KLhcNeTIWRawS4IM4lou+MV/LFkNssHWBYi1fLPBcBWk1G8itqPYLGkHlG45FAFHe/qqr2ToDrV6WuxoPDxbkpuVLK5WoejDqBV4Gv7KLokKEm8zjnrvX7qd3cN2fp8da3VyYMOEY1GHjypUIoVMPm9zik7+7DUO4+ND+JrGjy94GPPT21Z0OYELy8/fZ8kDj+TxK90eHN+CHWj2TP1zqy2it7vZ/cZSwK3be1/YtBWyFs0CUMdQuFYsnndDyZGQyAeLVeh3lApTzxMj6mJk/76HtkTLJD/xEc/YsUE5KRDe/KsnZ3sxjSItOppCNLvXArBsaFYrLhwkoTeOGcIh7JXsH8vSAryIAV1LmxqbRRoBjzaa+6lkQSlTifDPZIyLCehkSJlqGPInc1r78nGYWApD+JpJuPs7sZircsN+VCuudFkBXomoERFIC6Gr8m/DJ6dEEiBAhvv3pg8Q44WmKyCsjaiK0PAOvyKllzNJ4riwNPfNbH0Xo7KgMwU5oCAszk9xPSWgg5R3tNjzQTEghujuSDVl82Scau8y8cqeTilJkTql0aum02D56lB9IFC+7B6xrlqrcjgISuH33dgnKMhtd4ah8M6uEoI8EOwA8EORDugLZTaGM2UO6uGRju8kkrnD1lBOIzJpXhN4OliFpRHAjcWul5vdoIm2xyEzr+9kPhR2vkSZQVjH191AOC3YL1xAI1xOQqpkMZtdoUIp9WP2xAm9cXofwzcgQA2h+nIrP+htdGlli8G/oTvGTijgCvMKRKdxv/ZKcr+4s6phwkLUYW9Zar0rrgzAfclaoc22gvyaOV1RG0rvFeHAvjc9tbc1VZu6lQfUEpz21rnCNTHvGmd52aYvJGnnmkaztVBO5iBrCl0e8Y3snJcOcu0Dst+r/X73IpCEL1t0HyQ4X43T4p/uyePOzq6HimvDJjeiMH3ebCe8F2XdTkRa3Rfd/Ph9deo0C7H/zqnzn/qS++PvtrzcQBLI7dni6yp0nkON20LyOY65MS8yVyoJmOy8Of9V79Vj8ZGVj/dXf5z73pq5M7rASb0rEknHLhDs/iusdIzOH6MgPNBPY6U3h9PYupmdlgrzTL4t1d3jYUQJk9uuBa/ibyQmJX9wX05ojBhks9JegL3bwAAAP//xlKE7A==" } diff --git a/metricbeat/module/kibana/stats/_meta/data.json b/metricbeat/module/kibana/stats/_meta/data.json index 7097d36ba424..bafeb99255bf 100644 --- a/metricbeat/module/kibana/stats/_meta/data.json +++ b/metricbeat/module/kibana/stats/_meta/data.json @@ -1,41 +1,46 @@ { "@timestamp": "2017-10-12T08:05:34.853Z", - "beat": { + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, "elasticsearch": { "cluster": { - "id": "njqU4EQaTROIDlWPeUMQyw" + "id": "hyK0oDhoThywCtJd2DV8Bg" } }, + "event": { + "dataset": "kibana.stats", + "duration": 115000, + "module": "kibana" + }, "kibana": { "stats": { - "concurrent_connections": 6, + "concurrent_connections": 1, "host": { "name": "localhost" }, - "index": "Shaunaks-MBP-2", - "name": "Shaunaks-MBP-2", + "index": "Shaunaks-MBP-2.attlocal.net", + "name": "Shaunaks-MBP-2.attlocal.net", "process": { "event_loop_delay": { - "ms": 0.23628300055861473 + "ms": 0.45250000059604645 }, "memory": { "heap": { "size_limit": { - "bytes": 1501560832 + "bytes": 1526909922 }, "total": { - "bytes": 215003136 + "bytes": 307593216 }, "used": { - "bytes": 185343400 + "bytes": 226887112 } } }, "uptime": { - "ms": 1343714 + "ms": 124098 } }, "request": { @@ -49,22 +54,20 @@ } }, "snapshot": false, - "status": "green", - "transport_address": "localhost:5601", - "uuid": "5b2de169-2785-441b-ae8c-186a1936b17d", - "version": "7.0.0-alpha1" + "status": "green" } }, "metricset": { - "host": "127.0.0.1:5601", - "module": "kibana", - "name": "stats", - "rtt": 115 + "name": "stats" }, "process": { - "pid": 20173 + "pid": 93807 }, "service": { - "name": "kibana" + "address": "127.0.0.1:5601", + "id": "5b2de169-2785-441b-ae8c-186a1936b17d", + "name": "kibana", + "type": "kibana", + "version": "7.0.0" } } \ No newline at end of file diff --git a/metricbeat/module/kibana/stats/_meta/fields.yml b/metricbeat/module/kibana/stats/_meta/fields.yml index fd83bd73314e..55d55e9d76ba 100644 --- a/metricbeat/module/kibana/stats/_meta/fields.yml +++ b/metricbeat/module/kibana/stats/_meta/fields.yml @@ -5,7 +5,9 @@ release: ga fields: - name: uuid - type: keyword + type: alias + path: service.id + migration: true description: > Kibana instance UUID - name: name @@ -21,13 +23,17 @@ description: > Kibana instance hostname - name: transport_address - type: keyword + type: alias + path: service.address + migration: true description: > Kibana server's hostname and port - name: version - type: keyword + type: alias description: > Kibana version + path: service.version + migration: true - name: snapshot type: boolean description: > diff --git a/metricbeat/module/kibana/stats/data.go b/metricbeat/module/kibana/stats/data.go index 8f494e8596c9..09ea29a17594 100644 --- a/metricbeat/module/kibana/stats/data.go +++ b/metricbeat/module/kibana/stats/data.go @@ -126,6 +126,36 @@ func eventMapping(r mb.ReporterV2, content []byte) error { } event.RootFields.Put("process.pid", int(pid)) + // Set service ID + uuid, err := dataFields.GetValue("uuid") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("kibana.uuid", elastic.Kibana) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.id", uuid) + dataFields.Delete("uuid") + + // Set service version + version, err := dataFields.GetValue("version") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("kibana.version", elastic.Kibana) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.version", version) + dataFields.Delete("version") + + // Set service address + serviceAddress, err := dataFields.GetValue("transport_address") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("kibana.transport_address", elastic.Kibana) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.address", serviceAddress) + dataFields.Delete("transport_address") + event.MetricSetFields = dataFields r.Event(event) diff --git a/metricbeat/module/kibana/status/_meta/data.json b/metricbeat/module/kibana/status/_meta/data.json index 6e0d80892391..107ec83ab2c9 100644 --- a/metricbeat/module/kibana/status/_meta/data.json +++ b/metricbeat/module/kibana/status/_meta/data.json @@ -1,9 +1,14 @@ { - "@timestamp": "2016-05-23T08:05:34.853Z", - "beat": { + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { "hostname": "host.example.com", "name": "host.example.com" }, + "event": { + "dataset": "kibana.status", + "duration": 115000, + "module": "kibana" + }, "kibana": { "status": { "metrics": { @@ -13,23 +18,22 @@ "total": 0 } }, - "name": "kibana", + "name": "Shaunaks-MBP-2", "status": { "overall": { - "state": "red" + "state": "green" } - }, - "uuid": "c94305f7-ad4e-4e0c-8aba-5c3e869dce59", - "version": { - "number": "6.0.0-alpha1" } } }, "metricset": { - "host": "kibana:5601", - "module": "kibana", - "name": "status", - "rtt": 115 + "name": "status" }, - "type": "metricsets" + "service": { + "address": "127.0.0.1:5601", + "id": "5b2de169-2785-441b-ae8c-186a1936b17d", + "name": "kibana", + "type": "kibana", + "version": "7.0.0" + } } \ No newline at end of file diff --git a/metricbeat/module/kibana/status/_meta/fields.yml b/metricbeat/module/kibana/status/_meta/fields.yml index e80113fb9472..8f0993e7cdf0 100644 --- a/metricbeat/module/kibana/status/_meta/fields.yml +++ b/metricbeat/module/kibana/status/_meta/fields.yml @@ -9,13 +9,17 @@ description: > Kibana instance name. - name: uuid - type: keyword + type: alias + path: service.id + migration: true description: > Kibana instance uuid. - name: version.number - type: keyword + type: alias description: > Kibana version number. + path: service.version + migration: true - name: status.overall.state type: keyword description: > diff --git a/metricbeat/module/kibana/status/data.go b/metricbeat/module/kibana/status/data.go index 2c498488f2b2..9fe0773420d7 100644 --- a/metricbeat/module/kibana/status/data.go +++ b/metricbeat/module/kibana/status/data.go @@ -25,6 +25,7 @@ import ( "github.com/elastic/beats/libbeat/common" s "github.com/elastic/beats/libbeat/common/schema" c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/helper/elastic" "github.com/elastic/beats/metricbeat/mb" "github.com/elastic/beats/metricbeat/module/kibana" ) @@ -71,6 +72,26 @@ func eventMapping(r mb.ReporterV2, content []byte) error { return event.Error } + // Set service ID + uuid, err := dataFields.GetValue("uuid") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("uuid", elastic.Kibana) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.id", uuid) + dataFields.Delete("uuid") + + // Set service version + version, err := dataFields.GetValue("version.number") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("version.number", elastic.Kibana) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.version", version) + dataFields.Delete("version") + event.MetricSetFields = dataFields r.Event(event) diff --git a/metricbeat/module/logstash/fields.go b/metricbeat/module/logstash/fields.go index f5ef7f46e786..8bf468ea3718 100644 --- a/metricbeat/module/logstash/fields.go +++ b/metricbeat/module/logstash/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLogstash returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/logstash. func AssetLogstash() string { - return "eJy0k8Fum0AQhu88xS/OtR+AQ2+t6qpVcvIliiIEY7zxsoN2Bkd++wgMFpAldmxnjjvi+7/ZHRbY0SGB5UI0lW0EqFFLCeJ/3VEcATlJ5k2lhl2CnxEA9G2UnNeWIsCTpVQoQZFGgJCqcYUkeIpFbPwD8Va1ip8jYGPI5pK0nAVcWtLIoCk9VA3Jc111JwGHMWlIc5zT6TBEmyUea/L9eLS+puFDgS2Ljhq9xI4Ob+zzSe8Tlab+sGgLDmbtyYthd7+409uuA+Q+9XVfBhOnt3xB3t/1f6zchieN0P2en/vc7Bf4NBUafRhemRD4GGzZFdelPg6ow11eiqYqt270S0tBSepNJsubFpz25EZG81YXzP6rpWE65ZzEUMTML8D177ByGZfGFd2YyLh2Sn45a8H19He/h8ZDrQV/RWNjrJKn71jN3x36g8t7AAAA//+4rIER" + return "eJyslM2OmzAQgO88xYhzwwNw6KmtmqpV95TLarWyYALeGA/yDKzy9isCZMEx+d055OCJP3/jGbOCHe5TMFSwKC4jANFiMIX477AURwA5cuZ0LZpsCt8jAIAxDRXljcEIwKFBxZhCoSIARhFtC07hOWY28TeIS5E6fokAthpNzumBswKrKpwZdCH7uiM5auphJeAwJ01plnI8LoZoi8Q+vP3z0sbwD58KlMQyS4wSymjFXqZWUvZbku6nI3j/qHThVC8qrvGzZwrp4jexwAl0NG3RsSZ7oyyja3WGSXj3Q7rHydoE2KP1W1sFjf0eX3Hen80/WNsteYlQdy/f26fJDvfv5PJA/oJPF6HSp4fXOgRebhocG1c7ypA5CRPON+5K+af+CFj/CL7LhEUJP/o6Xw8UqFCczjh56LFii1b8K7t7nn4eaOBXuSQxFdHL42TIFve1Y20zqrQthjIho8YKumTRghr/0/UVGv8bKegWja02gg6XB/1+l18D+sTlIwAA//9sYbU7" } diff --git a/metricbeat/module/logstash/node/_meta/data.json b/metricbeat/module/logstash/node/_meta/data.json index 3059f1d20e24..a9e3bbb153a3 100644 --- a/metricbeat/module/logstash/node/_meta/data.json +++ b/metricbeat/module/logstash/node/_meta/data.json @@ -4,23 +4,30 @@ "hostname": "host.example.com", "name": "host.example.com" }, + "event": { + "dataset": "logstash.node", + "duration": 115000, + "module": "logstash" + }, "logstash": { "node": { - "host": "Shaunaks-MBP-2", "jvm": { - "pid": 3674, - "version": "1.8.0_171" - }, - "version": "7.0.0-alpha1" + "version": "1.8.0_191" + } } }, "metricset": { - "host": "127.0.0.1:9600", - "module": "logstash", - "name": "node", - "rtt": 115 + "name": "node" + }, + "process": { + "pid": 93559 }, "service": { - "name": "logstash" + "address": "127.0.0.1:9600", + "hostname": "Shaunaks-MBP-2.attlocal.net", + "id": "7565df20-c3aa-4261-81d5-3b0ab8d15c16", + "name": "logstash", + "type": "logstash", + "version": "7.0.0" } } \ No newline at end of file diff --git a/metricbeat/module/logstash/node/_meta/fields.yml b/metricbeat/module/logstash/node/_meta/fields.yml index 065c7b54ae43..658825edb0be 100644 --- a/metricbeat/module/logstash/node/_meta/fields.yml +++ b/metricbeat/module/logstash/node/_meta/fields.yml @@ -5,11 +5,15 @@ release: ga fields: - name: host - type: keyword + type: alias + path: host.hostname + migration: true description: > Host name - name: version - type: keyword + type: alias + path: service.version + migration: true description: > Logstash Version - name: jvm @@ -22,6 +26,8 @@ description: > Version - name: pid - type: long + type: alias + path: process.pid + migration: true description: > - Pid + Process ID diff --git a/metricbeat/module/logstash/node/data.go b/metricbeat/module/logstash/node/data.go index e3493baa8269..25cac855012e 100644 --- a/metricbeat/module/logstash/node/data.go +++ b/metricbeat/module/logstash/node/data.go @@ -25,12 +25,14 @@ import ( "github.com/elastic/beats/libbeat/common" s "github.com/elastic/beats/libbeat/common/schema" c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/helper/elastic" "github.com/elastic/beats/metricbeat/mb" "github.com/elastic/beats/metricbeat/module/logstash" ) var ( schema = s.Schema{ + "id": c.Str("id"), "host": c.Str("host"), "version": c.Str("version"), "jvm": c.Dict("jvm", s.Schema{ @@ -60,6 +62,46 @@ func eventMapping(r mb.ReporterV2, content []byte) error { return event.Error } + // Set service ID + serviceID, err := fields.GetValue("id") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("id", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.id", serviceID) + fields.Delete("id") + + // Set service hostname + host, err := fields.GetValue("host") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("host", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.hostname", host) + fields.Delete("host") + + // Set service version + version, err := fields.GetValue("version") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("version", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.version", version) + fields.Delete("version") + + // Set PID + pid, err := fields.GetValue("jvm.pid") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("jvm.pid", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("process.pid", pid) + fields.Delete("jvm.pid") + event.MetricSetFields = fields r.Event(event) diff --git a/metricbeat/module/logstash/node_stats/_meta/data.json b/metricbeat/module/logstash/node_stats/_meta/data.json index d36b978c5792..d6e05f6a6ecb 100644 --- a/metricbeat/module/logstash/node_stats/_meta/data.json +++ b/metricbeat/module/logstash/node_stats/_meta/data.json @@ -4,25 +4,31 @@ "hostname": "host.example.com", "name": "host.example.com" }, + "event": { + "dataset": "logstash.node.stats", + "duration": 115000, + "module": "logstash" + }, "logstash": { "node": { "stats": { "events": { - "filtered": 30750, - "in": 1, - "out": 30750 + "filtered": 0, + "in": 0, + "out": 0 } } } }, "metricset": { - "host": "127.0.0.1:9600", - "module": "logstash", - "name": "node_stats", - "namespace": "logstash.node.stats", - "rtt": 115 + "name": "node_stats" }, "service": { - "name": "logstash" + "address": "127.0.0.1:9600", + "hostname": "Shaunaks-MBP-2.attlocal.net", + "id": "7565df20-c3aa-4261-81d5-3b0ab8d15c16", + "name": "logstash", + "type": "logstash", + "version": "7.0.0" } } \ No newline at end of file diff --git a/metricbeat/module/logstash/node_stats/data.go b/metricbeat/module/logstash/node_stats/data.go index 0603c35ab49f..c8896df8482f 100644 --- a/metricbeat/module/logstash/node_stats/data.go +++ b/metricbeat/module/logstash/node_stats/data.go @@ -25,12 +25,16 @@ import ( "github.com/elastic/beats/libbeat/common" s "github.com/elastic/beats/libbeat/common/schema" c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/helper/elastic" "github.com/elastic/beats/metricbeat/mb" "github.com/elastic/beats/metricbeat/module/logstash" ) var ( schema = s.Schema{ + "id": c.Str("id"), + "host": c.Str("host"), + "version": c.Str("version"), "events": c.Dict("events", s.Schema{ "in": c.Int("in"), "out": c.Int("out"), @@ -59,6 +63,36 @@ func eventMapping(r mb.ReporterV2, content []byte) error { return event.Error } + // Set service ID + serviceID, err := fields.GetValue("id") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("id", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.id", serviceID) + fields.Delete("id") + + // Set service hostname + host, err := fields.GetValue("host") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("host", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.hostname", host) + fields.Delete("host") + + // Set service version + version, err := fields.GetValue("version") + if err != nil { + event.Error = elastic.MakeErrorForMissingField("version", elastic.Logstash) + r.Event(event) + return event.Error + } + event.RootFields.Put("service.version", version) + fields.Delete("version") + event.MetricSetFields = fields r.Event(event) From 33b789cbfb95a852d0d75b7c8316da3be801d55f Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 30 Jan 2019 21:42:32 -0800 Subject: [PATCH 34/66] [Filebeat] Changes to text fields in elasticsearch module (#10414) This PR is an offshoot of conversations and decisions made in https://github.com/elastic/beats/pull/10372 w.r.t `text` fields, but scoped to the `elasticsearch` module. --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 12 ++++++------ filebeat/module/elasticsearch/fields.go | 2 +- .../elasticsearch/slowlog/_meta/fields.yml | 12 ++++++------ .../elasticsearch/slowlog/ingest/pipeline.json | 12 +++++++++++- .../module/elasticsearch/slowlog/test/test.log | 2 +- .../slowlog/test/test.log-expected.json | 17 ++++++++++------- 7 files changed, 36 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 2bb1564f9d41..e8b3f0325bcc 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -69,6 +69,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Ingesting Elasticsearch audit logs is only supported with Elasticsearch 6.5.0 and above {pull}10352[10352] - Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] - Several text fields in the Logstash module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10417[10417] +- Several text fields in the Elasticsearch module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10414[10414] *Heartbeat* diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 88a55e93bef2..7cbc3127d9dc 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4907,7 +4907,7 @@ Logger name *`elasticsearch.slowlog.took`*:: + -- -type: text +type: keyword example: 300ms @@ -4929,11 +4929,11 @@ Types *`elasticsearch.slowlog.stats`*:: + -- -type: text +type: keyword -example: +example: group1 -Statistics +Stats groups -- @@ -4951,7 +4951,7 @@ Search type *`elasticsearch.slowlog.source_query`*:: + -- -type: text +type: keyword example: {"query":{"match_all":{"boost":1.0}}} @@ -4962,7 +4962,7 @@ Slow query *`elasticsearch.slowlog.extra_source`*:: + -- -type: text +type: keyword example: diff --git a/filebeat/module/elasticsearch/fields.go b/filebeat/module/elasticsearch/fields.go index 68ab7c2e03e1..9ec2b7b1d93c 100644 --- a/filebeat/module/elasticsearch/fields.go +++ b/filebeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" } diff --git a/filebeat/module/elasticsearch/slowlog/_meta/fields.yml b/filebeat/module/elasticsearch/slowlog/_meta/fields.yml index 77a3f9e0ffd0..85eaa48dbede 100644 --- a/filebeat/module/elasticsearch/slowlog/_meta/fields.yml +++ b/filebeat/module/elasticsearch/slowlog/_meta/fields.yml @@ -10,15 +10,15 @@ - name: took description: "Time it took to execute the query" example: "300ms" - type: text + type: keyword - name: types description: "Types" example: "" type: keyword - name: stats - description: "Statistics" - example: "" - type: text + description: "Stats groups" + example: "group1" + type: keyword - name: search_type description: "Search type" example: "QUERY_THEN_FETCH" @@ -26,11 +26,11 @@ - name: source_query description: "Slow query" example: "{\"query\":{\"match_all\":{\"boost\":1.0}}}" - type: text + type: keyword - name: extra_source description: "Extra source information" example: "" - type: text + type: keyword - name: total_hits description: "Total hits" example: 42 diff --git a/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json b/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json index fbfec49e08c5..1981c3711f71 100644 --- a/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json +++ b/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json @@ -19,6 +19,14 @@ ] } }, + { + "split": { + "if": "ctx.elasticsearch.slowlog?.stats != ''", + "field": "elasticsearch.slowlog.stats", + "separator": ",", + "ignore_missing": true + } + }, { "date": { "field": "elasticsearch.slowlog.timestamp", @@ -32,7 +40,9 @@ }, { "remove": { - "field": "elasticsearch.slowlog.timestamp" + "field": [ + "elasticsearch.slowlog.timestamp" + ] } }, diff --git a/filebeat/module/elasticsearch/slowlog/test/test.log b/filebeat/module/elasticsearch/slowlog/test/test.log index 8f072b061597..3d6d1ebae79c 100644 --- a/filebeat/module/elasticsearch/slowlog/test/test.log +++ b/filebeat/module/elasticsearch/slowlog/test/test.log @@ -1,4 +1,4 @@ -[2018-06-29T10:06:14,933][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[4.5ms], took_millis[4], total_hits[19435], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"query":{"match_all":{"boost":1.0}}}], +[2018-06-29T10:06:14,933][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[4.5ms], took_millis[4], total_hits[19435], types[], stats[group1,group2], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"query":{"match_all":{"boost":1.0}}}], [2018-06-29T10:06:14,943][INFO ][index.search.slowlog.fetch] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[10.8ms], took_millis[10], total_hits[19435], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"query":{"match_all":{"boost":1.0}}}], [2018-06-29T09:01:01,821][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[124.3ms], took_millis[124], total_hits[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"size":500,"query":{"match_none":{"boost":1.0}},"version":true,"_source":{"includes":[],"excludes":[]},"stored_fields":"*","docvalue_fields":["@timestamp","ceph.monitor_health.last_updated","docker.container.created","docker.healthcheck.event.end_date","docker.healthcheck.event.start_date","docker.image.created","kubernetes.container.start_time","kubernetes.event.metadata.timestamp.created","kubernetes.node.start_time","kubernetes.pod.start_time","kubernetes.system.start_time","mongodb.status.background_flushing.last_finished","mongodb.status.local_time","php_fpm.pool.start_time","postgresql.activity.backend_start","postgresql.activity.query_start","postgresql.activity.state_change","postgresql.activity.transaction_start","postgresql.bgwriter.stats_reset","postgresql.database.stats_reset","system.process.cpu.start_time"],"script_fields":{},"sort":[{"@timestamp":{"order":"desc","unmapped_type":"boolean"}}],"aggregations":{"2":{"date_histogram":{"field":"@timestamp","time_zone":"Europe/Berlin","interval":"30s","offset":0,"order":{"_key":"asc"},"keyed":false,"min_doc_count":1}}},"highlight":{"pre_tags":["@kibana-highlighted-field@"],"post_tags":["@/kibana-highlighted-field@"],"fragment_size":2147483647,"fields":{"*":{}}}}], [2018-06-29T09:01:01,827][INFO ][index.search.slowlog.fetch] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[7.2ms], took_millis[7], total_hits[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{"size":500,"query":{"match_none":{"boost":1.0}},"version":true,"_source":{"includes":[],"excludes":[]},"stored_fields":"*","docvalue_fields":["@timestamp","ceph.monitor_health.last_updated","docker.container.created","docker.healthcheck.event.end_date","docker.healthcheck.event.start_date","docker.image.created","kubernetes.container.start_time","kubernetes.event.metadata.timestamp.created","kubernetes.node.start_time","kubernetes.pod.start_time","kubernetes.system.start_time","mongodb.status.background_flushing.last_finished","mongodb.status.local_time","php_fpm.pool.start_time","postgresql.activity.backend_start","postgresql.activity.query_start","postgresql.activity.state_change","postgresql.activity.transaction_start","postgresql.bgwriter.stats_reset","postgresql.database.stats_reset","system.process.cpu.start_time"],"script_fields":{},"sort":[{"@timestamp":{"order":"desc","unmapped_type":"boolean"}}],"aggregations":{"2":{"date_histogram":{"field":"@timestamp","time_zone":"Europe/Berlin","interval":"30s","offset":0,"order":{"_key":"asc"},"keyed":false,"min_doc_count":1}}},"highlight":{"pre_tags":["@kibana-highlighted-field@"],"post_tags":["@/kibana-highlighted-field@"],"fragment_size":2147483647,"fields":{"*":{}}}}], diff --git a/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json b/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json index 4cda0f2d5140..92559d982bfd 100644 --- a/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json +++ b/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json @@ -8,7 +8,10 @@ "elasticsearch.slowlog.logger": "index.search.slowlog.query", "elasticsearch.slowlog.search_type": "QUERY_THEN_FETCH", "elasticsearch.slowlog.source_query": "{\"query\":{\"match_all\":{\"boost\":1.0}}}", - "elasticsearch.slowlog.stats": "", + "elasticsearch.slowlog.stats": [ + "group1", + "group2" + ], "elasticsearch.slowlog.took": "4.5ms", "elasticsearch.slowlog.total_hits": 19435, "elasticsearch.slowlog.total_shards": 1, @@ -20,7 +23,7 @@ "input.type": "log", "log.level": "INFO", "log.offset": 0, - "message": "[2018-06-29T10:06:14,933][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[4.5ms], took_millis[4], total_hits[19435], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{\"query\":{\"match_all\":{\"boost\":1.0}}}],", + "message": "[2018-06-29T10:06:14,933][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[4.5ms], took_millis[4], total_hits[19435], types[], stats[group1,group2], search_type[QUERY_THEN_FETCH], total_shards[1], source[{\"query\":{\"match_all\":{\"boost\":1.0}}}],", "service.type": "elasticsearch" }, { @@ -43,7 +46,7 @@ "fileset.name": "slowlog", "input.type": "log", "log.level": "INFO", - "log.offset": 265, + "log.offset": 278, "message": "[2018-06-29T10:06:14,943][INFO ][index.search.slowlog.fetch] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[10.8ms], took_millis[10], total_hits[19435], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{\"query\":{\"match_all\":{\"boost\":1.0}}}],", "service.type": "elasticsearch" }, @@ -67,7 +70,7 @@ "fileset.name": "slowlog", "input.type": "log", "log.level": "INFO", - "log.offset": 532, + "log.offset": 545, "message": "[2018-06-29T09:01:01,821][INFO ][index.search.slowlog.query] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[124.3ms], took_millis[124], total_hits[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{\"size\":500,\"query\":{\"match_none\":{\"boost\":1.0}},\"version\":true,\"_source\":{\"includes\":[],\"excludes\":[]},\"stored_fields\":\"*\",\"docvalue_fields\":[\"@timestamp\",\"ceph.monitor_health.last_updated\",\"docker.container.created\",\"docker.healthcheck.event.end_date\",\"docker.healthcheck.event.start_date\",\"docker.image.created\",\"kubernetes.container.start_time\",\"kubernetes.event.metadata.timestamp.created\",\"kubernetes.node.start_time\",\"kubernetes.pod.start_time\",\"kubernetes.system.start_time\",\"mongodb.status.background_flushing.last_finished\",\"mongodb.status.local_time\",\"php_fpm.pool.start_time\",\"postgresql.activity.backend_start\",\"postgresql.activity.query_start\",\"postgresql.activity.state_change\",\"postgresql.activity.transaction_start\",\"postgresql.bgwriter.stats_reset\",\"postgresql.database.stats_reset\",\"system.process.cpu.start_time\"],\"script_fields\":{},\"sort\":[{\"@timestamp\":{\"order\":\"desc\",\"unmapped_type\":\"boolean\"}}],\"aggregations\":{\"2\":{\"date_histogram\":{\"field\":\"@timestamp\",\"time_zone\":\"Europe/Berlin\",\"interval\":\"30s\",\"offset\":0,\"order\":{\"_key\":\"asc\"},\"keyed\":false,\"min_doc_count\":1}}},\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fragment_size\":2147483647,\"fields\":{\"*\":{}}}}],", "service.type": "elasticsearch" }, @@ -91,7 +94,7 @@ "fileset.name": "slowlog", "input.type": "log", "log.level": "INFO", - "log.offset": 1999, + "log.offset": 2012, "message": "[2018-06-29T09:01:01,827][INFO ][index.search.slowlog.fetch] [v_VJhjV] [metricbeat-6.3.0-2018.06.26][0] took[7.2ms], took_millis[7], total_hits[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{\"size\":500,\"query\":{\"match_none\":{\"boost\":1.0}},\"version\":true,\"_source\":{\"includes\":[],\"excludes\":[]},\"stored_fields\":\"*\",\"docvalue_fields\":[\"@timestamp\",\"ceph.monitor_health.last_updated\",\"docker.container.created\",\"docker.healthcheck.event.end_date\",\"docker.healthcheck.event.start_date\",\"docker.image.created\",\"kubernetes.container.start_time\",\"kubernetes.event.metadata.timestamp.created\",\"kubernetes.node.start_time\",\"kubernetes.pod.start_time\",\"kubernetes.system.start_time\",\"mongodb.status.background_flushing.last_finished\",\"mongodb.status.local_time\",\"php_fpm.pool.start_time\",\"postgresql.activity.backend_start\",\"postgresql.activity.query_start\",\"postgresql.activity.state_change\",\"postgresql.activity.transaction_start\",\"postgresql.bgwriter.stats_reset\",\"postgresql.database.stats_reset\",\"system.process.cpu.start_time\"],\"script_fields\":{},\"sort\":[{\"@timestamp\":{\"order\":\"desc\",\"unmapped_type\":\"boolean\"}}],\"aggregations\":{\"2\":{\"date_histogram\":{\"field\":\"@timestamp\",\"time_zone\":\"Europe/Berlin\",\"interval\":\"30s\",\"offset\":0,\"order\":{\"_key\":\"asc\"},\"keyed\":false,\"min_doc_count\":1}}},\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fragment_size\":2147483647,\"fields\":{\"*\":{}}}}],", "service.type": "elasticsearch" }, @@ -113,7 +116,7 @@ "fileset.name": "slowlog", "input.type": "log", "log.level": "INFO", - "log.offset": 3462, + "log.offset": 3475, "message": "[2018-07-04T13:48:07,452][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.4ms], took_millis[1], type[doc], id[KUyMZWQBk9jw4gtg2y5-], routing[], source[{\"@timestamp\":\"2018-07-04T13:47:50.747Z\",\"system\":{\"process\":{\"ppid\":34526,\"state\":\"running\",\"cpu\":{\"total\":{\"value\":734879,\"pct\":0.0173,\"norm\":{\"pct\":0.0043}},\"start_time\":\"2018-07-04T06:56:34.863Z\"},\"pgid\":34526,\"cmdline\":\"/Applications/Firefox.app/Contents/MacOS/plugin-container.app/Contents/MacOS/plugin-container -childID 1 -isForBrowser -prefsLen 22119 -schedulerPrefs 0001,2 -greomni /Applications/Firefox.app/Contents/Resources/omni.ja -appomni /Applications/Firefox.app/Contents/Resources/browser/omni.ja -appdir /Applications/Firefox.app/Contents/Resources/browser -profile /Users/rado/Library/Application Support/Firefox/Profiles/pt6eoq1j.default-1484133908360 34526 gecko-crash-server-pipe.34526 org.mozilla.machname.231926932 tab\",\"name\":\"plugin-containe\",\"memory\":{\"size\":7489249280,\"rss\":{\"bytes\":567619584,\"pct\":0.033},\"share\":0},\"pid\":34528,\"username\":\"rado\"}},\"metricset\":{\"name\":\"process\",\"module\":\"system\",\"rtt\":43856},\"beat\":{\"hostname\":\"Rados-MacBook-Pro.local\",\"version\":\"6.3.0\",\"name\":\"Rados-MacBook-Pro.local\"},\"host\":{\"name\":\"Rados-MacBook-Pro.local\"}}]", "service.type": "elasticsearch" }, @@ -138,7 +141,7 @@ "multiline" ], "log.level": "INFO", - "log.offset": 4753, + "log.offset": 4766, "message": "[2018-07-04T21:51:30,411][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.7ms], took_millis[1], type[doc], id[s01HZ2QBk9jw4gtgaFtn], routing[], source[\n{\n \"@timestamp\":\"2018-07-04T21:27:30.730Z\",\n \"metricset\":{\n \"name\":\"network\",\n \"module\":\"system\",\n \"rtt\":7264},\n \"system\":{\n \"network\":{\n \"name\":\"lo0\",\n \"in\":{\n \"errors\":0,\n \"dropped\":0,\n \"bytes\":77666873,\n \"packets\":244595},\n \"out\":{\n \"packets\":244595,\n \"bytes\":77666873,\n \"errors\":0,\n \"dropped\":0\n }\n }\n },\n \"beat\":{\n \"name\":\"Rados-MacBook-Pro.local\",\n \"hostname\":\"Rados-MacBook-Pro.local\",\n \"version\":\"6.3.0\"\n },\n \"host\":{\n \"name\":\"Rados-MacBook-Pro.local\"\n }\n }]", "service.type": "elasticsearch" } From b054f080c871dadade8e1a6a72a7966f551d9ed4 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Thu, 31 Jan 2019 10:45:20 +0100 Subject: [PATCH 35/66] Clean up Kibana, remove Elasticsearch loading and 5.x version (#10451) In 5.x the dashboards were loaded through Elasticsearch and not Kibana. For 6.x and 7.x dashboards are loaded through the Kibana API. The old code is removed in this PR. Also some code is cleaned up around talking to 5.x Kibana APIs. --- libbeat/cmd/instance/beat.go | 7 +- libbeat/dashboards/dashboards.go | 87 +------ libbeat/dashboards/es_loader.go | 335 --------------------------- libbeat/dashboards/es_loader_test.go | 99 -------- libbeat/kibana/client.go | 22 +- 5 files changed, 11 insertions(+), 539 deletions(-) delete mode 100644 libbeat/dashboards/es_loader.go delete mode 100644 libbeat/dashboards/es_loader_test.go diff --git a/libbeat/cmd/instance/beat.go b/libbeat/cmd/instance/beat.go index 2ab590dc900f..d02c12e6185e 100644 --- a/libbeat/cmd/instance/beat.go +++ b/libbeat/cmd/instance/beat.go @@ -705,13 +705,8 @@ func (b *Beat) loadDashboards(ctx context.Context, force bool) error { } if b.Config.Dashboards.Enabled() { - var esConfig *common.Config - - if b.Config.Output.Name() == "elasticsearch" { - esConfig = b.Config.Output.Config() - } err := dashboards.ImportDashboards(ctx, b.Info.Beat, b.Info.Hostname, paths.Resolve(paths.Home, ""), - b.Config.Kibana, esConfig, b.Config.Dashboards, nil) + b.Config.Kibana, b.Config.Dashboards, nil) if err != nil { return errw.Wrap(err, "Error importing Kibana dashboards") } diff --git a/libbeat/dashboards/dashboards.go b/libbeat/dashboards/dashboards.go index 833c7a1ebe89..79d664c3db86 100644 --- a/libbeat/dashboards/dashboards.go +++ b/libbeat/dashboards/dashboards.go @@ -28,23 +28,11 @@ import ( "github.com/elastic/beats/libbeat/common" ) -type importMethod uint8 - -// check import route -const ( - importNone importMethod = iota - importViaKibana - importViaES -) - // ImportDashboards tries to import the kibana dashboards. -// If the Elastic Stack is at version 6.0+, the dashboards should be installed -// via the kibana dashboard loader plugin. For older versions of the Elastic Stack -// we write the dashboards directly into the .kibana index. func ImportDashboards( ctx context.Context, beatName, hostname, homePath string, - kibanaConfig, esConfig, dashboardsConfig *common.Config, + kibanaConfig, dashboardsConfig *common.Config, msgOutputter MessageOutputter, ) error { if dashboardsConfig == nil || !dashboardsConfig.Enabled() { @@ -65,61 +53,12 @@ func ImportDashboards( kibanaConfig = common.NewConfig() } - if esConfig.Enabled() { - username, _ := esConfig.String("username", -1) - password, _ := esConfig.String("password", -1) - - if !kibanaConfig.HasField("username") && username != "" { - kibanaConfig.SetString("username", -1, username) - } - if !kibanaConfig.HasField("password") && password != "" { - kibanaConfig.SetString("password", -1, password) - } - } - - var esLoader *ElasticsearchLoader - - importVia := importNone - useKibana := importViaKibana if !kibanaConfig.Enabled() { - useKibana = importNone + return errors.New("kibana configuration missing for loading dashboards.") } - requiresKibana := dashConfig.AlwaysKibana || !esConfig.Enabled() - if requiresKibana { - importVia = useKibana - } else { - // Check import route via elasticsearch version. If Elasticsearch major - // version is >6, we assume Kibana also being at versions >6.0. In this - // case dashboards will be imported using the new kibana dashboard loader - // plugin. - // XXX(urso): Why do we test the Elasticsearch version? If kibana is - // configured, why not test the kibana version and plugin - // availability first? - esLoader, err = NewElasticsearchLoader(esConfig, &dashConfig, msgOutputter) - if err != nil { - return fmt.Errorf("fail to create the Elasticsearch loader: %v", err) - } - defer esLoader.Close() - - esLoader.statusMsg("Elasticsearch URL %v", esLoader.client.Connection.URL) - - if esLoader.version.Major < 6 { - importVia = importViaES - } else { - importVia = useKibana - } - } + return setupAndImportDashboardsViaKibana(ctx, hostname, kibanaConfig, &dashConfig, msgOutputter) - // Try to import dashboards. - switch importVia { - case importViaES: - return ImportDashboardsViaElasticsearch(esLoader) - case importViaKibana: - return setupAndImportDashboardsViaKibana(ctx, hostname, kibanaConfig, &dashConfig, msgOutputter) - default: - return errors.New("Elasticsearch or Kibana configuration missing for loading dashboards.") - } } func setupAndImportDashboardsViaKibana(ctx context.Context, hostname string, kibanaConfig *common.Config, @@ -159,26 +98,6 @@ func ImportDashboardsViaKibana(kibanaLoader *KibanaLoader) error { return nil } -func ImportDashboardsViaElasticsearch(esLoader *ElasticsearchLoader) error { - - if err := esLoader.CreateKibanaIndex(); err != nil { - return fmt.Errorf("fail to create the kibana index: %v", err) - } - - version, _ := common.NewVersion("5.0.0") - - importer, err := NewImporter(*version, esLoader.config, esLoader) - if err != nil { - return fmt.Errorf("fail to create an Elasticsearch importer for loading the dashboards: %v", err) - } - - if err := importer.Import(); err != nil { - return fmt.Errorf("fail to import the dashboards in Elasticsearch: %v", err) - } - - return nil -} - func isKibanaAPIavailable(version common.Version) bool { return (version.Major == 5 && version.Minor >= 6) || version.Major >= 6 } diff --git a/libbeat/dashboards/es_loader.go b/libbeat/dashboards/es_loader.go deleted file mode 100644 index 4787bb3faf59..000000000000 --- a/libbeat/dashboards/es_loader.go +++ /dev/null @@ -1,335 +0,0 @@ -// Licensed to Elasticsearch B.V. under one or more contributor -// license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright -// ownership. Elasticsearch B.V. licenses this file to you under -// the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package dashboards - -import ( - "encoding/json" - "errors" - "fmt" - "io/ioutil" - "path" - "path/filepath" - "strings" - - "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/logp" - "github.com/elastic/beats/libbeat/outputs/elasticsearch" -) - -type ElasticsearchLoader struct { - client *elasticsearch.Client - config *Config - version common.Version - msgOutputter MessageOutputter -} - -func NewElasticsearchLoader(cfg *common.Config, dashboardsConfig *Config, msgOutputter MessageOutputter) (*ElasticsearchLoader, error) { - if cfg == nil || !cfg.Enabled() { - return nil, fmt.Errorf("Elasticsearch output is not configured/enabled") - } - - esClient, err := elasticsearch.NewConnectedClient(cfg) - if err != nil { - return nil, fmt.Errorf("Error creating Elasticsearch client: %v", err) - } - - version := esClient.GetVersion() - if !version.IsValid() { - return nil, errors.New("No valid Elasticsearch version available") - } - - loader := ElasticsearchLoader{ - client: esClient, - config: dashboardsConfig, - version: version, - msgOutputter: msgOutputter, - } - - loader.statusMsg("Initialize the Elasticsearch %s loader", version.String()) - - return &loader, nil -} - -// CreateKibanaIndex creates the kibana index if it doesn't exists and sets -// some index properties which are needed as a workaround for: -// https://github.com/elastic/beats-dashboards/issues/94 -func (loader ElasticsearchLoader) CreateKibanaIndex() error { - status, err := loader.client.IndexExists(loader.config.KibanaIndex) - - if err != nil { - if status != 404 { - return err - } - - _, _, err = loader.client.CreateIndex(loader.config.KibanaIndex, nil) - if err != nil { - return fmt.Errorf("Failed to create index: %v", err) - } - - _, _, err = loader.client.CreateIndex(loader.config.KibanaIndex+"/_mapping/search", - common.MapStr{ - "search": common.MapStr{ - "properties": common.MapStr{ - "hits": common.MapStr{ - "type": "integer", - }, - "version": common.MapStr{ - "type": "integer", - }, - }, - }, - }) - if err != nil { - return fmt.Errorf("Failed to set the mapping: %v", err) - } - } - - return nil -} - -func (loader ElasticsearchLoader) ImportIndex(file string) error { - reader, err := ioutil.ReadFile(file) - if err != nil { - return err - } - var indexContent common.MapStr - err = json.Unmarshal(reader, &indexContent) - if err != nil { - return fmt.Errorf("fail to unmarshal index content: %v", err) - } - - indexName, ok := indexContent["title"].(string) - if !ok { - return fmt.Errorf("Missing title in the index-pattern file at %s", file) - } - - if loader.config.Index != "" { - // change index pattern name - loader.statusMsg("Change index in index-pattern %s", indexName) - indexContent["title"] = loader.config.Index - } - - path := "/" + loader.config.KibanaIndex + "/index-pattern/" + indexName - - if _, err = loader.client.LoadJSON(path, indexContent); err != nil { - return err - } - - return nil -} - -func (loader ElasticsearchLoader) importJSONFile(fileType string, file string) error { - path := "/" + loader.config.KibanaIndex + "/" + fileType - - reader, err := ioutil.ReadFile(file) - if err != nil { - return fmt.Errorf("Failed to read %s. Error: %s", file, err) - } - var jsonContent map[string]interface{} - err = json.Unmarshal(reader, &jsonContent) - if err != nil { - return fmt.Errorf("fail to unmarshal json file: %v", err) - } - - fileBase := strings.TrimSuffix(filepath.Base(file), filepath.Ext(file)) - - body, err := loader.client.LoadJSON(path+"/"+fileBase, jsonContent) - if err != nil { - return fmt.Errorf("Failed to load %s under %s/%s: %s. Response body: %s", file, path, fileBase, err, body) - } - - return nil -} - -func (loader ElasticsearchLoader) importPanelsFromDashboard(file string) (err error) { - // directory with the dashboards - dir := filepath.Dir(file) - - // main directory with dashboard, search, visualizations directories - mainDir := filepath.Dir(dir) - - reader, err := ioutil.ReadFile(file) - if err != nil { - return - } - type record struct { - Title string `json:"title"` - PanelsJSON string `json:"panelsJSON"` - } - type panel struct { - ID string `json:"id"` - Type string `json:"type"` - } - - var jsonContent record - err = json.Unmarshal(reader, &jsonContent) - if err != nil { - return fmt.Errorf("fail to unmarshal json content: %v", err) - } - - var widgets []panel - err = json.Unmarshal([]byte(jsonContent.PanelsJSON), &widgets) - if err != nil { - return fmt.Errorf("fail to unmarshal panels content: %v", err) - } - - for _, widget := range widgets { - if widget.Type == "visualization" { - err = loader.importVisualization(path.Join(mainDir, "visualization", widget.ID+".json")) - if err != nil { - return err - } - } else if widget.Type == "search" { - err = loader.importSearch(path.Join(mainDir, "search", widget.ID+".json")) - if err != nil { - return err - } - } else { - loader.statusMsg("Widgets: %v", widgets) - return fmt.Errorf("Unknown panel type %s in %s", widget.Type, file) - } - } - return -} - -func (loader ElasticsearchLoader) importVisualization(file string) error { - loader.statusMsg("Import visualization %s", file) - reader, err := ioutil.ReadFile(file) - if err != nil { - return err - } - var vizContent common.MapStr - err = json.Unmarshal(reader, &vizContent) - if err != nil { - return fmt.Errorf("fail to unmarshal visualization content %s: %v", file, err) - } - - if loader.config.Index != "" { - if savedObject, ok := vizContent["kibanaSavedObjectMeta"].(map[string]interface{}); ok { - vizContent["kibanaSavedObjectMeta"] = ReplaceIndexInSavedObject(loader.config.Index, savedObject) - } - - if visState, ok := vizContent["visState"].(string); ok { - vizContent["visState"] = ReplaceIndexInVisState(loader.config.Index, visState) - } - } - - vizName := strings.TrimSuffix(filepath.Base(file), filepath.Ext(file)) - path := "/" + loader.config.KibanaIndex + "/visualization/" + vizName - if _, err := loader.client.LoadJSON(path, vizContent); err != nil { - return err - } - - return loader.importSearchFromVisualization(file) -} - -func (loader ElasticsearchLoader) importSearch(file string) error { - reader, err := ioutil.ReadFile(file) - if err != nil { - return err - } - searchName := strings.TrimSuffix(filepath.Base(file), filepath.Ext(file)) - - var searchContent common.MapStr - err = json.Unmarshal(reader, &searchContent) - if err != nil { - return fmt.Errorf("fail to unmarshal search content %s: %v", searchName, err) - } - - if loader.config.Index != "" { - - // change index pattern name - if savedObject, ok := searchContent["kibanaSavedObjectMeta"].(map[string]interface{}); ok { - - searchContent["kibanaSavedObjectMeta"] = ReplaceIndexInSavedObject(loader.config.Index, savedObject) - - } - } - - path := "/" + loader.config.KibanaIndex + "/search/" + searchName - loader.statusMsg("Import search %s", file) - - if _, err = loader.client.LoadJSON(path, searchContent); err != nil { - return err - } - - return nil -} - -func (loader ElasticsearchLoader) importSearchFromVisualization(file string) error { - type record struct { - Title string `json:"title"` - SavedSearchID string `json:"savedSearchId"` - } - - reader, err := ioutil.ReadFile(file) - if err != nil { - return nil - } - - var jsonContent record - err = json.Unmarshal(reader, &jsonContent) - if err != nil { - return fmt.Errorf("fail to unmarshal the search content: %v", err) - } - - id := jsonContent.SavedSearchID - if len(id) == 0 { - // no search used - return nil - } - - // directory with the visualizations - dir := filepath.Dir(file) - - // main directory - mainDir := filepath.Dir(dir) - - searchFile := path.Join(mainDir, "search", id+".json") - - if searchFile != "" { - // visualization depends on search - if err := loader.importSearch(searchFile); err != nil { - return err - } - } - return nil -} - -func (loader ElasticsearchLoader) ImportDashboard(file string) error { - /* load dashboard */ - err := loader.importJSONFile("dashboard", file) - if err != nil { - return err - } - - /* load the visualizations and searches that depend on the dashboard */ - return loader.importPanelsFromDashboard(file) -} - -func (loader ElasticsearchLoader) Close() error { - return loader.client.Close() -} - -func (loader ElasticsearchLoader) statusMsg(msg string, a ...interface{}) { - if loader.msgOutputter != nil { - loader.msgOutputter(msg, a...) - } else { - logp.Debug("dashboards", msg, a...) - } -} diff --git a/libbeat/dashboards/es_loader_test.go b/libbeat/dashboards/es_loader_test.go deleted file mode 100644 index 29f5684da90b..000000000000 --- a/libbeat/dashboards/es_loader_test.go +++ /dev/null @@ -1,99 +0,0 @@ -// Licensed to Elasticsearch B.V. under one or more contributor -// license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright -// ownership. Elasticsearch B.V. licenses this file to you under -// the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// +build integration - -package dashboards - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/logp" - "github.com/elastic/beats/libbeat/outputs/elasticsearch/estest" -) - -func TestImporter(t *testing.T) { - logp.TestingSetup() - - dashboardsConfig := Config{ - KibanaIndex: ".kibana-test", - File: "testdata/testbeat-dashboards.zip", - Beat: "testbeat", - } - - client := estest.GetTestingElasticsearch(t) - major := client.GetVersion().Major - - if major == 6 || major == 7 { - t.Skip("Skipping tests for Elasticsearch 6.x releases") - } - - loader := ElasticsearchLoader{ - client: client, - config: &dashboardsConfig, - } - - err := loader.CreateKibanaIndex() - - assert.NoError(t, err) - - version, _ := common.NewVersion("5.0.0") - - imp, err := NewImporter(*version, &dashboardsConfig, loader) - assert.NoError(t, err) - - err = imp.Import() - assert.NoError(t, err) - - status, _, _ := client.Request("GET", "/.kibana-test/dashboard/1e4389f0-e871-11e6-911d-3f8ed6f72700", "", nil, nil) - assert.Equal(t, 200, status) -} - -func TestImporterEmptyBeat(t *testing.T) { - logp.TestingSetup() - - dashboardsConfig := Config{ - KibanaIndex: ".kibana-test-nobeat", - File: "testdata/testbeat-dashboards.zip", - Beat: "", - } - - client := estest.GetTestingElasticsearch(t) - major := client.GetVersion().Major - if major == 6 || major == 7 { - t.Skip("Skipping tests for Elasticsearch 6.x releases") - } - - loader := ElasticsearchLoader{ - client: client, - config: &dashboardsConfig, - } - - version, _ := common.NewVersion("5.0.0") - - imp, err := NewImporter(*version, &dashboardsConfig, loader) - assert.NoError(t, err) - - err = imp.Import() - assert.NoError(t, err) - - status, _, _ := client.Request("GET", "/.kibana-test-nobeat/dashboard/1e4389f0-e871-11e6-911d-3f8ed6f72700", "", nil, nil) - assert.Equal(t, 200, status) -} diff --git a/libbeat/kibana/client.go b/libbeat/kibana/client.go index d759ad432fbc..e28bfb8d4faa 100644 --- a/libbeat/kibana/client.go +++ b/libbeat/kibana/client.go @@ -226,23 +226,15 @@ func (client *Client) readVersion() error { var kibanaVersion kibanaVersionResponse err = json.Unmarshal(result, &kibanaVersion) if err != nil { - var kibanaVersion5x kibanaVersionResponse5x - - // The response returned by /api/status is different in Kibana 5.x than in Kibana 6.x - err5x := json.Unmarshal(result, &kibanaVersion5x) - if err5x != nil { + return fmt.Errorf("fail to unmarshal the response from GET %s/api/status. Response: %s. Kibana status api returns: %v", + client.Connection.URL, truncateString(result), err) + } - return fmt.Errorf("fail to unmarshal the response from GET %s/api/status. Response: %s. Kibana 5.x status api returns: %v. Kibana 6.x status api returns: %v", - client.Connection.URL, truncateString(result), err5x, err) - } - versionString = kibanaVersion5x.Version - } else { - versionString = kibanaVersion.Version.Number + versionString = kibanaVersion.Version.Number - if kibanaVersion.Version.Snapshot { - // needed for the tests - versionString += "-SNAPSHOT" - } + if kibanaVersion.Version.Snapshot { + // needed for the tests + versionString += "-SNAPSHOT" } version, err := common.NewVersion(versionString) From 97eb4605a69d26426245d7131a4927ee20a986fc Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Thu, 31 Jan 2019 02:24:19 -0800 Subject: [PATCH 36/66] Allow testing of specific filesets (#10443) Currently, Filebeat system tests can be filtered to run only on specific modules by specifying the `TESTING_FILEBEAT_MODULES` environment variable. This PR teaches the system tests to also understand an optional `TESTING_FILEBEAT_FILESETS` environment variable, that can be used to run system tests only on specific filesets. --- filebeat/tests/system/test_modules.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/filebeat/tests/system/test_modules.py b/filebeat/tests/system/test_modules.py index 0804d8ad28b1..9dae6b0a3390 100644 --- a/filebeat/tests/system/test_modules.py +++ b/filebeat/tests/system/test_modules.py @@ -27,6 +27,8 @@ def load_fileset_test_cases(): else: modules = os.listdir(modules_dir) + filesets_env = os.getenv("TESTING_FILEBEAT_FILESETS") + test_cases = [] for module in modules: @@ -35,7 +37,12 @@ def load_fileset_test_cases(): if not os.path.isdir(path): continue - for fileset in os.listdir(path): + if filesets_env: + filesets = filesets_env.split(",") + else: + filesets = os.listdir(path) + + for fileset in filesets: if not os.path.isdir(os.path.join(path, fileset)): continue From f58fe34ac895ce6965d6d9e7e35c82c6fe06172e Mon Sep 17 00:00:00 2001 From: Harris Lummis Date: Thu, 31 Jan 2019 05:02:16 -0800 Subject: [PATCH 37/66] Update newbeat.asciidoc to Reflect New generate.py (#9052) Documentation currently shows output from previous version of `generate.py`. Update to output from newest version to avoid confusion. --- docs/devguide/newbeat.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/devguide/newbeat.asciidoc b/docs/devguide/newbeat.asciidoc index c722d7297ceb..02dc6a022a23 100644 --- a/docs/devguide/newbeat.asciidoc +++ b/docs/devguide/newbeat.asciidoc @@ -148,10 +148,10 @@ For the `github_name`, enter your github id. The `beat` and `beat_path` are set [source,shell] --------- -project_name [Examplebeat]: Countbeat -github_name [your-github-name]: {username} -beat_path [github.com/{github id}]: -full_name [Firstname Lastname]: {Full Name} +Beat Name [Examplebeat]: Countbeat +Your Github Name [your-github-name]: {username} +Beat Path [github.com/{github id}/{beat name}]: +Firstname Lastname: {Full Name} --------- The Beat generator creates a directory called `countbeat` inside of your project folder (e.g. {project folder}/github.com/{github id}/countbeat). From 22f530a245d91424825539e0b36368632933cd13 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 31 Jan 2019 14:04:08 +0100 Subject: [PATCH 38/66] Add mapping for munin and options to override service type and name (#10322) --- CHANGELOG.next.asciidoc | 3 +- metricbeat/docs/fields.asciidoc | 20 ++- metricbeat/docs/modules/munin.asciidoc | 10 +- metricbeat/metricbeat.reference.yml | 10 +- .../module/munin/_meta/config.reference.yml | 10 +- metricbeat/module/munin/_meta/config.yml | 1 - metricbeat/module/munin/_meta/fields.yml | 12 +- metricbeat/module/munin/fields.go | 2 +- metricbeat/module/munin/munin.go | 98 ++++++++------ metricbeat/module/munin/munin_test.go | 123 +++++++++++++----- .../module/munin/node/_meta/docs.asciidoc | 47 ++++--- metricbeat/module/munin/node/config.go | 28 ++++ metricbeat/module/munin/node/node.go | 64 +++++---- metricbeat/modules.d/munin.yml.disabled | 1 - metricbeat/tests/system/test_munin.py | 10 +- x-pack/metricbeat/metricbeat.reference.yml | 10 +- 16 files changed, 318 insertions(+), 131 deletions(-) create mode 100644 metricbeat/module/munin/node/config.go diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index e8b3f0325bcc..7170790036a9 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -89,10 +89,11 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Refactor Prometheus metric mappings {pull}9948[9948] - Removed Prometheus stats metricset in favor of just using Prometheus collector {pull}9948[9948] - Adjust Redis.info metricset fields to ECS. {pull}10319[10319] -- Change type of field docker.container.ip_addresses to `ip` instead of `keyword. {pull}10364[10364] +- Change type of field docker.container.ip_addresses to `ip` instead of `keyword`. {pull}10364[10364] - Rename http.request.body field to http.request.body.content. {pull}10315[10315] - Adjust php_fpm.process metricset fields to ECS. {pull}10366[10366] - Adjust mongodb.status metricset to to ECS. {pull}10368[10368] +- Refactor munin module to collect an event per plugin and to have more strict field mappings. `namespace` option has been removed, and will be replaced by `service.name`. {pull}10322[10322] - Change the following fields from type text to keyword: {pull}10318[10318] - ceph.osd_df.name - ceph.osd_tree.name diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index d88521ae5ec1..a699a282fd50 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -17373,11 +17373,25 @@ Munin node metrics exporter -[float] -== munin fields +*`munin.metrics.*`*:: ++ +-- +type: object + +Metrics exposed by a plugin of a munin node agent. + + +-- -munin contains metrics exposed by a munin node agent +*`munin.plugin.name`*:: ++ +-- +type: keyword +Name of the plugin collecting these metrics. + + +-- [[exported-fields-mysql]] diff --git a/metricbeat/docs/modules/munin.asciidoc b/metricbeat/docs/modules/munin.asciidoc index a30361167bb8..c0b5bb8460a4 100644 --- a/metricbeat/docs/modules/munin.asciidoc +++ b/metricbeat/docs/modules/munin.asciidoc @@ -33,7 +33,15 @@ metricbeat.modules: enabled: true period: 10s hosts: ["localhost:4949"] - node.namespace: node + + # List of plugins to collect metrics from, by default it collects from + # all the available ones. + #munin.plugins: [] + + # If set to true, it sanitizes fields names in concordance with munin + # implementation (all characters that are not alphanumeric, or underscore + # are replaced by underscores). + #munin.sanitize: false ---- [float] diff --git a/metricbeat/metricbeat.reference.yml b/metricbeat/metricbeat.reference.yml index 94314930f7f9..4850233d174c 100644 --- a/metricbeat/metricbeat.reference.yml +++ b/metricbeat/metricbeat.reference.yml @@ -507,7 +507,15 @@ metricbeat.modules: enabled: true period: 10s hosts: ["localhost:4949"] - node.namespace: node + + # List of plugins to collect metrics from, by default it collects from + # all the available ones. + #munin.plugins: [] + + # If set to true, it sanitizes fields names in concordance with munin + # implementation (all characters that are not alphanumeric, or underscore + # are replaced by underscores). + #munin.sanitize: false #-------------------------------- MySQL Module ------------------------------- - module: mysql diff --git a/metricbeat/module/munin/_meta/config.reference.yml b/metricbeat/module/munin/_meta/config.reference.yml index cdef11f36702..3fe0cb3271ac 100644 --- a/metricbeat/module/munin/_meta/config.reference.yml +++ b/metricbeat/module/munin/_meta/config.reference.yml @@ -3,4 +3,12 @@ enabled: true period: 10s hosts: ["localhost:4949"] - node.namespace: node + + # List of plugins to collect metrics from, by default it collects from + # all the available ones. + #munin.plugins: [] + + # If set to true, it sanitizes fields names in concordance with munin + # implementation (all characters that are not alphanumeric, or underscore + # are replaced by underscores). + #munin.sanitize: false diff --git a/metricbeat/module/munin/_meta/config.yml b/metricbeat/module/munin/_meta/config.yml index c8267c385dd6..e14277e55d25 100644 --- a/metricbeat/module/munin/_meta/config.yml +++ b/metricbeat/module/munin/_meta/config.yml @@ -3,4 +3,3 @@ # - node period: 10s hosts: ["localhost:4949"] - node.namespace: node diff --git a/metricbeat/module/munin/_meta/fields.yml b/metricbeat/module/munin/_meta/fields.yml index 83e41a59fa94..d36f9fd50bd8 100644 --- a/metricbeat/module/munin/_meta/fields.yml +++ b/metricbeat/module/munin/_meta/fields.yml @@ -4,8 +4,16 @@ Munin node metrics exporter release: beta fields: + - name: munin.metrics.* + type: object + object_type: double + object_type_mapping_type: '*' + description: > + Metrics exposed by a plugin of a munin node agent. + - name: munin.plugin.name + type: keyword + description: > + Name of the plugin collecting these metrics. - name: munin type: group - description: > - munin contains metrics exposed by a munin node agent fields: diff --git a/metricbeat/module/munin/fields.go b/metricbeat/module/munin/fields.go index ef7d4e1121ed..bb04054e8b30 100644 --- a/metricbeat/module/munin/fields.go +++ b/metricbeat/module/munin/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMunin returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/munin. func AssetMunin() string { - return "eJxsjk2qhDAQhPc5ReHeC2TxbvAOEU2NNKOdkLQw3n4wBmaEqV3/FN834snDY9tV1AEmttJj+D/nwQGRdS6STZJ6/DkAaDdoisRGKzJX8JVTMRYHFK4MlR4TLTjgIVxj9a05QsPGD+2MHZkeS0l77psfyCuthjmpBdF6g1dGTAdC/2lyYaFar39bXCZ3z3cAAAD//xiKUG4=" + return "eJx8kU1qwzAUhPc+xZBNIBAfQIveoL1CkK2Jq0Z/SM+0vn2xpZaYmi7fzBvm09MVDy4Kfg42dIBYcVQ4va7zqQMMy5htEhuDwksHAJuHEA3hKdmOBfxKMQtzB2Q66kKFgaI74G7pTFFb8oqgPVtb38L9ZfMAWRIV4vDBUZpUh1t1TJwHx7/OzeuUbJja2vlybjsH7Bv/E3ShwbBAI7l5sgHxDl3x6gP1xCD9AXzd71dph//g8hmz+Z/gTXuuVfLOn+IxOsdRbJhWtfye9qB71zflOKemPJ+6pvaf8R0AAP//7IiXDQ==" } diff --git a/metricbeat/module/munin/munin.go b/metricbeat/module/munin/munin.go index d81a5ab02812..7c2fd40c0d82 100644 --- a/metricbeat/module/munin/munin.go +++ b/metricbeat/module/munin/munin.go @@ -19,23 +19,29 @@ package munin import ( "bufio" - "fmt" "io" "net" + "regexp" "strconv" "strings" "time" - "github.com/joeshaw/multierror" "github.com/pkg/errors" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/logp" ) const ( unknownValue = "U" ) +var ( + // Field names must match with this expression + // http://guide.munin-monitoring.org/en/latest/reference/plugin.html#notes-on-fieldnames + nameRegexp = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") +) + // Node connection type Node struct { conn net.Conn @@ -66,7 +72,7 @@ func (n *Node) Close() error { return n.conn.Close() } -// List of items exposed by the node +// List of plugins exposed by the node func (n *Node) List() ([]string, error) { _, err := io.WriteString(n.writer, "list\n") if err != nil { @@ -79,54 +85,64 @@ func (n *Node) List() ([]string, error) { } // Fetch metrics from munin node -func (n *Node) Fetch(items ...string) (common.MapStr, error) { - var errs multierror.Errors +func (n *Node) Fetch(plugin string, sanitize bool) (common.MapStr, error) { + _, err := io.WriteString(n.writer, "fetch "+plugin+"\n") + if err != nil { + return nil, errors.Wrapf(err, "failed to fetch metrics for plugin '%s'", plugin) + } + event := common.MapStr{} + scanner := bufio.NewScanner(n.reader) + scanner.Split(bufio.ScanWords) + for scanner.Scan() { + name := strings.TrimSpace(scanner.Text()) - for _, item := range items { - _, err := io.WriteString(n.writer, "fetch "+item+"\n") - if err != nil { - errs = append(errs, err) - continue + // Munin delimits metrics with a dot + if name == "." { + break } - scanner := bufio.NewScanner(n.reader) - scanner.Split(bufio.ScanWords) - for scanner.Scan() { - name := strings.TrimSpace(scanner.Text()) - - // Munin delimits metrics with a dot - if name == "." { - break - } - - name = strings.TrimSuffix(name, ".value") - - if !scanner.Scan() { - if scanner.Err() == nil { - errs = append(errs, errors.New("unexpected EOF when expecting value")) - } - break + name = strings.TrimSuffix(name, ".value") + if !scanner.Scan() { + if scanner.Err() == nil { + return nil, errors.New("unexpected EOF when expecting value") } - value := scanner.Text() + } + value := scanner.Text() - key := fmt.Sprintf("%s.%s", item, name) + if strings.Contains(name, ".") { + logp.Debug("munin", "ignoring field name with dot '%s'", name) + continue + } - if value == unknownValue { - errs = append(errs, errors.Errorf("unknown value for %s", key)) - continue - } - if f, err := strconv.ParseFloat(value, 64); err == nil { - event.Put(key, f) - continue - } - event.Put(key, value) + if value == unknownValue { + logp.Debug("munin", "unknown value for '%s'", name) + continue } - if scanner.Err() != nil { - errs = append(errs, scanner.Err()) + if sanitize && !nameRegexp.MatchString(name) { + logp.Debug("munin", "sanitizing name with invalid characters '%s'", name) + name = sanitizeName(name) + } + if f, err := strconv.ParseFloat(value, 64); err == nil { + event[name] = f + continue } } - return event, errs.Err() + if err := scanner.Err(); err != nil { + return nil, err + } + + return event, nil +} + +var ( + invalidCharactersRegexp = regexp.MustCompile("(^[^a-zA-Z_]|[^a-zA-Z_0-9])") +) + +// Mimic munin master implementation +// https://github.com/munin-monitoring/munin/blob/20abb861/lib/Munin/Master/Node.pm#L385 +func sanitizeName(name string) string { + return invalidCharactersRegexp.ReplaceAllString(name, "_") } diff --git a/metricbeat/module/munin/munin_test.go b/metricbeat/module/munin/munin_test.go index 8312858652a0..1da93165ddb9 100644 --- a/metricbeat/module/munin/munin_test.go +++ b/metricbeat/module/munin/munin_test.go @@ -45,8 +45,8 @@ func TestList(t *testing.T) { assert.ElementsMatch(t, expected, list) } -func TestFetch(t *testing.T) { - response := `user.value 4679836 +const ( + responseCPU = `user.value 4679836 nice.value 59278 system.value 1979168 idle.value 59957502 @@ -57,43 +57,100 @@ steal.value 0 guest.value 0 . ` - n := dummyNode(response) - - event, err := n.Fetch("cpu", "swap") - - assert.Nil(t, err) - - expected := common.MapStr{ - "cpu": common.MapStr{ - "user": float64(4679836), - "nice": float64(59278), - "system": float64(1979168), - "idle": float64(59957502), - "iowait": float64(705373), - "irq": float64(76), - "softirq": float64(36404), - "steal": float64(0), - "guest": float64(0), - }, - } - assert.Equal(t, expected, event) -} - -func TestFetchUnknown(t *testing.T) { - response := `some.value U + responseUnknown = `some.value U other.value 42 . ` - n := dummyNode(response) + responseWithWrongFields = `user.value 4679836 +nice.value 59278 +system.value 1979168 +idle.value 59957502 +user.1000.value 23456 +user.0.value 38284 +. +` +) - event, err := n.Fetch("test") +func TestFetch(t *testing.T) { + cases := []struct { + title string + response string + expected common.MapStr + }{ + { + "normal case", + responseCPU, + common.MapStr{ + "user": float64(4679836), + "nice": float64(59278), + "system": float64(1979168), + "idle": float64(59957502), + "iowait": float64(705373), + "irq": float64(76), + "softirq": float64(36404), + "steal": float64(0), + "guest": float64(0), + }, + }, + { + "unknown values", + responseUnknown, + common.MapStr{ + "other": float64(42), + }, + }, + { + "wrong field names", + responseWithWrongFields, + common.MapStr{ + "user": float64(4679836), + "nice": float64(59278), + "system": float64(1979168), + "idle": float64(59957502), + }, + }, + } - assert.NotNil(t, err) + for _, c := range cases { + t.Run(c.title, func(t *testing.T) { + n := dummyNode(c.response) + event, err := n.Fetch("cpu", true) + assert.Equal(t, c.expected, event) + assert.NoError(t, err) + }) + } +} - expected := common.MapStr{ - "test": common.MapStr{ - "other": float64(42), +func TestSanitizeName(t *testing.T) { + cases := []struct { + name string + expected string + }{ + { + "if_eth0", + "if_eth0", + }, + { + "/dev/sda1", + "_dev_sda1", + }, + { + "eth0:100", + "eth0_100", + }, + { + "user@host", + "user_host", }, + { + "404", + "_04", + }, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + assert.Equal(t, c.expected, sanitizeName(c.name)) + }) } - assert.Equal(t, expected, event) } diff --git a/metricbeat/module/munin/node/_meta/docs.asciidoc b/metricbeat/module/munin/node/_meta/docs.asciidoc index 403f5fa93b9f..3a5ead627e1f 100644 --- a/metricbeat/module/munin/node/_meta/docs.asciidoc +++ b/metricbeat/module/munin/node/_meta/docs.asciidoc @@ -11,31 +11,40 @@ and sends them as events to Elastic. - module: munin metricsets: ["node"] hosts: ["localhost:4949"] - node.namespace: node + munin.plugins: ["cpu", "swap"] --- -All metrics exposed by a single munin node will be sent in a single event, -grouped by munin items, e.g: +Metrics exposed by a single munin node will be sent in an event per plugin. + +For example with the previous configuration two events are sent like the +following ones. [source,json] --- "munin": { - "node": { - "swap": { - "swap_in": 198609, - "swap_out": 612629 - }, - "cpu": { - "softirq": 680, - "guest": 0, - "user": 158212, - "iowait": 71095, - "irq": 1, - "system": 35906, - "idle": 1185709, - "steal": 0, - "nice": 1633 - } + "plugin": { + "name": "swap" + }, + "metrics": { + "swap_in": 198609, + "swap_out": 612629 + } +} + +"munin": { + "plugin": { + "name": "cpu" + } + "metrics": { + "softirq": 680, + "guest": 0, + "user": 158212, + "iowait": 71095, + "irq": 1, + "system": 35906, + "idle": 1185709, + "steal": 0, + "nice": 1633 } } --- diff --git a/metricbeat/module/munin/node/config.go b/metricbeat/module/munin/node/config.go new file mode 100644 index 000000000000..9c649de9041b --- /dev/null +++ b/metricbeat/module/munin/node/config.go @@ -0,0 +1,28 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package node + +// Config is the configuration for munin +type Config struct { + Plugins []string `config:"munin.plugins"` + Sanitize bool `config:"munin.sanitize"` +} + +var defaultConfig = Config{ + Sanitize: false, +} diff --git a/metricbeat/module/munin/node/node.go b/metricbeat/module/munin/node/node.go index 9fe283db0f07..604d7553fb09 100644 --- a/metricbeat/module/munin/node/node.go +++ b/metricbeat/module/munin/node/node.go @@ -22,6 +22,7 @@ import ( "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/cfgwarn" + "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/metricbeat/mb" "github.com/elastic/beats/metricbeat/module/munin" ) @@ -42,8 +43,10 @@ func init() { // interface methods except for Fetch. type MetricSet struct { mb.BaseMetricSet - namespace string - timeout time.Duration + serviceType string + plugins []string + sanitize bool + timeout time.Duration } // New creates a new instance of the MetricSet. New is responsible for unpacking @@ -51,44 +54,61 @@ type MetricSet struct { func New(base mb.BaseMetricSet) (mb.MetricSet, error) { cfgwarn.Beta("The munin node metricset is beta.") - config := struct { - Namespace string `config:"node.namespace" validate:"required"` - }{} + config := defaultConfig if err := base.Module().UnpackConfig(&config); err != nil { return nil, err } return &MetricSet{ BaseMetricSet: base, - namespace: config.Namespace, + plugins: config.Plugins, + sanitize: config.Sanitize, timeout: base.Module().Config().Timeout, }, nil } // Fetch method implements the data gathering -func (m *MetricSet) Fetch() (common.MapStr, error) { +func (m *MetricSet) Fetch(r mb.ReporterV2) { node, err := munin.Connect(m.Host(), m.timeout) if err != nil { - return nil, err + r.Error(err) + return } defer node.Close() - items, err := node.List() - if err != nil { - return nil, err + plugins := m.plugins + if len(plugins) == 0 { + plugins, err = node.List() + if err != nil { + r.Error(err) + return + } } - event, err := node.Fetch(items...) - if err != nil { - return nil, err - } + for _, plugin := range plugins { + metrics, err := node.Fetch(plugin, m.sanitize) + if err != nil { + r.Error(err) + } - // Set dynamic namespace. - _, err = event.Put(mb.NamespaceKey, m.namespace) - if err != nil { - return nil, err + // Even if there was some error, keep sending succesfully collected metrics if any + if len(metrics) == 0 { + continue + } + event := mb.Event{ + Service: plugin, + RootFields: common.MapStr{ + "munin": common.MapStr{ + "plugin": common.MapStr{ + "name": plugin, + }, + "metrics": metrics, + }, + }, + } + if !r.Event(event) { + logp.Debug("munin", "Failed to report event, interrupting Fetch") + return + } } - - return event, nil - } diff --git a/metricbeat/modules.d/munin.yml.disabled b/metricbeat/modules.d/munin.yml.disabled index a86e6df767fe..d42b1d9919ec 100644 --- a/metricbeat/modules.d/munin.yml.disabled +++ b/metricbeat/modules.d/munin.yml.disabled @@ -6,4 +6,3 @@ # - node period: 10s hosts: ["localhost:4949"] - node.namespace: node diff --git a/metricbeat/tests/system/test_munin.py b/metricbeat/tests/system/test_munin.py index e1618202fa49..63cc80a94ff4 100644 --- a/metricbeat/tests/system/test_munin.py +++ b/metricbeat/tests/system/test_munin.py @@ -18,7 +18,7 @@ def test_munin_node(self): "hosts": self.get_hosts(), "period": "1s", "extras": { - "node.namespace": namespace, + "munin.plugins": ["cpu"], }, }]) proc = self.start_beat() @@ -31,8 +31,12 @@ def test_munin_node(self): evt = output[0] print(evt) - assert evt["munin"][namespace]["cpu"]["user"] > 0 + assert evt["service"]["type"] == "cpu" + assert evt["munin"]["plugin"]["name"] == "cpu" + assert evt["munin"]["metrics"]["user"] > 0 + + self.assert_fields_are_documented(evt) def get_hosts(self): - return [os.getenv('MUNIN_HOST', 'localhost') + ':' + + return [self.compose_hosts()[0] + ':' + os.getenv('MUNIN_PORT', '4949')] diff --git a/x-pack/metricbeat/metricbeat.reference.yml b/x-pack/metricbeat/metricbeat.reference.yml index 9b9675b01fc3..61534846e2f2 100644 --- a/x-pack/metricbeat/metricbeat.reference.yml +++ b/x-pack/metricbeat/metricbeat.reference.yml @@ -525,7 +525,15 @@ metricbeat.modules: enabled: true period: 10s hosts: ["localhost:4949"] - node.namespace: node + + # List of plugins to collect metrics from, by default it collects from + # all the available ones. + #munin.plugins: [] + + # If set to true, it sanitizes fields names in concordance with munin + # implementation (all characters that are not alphanumeric, or underscore + # are replaced by underscores). + #munin.sanitize: false #-------------------------------- MySQL Module -------------------------------- - module: mysql From db8a6472d1b28aaa9f905962ccd5bf72f8446dd0 Mon Sep 17 00:00:00 2001 From: Pier-Hugues Pellerin Date: Thu, 31 Jan 2019 08:13:14 -0500 Subject: [PATCH 39/66] Allow a keystore to be send with functionbeat files (#10263) * Allow a keystore to be send with functionbeat files Add a new interface in the keystore package named Packager, this allow a keystore to return the raw bytes of the keys and values store in it. This is used with core.MakeZip() to create the package that will be send to the lambda function. Fixes: #9009 --- CHANGELOG.next.asciidoc | 1 + libbeat/cmd/instance/beat.go | 13 +++++--- libbeat/keystore/file_keystore.go | 45 ++++++++++++++++++-------- libbeat/keystore/keystore.go | 5 +++ x-pack/functionbeat/core/makezip.go | 49 +++++++++++++++++++++++++++-- 5 files changed, 92 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 7170790036a9..3de738d86619 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -121,6 +121,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Correctly normalize Cloudformation resource name. {issue}10087[10087] - Functionbeat can now deploy a function for Kinesis. {10116}10116[10116] +- Allow functionbeat to use the keystore. {issue}9009[9009] ==== Bugfixes diff --git a/libbeat/cmd/instance/beat.go b/libbeat/cmd/instance/beat.go index d02c12e6185e..b4cccb78986f 100644 --- a/libbeat/cmd/instance/beat.go +++ b/libbeat/cmd/instance/beat.go @@ -28,7 +28,6 @@ import ( "math/big" "math/rand" "os" - "path/filepath" "runtime" "strings" "time" @@ -547,10 +546,7 @@ func (b *Beat) configure(settings Settings) error { // We have to initialize the keystore before any unpack or merging the cloud // options. - keystoreCfg, _ := cfg.Child("keystore", -1) - defaultPathConfig, _ := cfg.String("path.config", -1) - defaultPathConfig = filepath.Join(defaultPathConfig, fmt.Sprintf("%s.keystore", b.Info.Beat)) - store, err := keystore.Factory(keystoreCfg, defaultPathConfig) + store, err := LoadKeystore(cfg, b.Info.Beat) if err != nil { return fmt.Errorf("could not initialize the keystore: %v", err) } @@ -974,3 +970,10 @@ func obfuscateConfigOpts() []ucfg.Option { ucfg.ResolveNOOP, } } + +// LoadKeystore returns the appropriate keystore based on the configuration. +func LoadKeystore(cfg *common.Config, name string) (keystore.Keystore, error) { + keystoreCfg, _ := cfg.Child("keystore", -1) + defaultPathConfig := paths.Resolve(paths.Data, fmt.Sprintf("%s.keystore", name)) + return keystore.Factory(keystoreCfg, defaultPathConfig) +} diff --git a/libbeat/keystore/file_keystore.go b/libbeat/keystore/file_keystore.go index 0a7e03080a13..3f530a58120d 100644 --- a/libbeat/keystore/file_keystore.go +++ b/libbeat/keystore/file_keystore.go @@ -234,41 +234,53 @@ func (k *FileKeystore) doSave(override bool) error { return nil } -func (k *FileKeystore) load() error { - k.Lock() - defer k.Unlock() - +func (k *FileKeystore) loadRaw() ([]byte, error) { f, err := os.OpenFile(k.Path, os.O_RDONLY, filePermission) if err != nil { if os.IsNotExist(err) { - return nil + return nil, nil } - return err + return nil, err } defer f.Close() if common.IsStrictPerms() { if err := k.checkPermissions(k.Path); err != nil { - return err + return nil, err } } raw, err := ioutil.ReadAll(f) if err != nil { - return err + return nil, err } v := raw[0:len(version)] if !bytes.Equal(v, version) { - return fmt.Errorf("keystore format doesn't match expected version: '%s' got '%s'", version, v) + return nil, fmt.Errorf("keystore format doesn't match expected version: '%s' got '%s'", version, v) } - base64Content := raw[len(version):] - if len(base64Content) == 0 { - return fmt.Errorf("corrupt or empty keystore") + if len(raw) <= len(version) { + return nil, fmt.Errorf("corrupt or empty keystore") } - base64Decoder := base64.NewDecoder(base64.StdEncoding, bytes.NewReader(base64Content)) + return raw, nil +} + +func (k *FileKeystore) load() error { + k.Lock() + defer k.Unlock() + + raw, err := k.loadRaw() + if err != nil { + return err + } + + if len(raw) == 0 { + return nil + } + + base64Decoder := base64.NewDecoder(base64.StdEncoding, bytes.NewReader(raw[len(version):])) plaintext, err := k.decrypt(base64Decoder) if err != nil { return fmt.Errorf("could not decrypt the keystore: %v", err) @@ -396,6 +408,13 @@ func (k *FileKeystore) checkPermissions(f string) error { return nil } +// Package returns the bytes of the encrypted keystore. +func (k *FileKeystore) Package() ([]byte, error) { + k.Lock() + defer k.Unlock() + return k.loadRaw() +} + func (k *FileKeystore) hashPassword(password, salt []byte) []byte { return pbkdf2.Key(password, salt, iterationsCount, keyLength, sha512.New) } diff --git a/libbeat/keystore/keystore.go b/libbeat/keystore/keystore.go index eb95c3e041dc..f8d2da5c38cb 100644 --- a/libbeat/keystore/keystore.go +++ b/libbeat/keystore/keystore.go @@ -64,6 +64,11 @@ type Keystore interface { Save() error } +// Packager defines a keystore that we can read the raw bytes and be packaged in an artifact. +type Packager interface { + Package() ([]byte, error) +} + // Factory Create the right keystore with the configured options. func Factory(cfg *common.Config, defaultPath string) (Keystore, error) { config := defaultConfig diff --git a/x-pack/functionbeat/core/makezip.go b/x-pack/functionbeat/core/makezip.go index 0d1a88d00d91..5ac5127c6467 100644 --- a/x-pack/functionbeat/core/makezip.go +++ b/x-pack/functionbeat/core/makezip.go @@ -5,9 +5,16 @@ package core import ( + "fmt" + yaml "gopkg.in/yaml.v2" + "github.com/pkg/errors" + "github.com/elastic/beats/libbeat/cfgfile" + "github.com/elastic/beats/libbeat/cmd/instance" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/keystore" "github.com/elastic/beats/x-pack/functionbeat/config" "github.com/elastic/beats/x-pack/functionbeat/core/bundle" ) @@ -43,12 +50,29 @@ func MakeZip() ([]byte, error) { if err != nil { return nil, err } + + resources := []bundle.Resource{ + &bundle.MemoryFile{Path: "functionbeat.yml", Raw: rawConfig, FileMode: 0766}, + &bundle.LocalFile{Path: "pkg/functionbeat", FileMode: 0755}, + } + + rawKeystore, err := keystoreRaw() + if err != nil { + return nil, err + } + + if len(rawKeystore) > 0 { + resources = append(resources, &bundle.MemoryFile{ + Path: "data/functionbeat.keystore", + Raw: rawKeystore, + FileMode: 0600, + }) + } + bundle := bundle.NewZipWithLimits( packageUncompressedLimit, packageCompressedLimit, - &bundle.MemoryFile{Path: "functionbeat.yml", Raw: rawConfig, FileMode: 0766}, - &bundle.LocalFile{Path: "pkg/functionbeat", FileMode: 0755}, - ) + resources...) content, err := bundle.Bytes() if err != nil { @@ -56,3 +80,22 @@ func MakeZip() ([]byte, error) { } return content, nil } + +func keystoreRaw() ([]byte, error) { + cfg, err := cfgfile.Load("", common.NewConfig()) + if err != nil { + return nil, fmt.Errorf("error loading config file: %v", err) + } + + store, err := instance.LoadKeystore(cfg, "functionbeat") + if err != nil { + return nil, errors.Wrapf(err, "cannot load the keystore for packaging") + } + + packager, ok := store.(keystore.Packager) + if !ok { + return nil, fmt.Errorf("the configured keystore cannot be packaged") + } + + return packager.Package() +} From ed2c8d57d27fad78db1bab0b31eef01525ce13ff Mon Sep 17 00:00:00 2001 From: Tudor Golubenco Date: Thu, 31 Jan 2019 14:46:53 +0100 Subject: [PATCH 40/66] Set shard count to 1 in all default configs (#10430) * Set shard count to 1 in all default configs * Added the shards settings explicitelly to functionbeat and journalbeat --- auditbeat/_meta/common.p2.yml | 2 +- auditbeat/auditbeat.yml | 2 +- filebeat/_meta/common.p2.yml | 2 +- filebeat/filebeat.yml | 2 +- journalbeat/_meta/beat.yml | 6 ++++++ journalbeat/journalbeat.reference.yml | 6 ++++++ journalbeat/journalbeat.yml | 6 ++++++ packetbeat/_meta/beat.yml | 2 +- packetbeat/packetbeat.yml | 2 +- winlogbeat/_meta/beat.yml | 2 +- winlogbeat/winlogbeat.yml | 2 +- x-pack/auditbeat/auditbeat.yml | 2 +- x-pack/filebeat/filebeat.yml | 2 +- x-pack/functionbeat/_meta/beat.yml | 7 +++++++ x-pack/functionbeat/functionbeat.yml | 7 +++++++ 15 files changed, 42 insertions(+), 10 deletions(-) diff --git a/auditbeat/_meta/common.p2.yml b/auditbeat/_meta/common.p2.yml index df462bf58738..468cc1d45a91 100644 --- a/auditbeat/_meta/common.p2.yml +++ b/auditbeat/_meta/common.p2.yml @@ -1,6 +1,6 @@ #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/auditbeat/auditbeat.yml b/auditbeat/auditbeat.yml index 0004039a77c6..9cb4cd6bd716 100644 --- a/auditbeat/auditbeat.yml +++ b/auditbeat/auditbeat.yml @@ -50,7 +50,7 @@ auditbeat.modules: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/filebeat/_meta/common.p2.yml b/filebeat/_meta/common.p2.yml index 34fe91f2b0e1..b423f0b0494b 100644 --- a/filebeat/_meta/common.p2.yml +++ b/filebeat/_meta/common.p2.yml @@ -69,6 +69,6 @@ filebeat.config.modules: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml index 6585d1e49a89..d163e79735d1 100644 --- a/filebeat/filebeat.yml +++ b/filebeat/filebeat.yml @@ -78,7 +78,7 @@ filebeat.config.modules: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/journalbeat/_meta/beat.yml b/journalbeat/_meta/beat.yml index 0b7b4fd64ab9..2bd2c91ce914 100644 --- a/journalbeat/_meta/beat.yml +++ b/journalbeat/_meta/beat.yml @@ -44,3 +44,9 @@ journalbeat.inputs: # Name of the registry file. If a relative path is used, it is considered relative to the # data path. #registry_file: registry + +#==================== Elasticsearch template setting ========================== +setup.template.settings: + index.number_of_shards: 1 + #index.codec: best_compression + #_source.enabled: false diff --git a/journalbeat/journalbeat.reference.yml b/journalbeat/journalbeat.reference.yml index f31f7c8b2a97..7205e8320e21 100644 --- a/journalbeat/journalbeat.reference.yml +++ b/journalbeat/journalbeat.reference.yml @@ -45,6 +45,12 @@ journalbeat.inputs: # data path. #registry_file: registry +#==================== Elasticsearch template setting ========================== +setup.template.settings: + index.number_of_shards: 1 + #index.codec: best_compression + #_source.enabled: false + #================================ General ====================================== # The name of the shipper that publishes the network data. It can be used to group diff --git a/journalbeat/journalbeat.yml b/journalbeat/journalbeat.yml index 06326ece0819..44b590f9ca2e 100644 --- a/journalbeat/journalbeat.yml +++ b/journalbeat/journalbeat.yml @@ -45,6 +45,12 @@ journalbeat.inputs: # data path. #registry_file: registry +#==================== Elasticsearch template setting ========================== +setup.template.settings: + index.number_of_shards: 1 + #index.codec: best_compression + #_source.enabled: false + #================================ General ===================================== # The name of the shipper that publishes the network data. It can be used to group diff --git a/packetbeat/_meta/beat.yml b/packetbeat/_meta/beat.yml index 82a9b185f748..8c8037a5e7c0 100644 --- a/packetbeat/_meta/beat.yml +++ b/packetbeat/_meta/beat.yml @@ -104,6 +104,6 @@ packetbeat.protocols: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/packetbeat/packetbeat.yml b/packetbeat/packetbeat.yml index ffc36d4beab7..67b5c64d2298 100644 --- a/packetbeat/packetbeat.yml +++ b/packetbeat/packetbeat.yml @@ -104,7 +104,7 @@ packetbeat.protocols: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/winlogbeat/_meta/beat.yml b/winlogbeat/_meta/beat.yml index 783591d7a0c6..ba8f85214ed8 100644 --- a/winlogbeat/_meta/beat.yml +++ b/winlogbeat/_meta/beat.yml @@ -26,6 +26,6 @@ winlogbeat.event_logs: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/winlogbeat/winlogbeat.yml b/winlogbeat/winlogbeat.yml index d8fc5fd1b178..29f419134854 100644 --- a/winlogbeat/winlogbeat.yml +++ b/winlogbeat/winlogbeat.yml @@ -26,7 +26,7 @@ winlogbeat.event_logs: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/x-pack/auditbeat/auditbeat.yml b/x-pack/auditbeat/auditbeat.yml index b52dc649e7e1..0088d6fe7f34 100644 --- a/x-pack/auditbeat/auditbeat.yml +++ b/x-pack/auditbeat/auditbeat.yml @@ -72,7 +72,7 @@ auditbeat.modules: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/x-pack/filebeat/filebeat.yml b/x-pack/filebeat/filebeat.yml index 6585d1e49a89..d163e79735d1 100644 --- a/x-pack/filebeat/filebeat.yml +++ b/x-pack/filebeat/filebeat.yml @@ -78,7 +78,7 @@ filebeat.config.modules: #==================== Elasticsearch template setting ========================== setup.template.settings: - index.number_of_shards: 3 + index.number_of_shards: 1 #index.codec: best_compression #_source.enabled: false diff --git a/x-pack/functionbeat/_meta/beat.yml b/x-pack/functionbeat/_meta/beat.yml index 539fbdeb7cfb..2274a5033c82 100644 --- a/x-pack/functionbeat/_meta/beat.yml +++ b/x-pack/functionbeat/_meta/beat.yml @@ -144,3 +144,10 @@ functionbeat.provider.aws.functions: # Starting position is where to start reading events from the Kinesis stream. # Default is trim_horizon. #starting_position: "trim_horizon" + +#==================== Elasticsearch template setting ========================== + +setup.template.settings: + index.number_of_shards: 1 + #index.codec: best_compression + #_source.enabled: false diff --git a/x-pack/functionbeat/functionbeat.yml b/x-pack/functionbeat/functionbeat.yml index 31c90a1d4af7..07bc7c3b332b 100644 --- a/x-pack/functionbeat/functionbeat.yml +++ b/x-pack/functionbeat/functionbeat.yml @@ -145,6 +145,13 @@ functionbeat.provider.aws.functions: # Default is trim_horizon. #starting_position: "trim_horizon" +#==================== Elasticsearch template setting ========================== + +setup.template.settings: + index.number_of_shards: 1 + #index.codec: best_compression + #_source.enabled: false + #================================ General ===================================== # The name of the shipper that publishes the network data. It can be used to group From 2bbf828c2eb9b4bdeffdab6183812e058d43c237 Mon Sep 17 00:00:00 2001 From: Steffen Siering Date: Thu, 31 Jan 2019 14:56:05 +0100 Subject: [PATCH 41/66] Refactor index management (#10347) Changes: - introduce Index + ILM manager interfaces responsible for: - create ILM policy - create write alias - create and load template - separate interfaces for re-use: manager, apihandler - provide default API handler for elasticsearch.Client - Index + ILM support interfaces, that can be swapped out with custom implementation (still WIP) - Beat implementing custom managers have to decide on config file format - ILM settings have been moved to `ilm.setup` - Introduce `setup.ilm.enabled: auto` (new default) - Index manager will detect on connect to Elasticsearch if ILM can be enabled or not - Lazily chooses write alias or old-style index for publishing - Index Manager does not check ILM availabilty on startup, but on first connect (so to not block beats startup) - If Elasticsearch < 7.0, then `auto` defaults to false - If Elasticsearch > 7.0, then `auto` checks if ILM is available and enbaled - If `setup.ilm.enabled: true`, then fail check if version does not support ILM or ILM is disabled - Publisher pipeline does not use output package anymore to create an output, but a callback -> Beat instance itself creates output instances, passing IndexManager and other info to the output loader. - Outputs can use IndexManager in order to create the per event index selector - remove fragile manipulation of `common.Config` objects, that have been already partially parsed. - Ensure ILM can be setup if `setup.ilm.enabled: true`, but elasticsearch output is configured via Central Management Followup: update docs --- CHANGELOG-developer.next.asciidoc | 4 + CHANGELOG.next.asciidoc | 5 + auditbeat/auditbeat.reference.yml | 24 +- auditbeat/auditbeat.yml | 3 - filebeat/filebeat.reference.yml | 24 +- filebeat/filebeat.yml | 3 - filebeat/tests/system/config/filebeat.yml.j2 | 13 + .../system/config/filebeat_inputs.yml.j2 | 13 + .../system/config/filebeat_modules.yml.j2 | 13 + filebeat/tests/system/test_modules.py | 3 +- filebeat/tests/system/test_pipeline.py | 1 + heartbeat/heartbeat.reference.yml | 24 +- heartbeat/heartbeat.yml | 3 - journalbeat/journalbeat.reference.yml | 24 +- journalbeat/journalbeat.yml | 3 - libbeat/_meta/config.reference.yml | 24 +- libbeat/_meta/config.yml | 3 - libbeat/cmd/export.go | 2 +- libbeat/cmd/export/ilm_policy.go | 28 +- libbeat/cmd/export/template.go | 70 +-- libbeat/cmd/instance/beat.go | 239 +++-------- libbeat/cmd/instance/ilm.go | 216 ---------- libbeat/cmd/instance/settings.go | 19 +- libbeat/cmd/test/output.go | 4 +- libbeat/common/reload/reload.go | 8 + libbeat/docs/outputconfig.asciidoc | 9 - libbeat/docs/shared-ilm.asciidoc | 7 +- libbeat/idxmgmt/assets.go | 32 ++ libbeat/idxmgmt/idxmgmt.go | 162 +++++++ libbeat/idxmgmt/idxmgmt_test.go | 272 ++++++++++++ libbeat/idxmgmt/ilm/config.go | 124 ++++++ libbeat/idxmgmt/ilm/error.go | 94 ++++ libbeat/idxmgmt/ilm/eshandler.go | 210 +++++++++ .../idxmgmt/ilm/eshandler_integration_test.go | 207 +++++++++ libbeat/idxmgmt/ilm/ilm.go | 147 +++++++ libbeat/idxmgmt/ilm/ilm_test.go | 279 ++++++++++++ libbeat/idxmgmt/ilm/mockapihandler_test.go | 79 ++++ libbeat/idxmgmt/ilm/noop.go | 41 ++ libbeat/idxmgmt/ilm/std.go | 141 ++++++ libbeat/idxmgmt/ilm/testfiles/custom.json | 1 + libbeat/idxmgmt/mockilm_test.go | 96 +++++ libbeat/idxmgmt/std.go | 403 ++++++++++++++++++ libbeat/outputs/console/console.go | 1 + libbeat/outputs/elasticsearch/client.go | 28 +- .../elasticsearch/client_integration_test.go | 5 +- libbeat/outputs/elasticsearch/client_test.go | 53 +-- .../outputs/elasticsearch/elasticsearch.go | 18 +- libbeat/outputs/fileout/file.go | 1 + libbeat/outputs/kafka/kafka.go | 1 + .../outputs/kafka/kafka_integration_test.go | 2 +- libbeat/outputs/logstash/logstash.go | 1 + .../logstash/logstash_integration_test.go | 13 +- libbeat/outputs/logstash/logstash_test.go | 2 +- libbeat/outputs/output_reg.go | 25 +- libbeat/outputs/redis/redis.go | 1 + .../outputs/redis/redis_integration_test.go | 2 +- libbeat/publisher/pipeline/controller.go | 16 +- libbeat/publisher/pipeline/module.go | 20 +- libbeat/publisher/pipeline/pipeline.go | 11 +- libbeat/publisher/pipeline/stress/out.go | 2 +- libbeat/publisher/pipeline/stress/run.go | 19 +- libbeat/template/config.go | 8 +- libbeat/template/load.go | 15 +- libbeat/template/load_integration_test.go | 18 +- libbeat/template/template.go | 8 +- libbeat/tests/system/config/libbeat.yml.j2 | 12 + libbeat/tests/system/config/mockbeat.yml.j2 | 12 + libbeat/tests/system/test_ilm.py | 32 +- metricbeat/metricbeat.reference.yml | 24 +- metricbeat/metricbeat.yml | 3 - packetbeat/packetbeat.reference.yml | 24 +- packetbeat/packetbeat.yml | 3 - winlogbeat/winlogbeat.reference.yml | 24 +- winlogbeat/winlogbeat.yml | 3 - x-pack/auditbeat/auditbeat.reference.yml | 24 +- x-pack/auditbeat/auditbeat.yml | 3 - x-pack/filebeat/filebeat.reference.yml | 24 +- x-pack/filebeat/filebeat.yml | 3 - .../functionbeat/functionbeat.reference.yml | 24 +- x-pack/functionbeat/functionbeat.yml | 3 - x-pack/metricbeat/metricbeat.reference.yml | 24 +- x-pack/metricbeat/metricbeat.yml | 3 - 82 files changed, 2901 insertions(+), 691 deletions(-) delete mode 100644 libbeat/cmd/instance/ilm.go create mode 100644 libbeat/idxmgmt/assets.go create mode 100644 libbeat/idxmgmt/idxmgmt.go create mode 100644 libbeat/idxmgmt/idxmgmt_test.go create mode 100644 libbeat/idxmgmt/ilm/config.go create mode 100644 libbeat/idxmgmt/ilm/error.go create mode 100644 libbeat/idxmgmt/ilm/eshandler.go create mode 100644 libbeat/idxmgmt/ilm/eshandler_integration_test.go create mode 100644 libbeat/idxmgmt/ilm/ilm.go create mode 100644 libbeat/idxmgmt/ilm/ilm_test.go create mode 100644 libbeat/idxmgmt/ilm/mockapihandler_test.go create mode 100644 libbeat/idxmgmt/ilm/noop.go create mode 100644 libbeat/idxmgmt/ilm/std.go create mode 100644 libbeat/idxmgmt/ilm/testfiles/custom.json create mode 100644 libbeat/idxmgmt/mockilm_test.go create mode 100644 libbeat/idxmgmt/std.go diff --git a/CHANGELOG-developer.next.asciidoc b/CHANGELOG-developer.next.asciidoc index bdab0784535a..eca8bfdc6a14 100644 --- a/CHANGELOG-developer.next.asciidoc +++ b/CHANGELOG-developer.next.asciidoc @@ -19,6 +19,8 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2..master[Check the HEAD di The list below covers the major changes between 7.0.0-alpha2 and master only. ==== Breaking changes +- Outputs receive Index Manager as additional parameter. The index manager can + be used to create an index selector. {pull}10347[10347] ==== Bugfixes @@ -27,3 +29,5 @@ The list below covers the major changes between 7.0.0-alpha2 and master only. - Allow multiple object type configurations per field. {pull}9772[9772] - Move agent metadata addition to a processor. {pull}9952[9952] - Add (*common.Config).Has and (*common.Config).Remove. {pull}10363[10363] +- Introduce ILM and IndexManagment support to beat.Settings. {pull}10347[10347] +- Introduce ILM and IndexManagement support to beat.Settings. {pull}10347[10347] diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 3de738d86619..c926bb66a052 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -26,6 +26,8 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Remove --setup command line flag. {pull}10138[10138] - Remove --version command line flag. {pull}10138[10138] - Remove --configtest command line flag. {pull}10138[10138] +- Move output.elasticsearch.ilm settings to setup.ilm. {pull}10347[10347] +- ILM will be available by default if Elasticsearch > 7.0 is used. {pull}10347[10347] *Auditbeat* @@ -194,6 +196,9 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add `add_fields` processor. {pull}10119[10119] - Add Kibana field formatter to bytes fields. {pull}10184[10184] - Document a few more `auditd.log.*` fields. {pull}10192[10192] +- Add ILM mode `auto` to setup.ilm.enabled setting. This new default value detects if ILM is available {pull}10347[10347] +- Add support to read ILM policy from external JSON file. {pull}10347[10347] +- Add `overwrite` and `check_exists` settings to ILM support. {pull}10347[10347] *Auditbeat* diff --git a/auditbeat/auditbeat.reference.yml b/auditbeat/auditbeat.reference.yml index b042b2bb6eab..534778657a13 100644 --- a/auditbeat/auditbeat.reference.yml +++ b/auditbeat/auditbeat.reference.yml @@ -358,11 +358,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "auditbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1009,6 +1004,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "auditbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/auditbeat/auditbeat.yml b/auditbeat/auditbeat.yml index 9cb4cd6bd716..65abdbfda3e7 100644 --- a/auditbeat/auditbeat.yml +++ b/auditbeat/auditbeat.yml @@ -121,9 +121,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/filebeat/filebeat.reference.yml b/filebeat/filebeat.reference.yml index e4f68c1df5a1..cdfa2b0ca11d 100644 --- a/filebeat/filebeat.reference.yml +++ b/filebeat/filebeat.reference.yml @@ -1059,11 +1059,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "filebeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1710,6 +1705,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "filebeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml index d163e79735d1..c06827965ffd 100644 --- a/filebeat/filebeat.yml +++ b/filebeat/filebeat.yml @@ -149,9 +149,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/filebeat/tests/system/config/filebeat.yml.j2 b/filebeat/tests/system/config/filebeat.yml.j2 index 52e099d85113..22c95ef4b4c9 100644 --- a/filebeat/tests/system/config/filebeat.yml.j2 +++ b/filebeat/tests/system/config/filebeat.yml.j2 @@ -105,6 +105,19 @@ filebeat.config.{{ reload_type|default("inputs") }}: {% endif -%} {% endif -%} +{% if ilm %} +setup.ilm: + enabled: {{ ilm.enabled | default("auto") }} + policy_name: libbeat-test-default-policy + {% if ilm.pattern %} + pattern: {{ ilm.pattern }} + {% endif %} + {% if ilm.rollover_alias %} + rollover_alias: {{ ilm.rollover_alias }} + {% endif %} +{% endif %} + + #============================== Autodiscover ================================== {% if autodiscover %} diff --git a/filebeat/tests/system/config/filebeat_inputs.yml.j2 b/filebeat/tests/system/config/filebeat_inputs.yml.j2 index 04ef3c2a6ad5..db5628fb6032 100644 --- a/filebeat/tests/system/config/filebeat_inputs.yml.j2 +++ b/filebeat/tests/system/config/filebeat_inputs.yml.j2 @@ -7,6 +7,19 @@ filebeat.inputs: {% endfor %} filebeat.registry_file: {{ beat.working_dir + '/' }}{{ registryFile|default("registry")}} +{% if ilm %} +setup.ilm: + enabled: {{ ilm.enabled | default("auto") }} + policy_name: libbeat-test-default-policy + {% if ilm.pattern %} + pattern: {{ ilm.pattern }} + {% endif %} + {% if ilm.rollover_alias %} + rollover_alias: {{ ilm.rollover_alias }} + {% endif %} +{% endif %} + + output.file: path: {{ output_file_path|default(beat.working_dir + "/output") }} filename: "{{ output_file_filename|default("filebeat") }}" diff --git a/filebeat/tests/system/config/filebeat_modules.yml.j2 b/filebeat/tests/system/config/filebeat_modules.yml.j2 index 62b66e8a5ff6..df3a480277c4 100644 --- a/filebeat/tests/system/config/filebeat_modules.yml.j2 +++ b/filebeat/tests/system/config/filebeat_modules.yml.j2 @@ -15,3 +15,16 @@ setup.kibana.host: {{ kibana_url }} {% if kibana_path %} setup.dashboards.directory: {{ kibana_path }} {% endif %} + +{% if ilm %} +setup.ilm: + enabled: {{ ilm.enabled | default("auto") }} + policy_name: libbeat-test-default-policy + {% if ilm.pattern %} + pattern: {{ ilm.pattern }} + {% endif %} + {% if ilm.rollover_alias %} + rollover_alias: {{ ilm.rollover_alias }} + {% endif %} +{% endif %} + diff --git a/filebeat/tests/system/test_modules.py b/filebeat/tests/system/test_modules.py index 9dae6b0a3390..322694c4d296 100644 --- a/filebeat/tests/system/test_modules.py +++ b/filebeat/tests/system/test_modules.py @@ -96,7 +96,7 @@ def test_fileset_file(self, module, fileset, test_file): template_name="filebeat_modules", output=cfgfile, index_name=self.index_name, - elasticsearch_url=self.elasticsearch_url + elasticsearch_url=self.elasticsearch_url, ) self.run_on_file( @@ -118,6 +118,7 @@ def run_on_file(self, module, fileset, test_file, cfgfile): self.filebeat, "-systemTest", "-e", "-d", "*", "-once", "-c", cfgfile, + "-E", "setup.ilm.enabled=false", "-modules={}".format(module), "-M", "{module}.*.enabled=false".format(module=module), "-M", "{module}.{fileset}.enabled=true".format( diff --git a/filebeat/tests/system/test_pipeline.py b/filebeat/tests/system/test_pipeline.py index 8058306a95d5..7b5b6c381bd7 100644 --- a/filebeat/tests/system/test_pipeline.py +++ b/filebeat/tests/system/test_pipeline.py @@ -62,6 +62,7 @@ def test_input_pipeline_config(self): pipeline="test", setup_template_name=index_name, setup_template_pattern=index_name + "*", + ilm={"enabled": False}, ) os.mkdir(self.working_dir + "/log/") diff --git a/heartbeat/heartbeat.reference.yml b/heartbeat/heartbeat.reference.yml index 741b2229c255..be2ee368934d 100644 --- a/heartbeat/heartbeat.reference.yml +++ b/heartbeat/heartbeat.reference.yml @@ -502,11 +502,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "heartbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1153,6 +1148,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "heartbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/heartbeat/heartbeat.yml b/heartbeat/heartbeat.yml index 6e1d31515e70..7424bf421b3b 100644 --- a/heartbeat/heartbeat.yml +++ b/heartbeat/heartbeat.yml @@ -106,9 +106,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/journalbeat/journalbeat.reference.yml b/journalbeat/journalbeat.reference.yml index 7205e8320e21..006bfe9324c4 100644 --- a/journalbeat/journalbeat.reference.yml +++ b/journalbeat/journalbeat.reference.yml @@ -298,11 +298,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "journalbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -949,6 +944,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "journalbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/journalbeat/journalbeat.yml b/journalbeat/journalbeat.yml index 44b590f9ca2e..daa8b40e0e33 100644 --- a/journalbeat/journalbeat.yml +++ b/journalbeat/journalbeat.yml @@ -118,9 +118,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/libbeat/_meta/config.reference.yml b/libbeat/_meta/config.reference.yml index fb77508c109e..c88d26a22f19 100644 --- a/libbeat/_meta/config.reference.yml +++ b/libbeat/_meta/config.reference.yml @@ -246,11 +246,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "beat-index-prefix" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -897,6 +892,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "beat-index-prefix" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/libbeat/_meta/config.yml b/libbeat/_meta/config.yml index c038793ef682..9364f344a393 100644 --- a/libbeat/_meta/config.yml +++ b/libbeat/_meta/config.yml @@ -66,9 +66,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/libbeat/cmd/export.go b/libbeat/cmd/export.go index 07f9cd16da0a..2bd37f33adb5 100644 --- a/libbeat/cmd/export.go +++ b/libbeat/cmd/export.go @@ -33,7 +33,7 @@ func genExportCmd(settings instance.Settings, name, idxPrefix, beatVersion strin exportCmd.AddCommand(export.GenExportConfigCmd(settings, name, idxPrefix, beatVersion)) exportCmd.AddCommand(export.GenTemplateConfigCmd(settings, name, idxPrefix, beatVersion)) exportCmd.AddCommand(export.GenDashboardCmd(name, idxPrefix, beatVersion)) - exportCmd.AddCommand(export.GenGetILMPolicyCmd()) + exportCmd.AddCommand(export.GenGetILMPolicyCmd(settings, name, idxPrefix, beatVersion)) return exportCmd } diff --git a/libbeat/cmd/export/ilm_policy.go b/libbeat/cmd/export/ilm_policy.go index a9e4542fc29e..9850da3527ce 100644 --- a/libbeat/cmd/export/ilm_policy.go +++ b/libbeat/cmd/export/ilm_policy.go @@ -19,19 +19,43 @@ package export import ( "fmt" + "os" "github.com/spf13/cobra" "github.com/elastic/beats/libbeat/cmd/instance" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" ) // GenGetILMPolicyCmd is the command used to export the ilm policy. -func GenGetILMPolicyCmd() *cobra.Command { +func GenGetILMPolicyCmd(settings instance.Settings, name, idxPrefix, version string) *cobra.Command { genTemplateConfigCmd := &cobra.Command{ Use: "ilm-policy", Short: "Export ILM policy", Run: func(cmd *cobra.Command, args []string) { - fmt.Println(instance.ILMPolicy.StringToPrint()) + b, err := instance.NewBeat(name, idxPrefix, version) + if err != nil { + fmt.Fprintf(os.Stderr, "Error initializing beat: %s\n", err) + os.Exit(1) + } + err = b.InitWithSettings(settings) + if err != nil { + fmt.Fprintf(os.Stderr, "Error initializing beat: %s\n", err) + os.Exit(1) + } + + ilmFactory := settings.ILM + if ilmFactory == nil { + ilmFactory = ilm.DefaultSupport + } + + ilm, err := ilmFactory(nil, b.Info, b.RawConfig) + if err != nil { + fmt.Fprintf(os.Stderr, "Error initializing ILM support: %s\n", err) + } + + fmt.Println(common.MapStr(ilm.Policy().Body).StringToPrint()) }, } diff --git a/libbeat/cmd/export/template.go b/libbeat/cmd/export/template.go index 1f4dea5751a7..e804a0df5ce5 100644 --- a/libbeat/cmd/export/template.go +++ b/libbeat/cmd/export/template.go @@ -25,6 +25,8 @@ import ( "github.com/elastic/beats/libbeat/cmd/instance" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt" + "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/paths" "github.com/elastic/beats/libbeat/template" ) @@ -36,65 +38,83 @@ func GenTemplateConfigCmd(settings instance.Settings, name, idxPrefix, beatVersi Run: func(cmd *cobra.Command, args []string) { version, _ := cmd.Flags().GetString("es.version") index, _ := cmd.Flags().GetString("index") + noILM, _ := cmd.Flags().GetBool("noilm") b, err := instance.NewBeat(name, idxPrefix, beatVersion) if err != nil { - fmt.Fprintf(os.Stderr, "Error initializing beat: %s\n", err) - os.Exit(1) + fatalf("Error initializing beat: %+v", err) } err = b.InitWithSettings(settings) if err != nil { - fmt.Fprintf(os.Stderr, "Error initializing beat: %s\n", err) - os.Exit(1) - } - - cfg := template.DefaultConfig - if b.Config.Template.Enabled() { - err = b.Config.Template.Unpack(&cfg) - if err != nil { - fmt.Fprintf(os.Stderr, "Error getting template settings: %+v", err) - os.Exit(1) - } + fatalf("Error initializing beat: %+v", err) } if version == "" { version = b.Info.Version } - esVersion, err := common.NewVersion(version) if err != nil { - fmt.Fprintf(os.Stderr, "Invalid Elasticsearch version: %s\n", err) + fatalf("Invalid Elasticsearch version: %+v", err) + } + + imFactory := settings.IndexManagement + if imFactory == nil { + imFactory = idxmgmt.MakeDefaultSupport(settings.ILM) + } + indexManager, err := imFactory(logp.NewLogger("index-management"), b.Info, b.RawConfig) + if err != nil { + fatalf("Error initializing the index manager: %+v", err) + } + + tmplCfg, err := indexManager.TemplateConfig(!noILM) + if err != nil { + fatalf("Template error detected: %+v", err) + } + if tmplCfg.Enabled == false { + tmplCfg = template.DefaultConfig() + } + + var withMigration bool + if b.RawConfig.HasField("migration") { + sub, err := b.RawConfig.Child("migration", -1) + if err != nil { + fatalf("Failed to read migration setting: %+v", err) + } + withMigration = sub.Enabled() } - tmpl, err := template.New(b.Info.Version, index, *esVersion, cfg, b.Config.Migration.Enabled()) + tmpl, err := template.New(b.Info.Version, index, *esVersion, tmplCfg, withMigration) if err != nil { - fmt.Fprintf(os.Stderr, "Error generating template: %+v", err) - os.Exit(1) + fatalf("Error generating template: %+v", err) } var templateString common.MapStr - if cfg.Fields != "" { - fieldsPath := paths.Resolve(paths.Config, cfg.Fields) + if tmplCfg.Fields != "" { + fieldsPath := paths.Resolve(paths.Config, tmplCfg.Fields) templateString, err = tmpl.LoadFile(fieldsPath) } else { templateString, err = tmpl.LoadBytes(b.Fields) } - if err != nil { - fmt.Fprintf(os.Stderr, "Error generating template: %+v", err) - os.Exit(1) + fatalf("Error generating template: %+v", err) } _, err = os.Stdout.WriteString(templateString.StringToPrint() + "\n") if err != nil { - fmt.Fprintf(os.Stderr, "Error writing template: %+v", err) - os.Exit(1) + fatalf("Error writing template: %+v", err) } }, } genTemplateConfigCmd.Flags().String("es.version", beatVersion, "Elasticsearch version") genTemplateConfigCmd.Flags().String("index", idxPrefix, "Base index name") + genTemplateConfigCmd.Flags().Bool("noilm", false, "Generate template with ILM disabled") return genTemplateConfigCmd } + +func fatalf(msg string, vs ...interface{}) { + fmt.Fprintf(os.Stderr, msg, vs...) + fmt.Fprintln(os.Stderr) + os.Exit(1) +} diff --git a/libbeat/cmd/instance/beat.go b/libbeat/cmd/instance/beat.go index b4cccb78986f..765bc5316a42 100644 --- a/libbeat/cmd/instance/beat.go +++ b/libbeat/cmd/instance/beat.go @@ -42,11 +42,11 @@ import ( "github.com/elastic/beats/libbeat/cfgfile" "github.com/elastic/beats/libbeat/cloudid" "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/cfgwarn" "github.com/elastic/beats/libbeat/common/file" "github.com/elastic/beats/libbeat/common/reload" "github.com/elastic/beats/libbeat/common/seccomp" "github.com/elastic/beats/libbeat/dashboards" + "github.com/elastic/beats/libbeat/idxmgmt" "github.com/elastic/beats/libbeat/keystore" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/logp/configure" @@ -55,12 +55,12 @@ import ( "github.com/elastic/beats/libbeat/monitoring" "github.com/elastic/beats/libbeat/monitoring/report" "github.com/elastic/beats/libbeat/monitoring/report/log" + "github.com/elastic/beats/libbeat/outputs" "github.com/elastic/beats/libbeat/outputs/elasticsearch" "github.com/elastic/beats/libbeat/paths" "github.com/elastic/beats/libbeat/plugin" "github.com/elastic/beats/libbeat/publisher/pipeline" svc "github.com/elastic/beats/libbeat/service" - "github.com/elastic/beats/libbeat/template" "github.com/elastic/beats/libbeat/version" sysinfo "github.com/elastic/go-sysinfo" "github.com/elastic/go-sysinfo/types" @@ -73,7 +73,9 @@ type Beat struct { Config beatConfig RawConfig *common.Config // Raw config that can be unpacked to get Beat specific config data. - keystore keystore.Keystore + + keystore keystore.Keystore + index idxmgmt.Supporter } type beatConfig struct { @@ -102,12 +104,7 @@ type beatConfig struct { // elastic stack 'setup' configurations Dashboards *common.Config `config:"setup.dashboards"` - Template *common.Config `config:"setup.template"` Kibana *common.Config `config:"setup.kibana"` - Migration *common.Config `config:"migration"` - - // ILM Config options - ILM *common.Config `config:"output.elasticsearch.ilm"` } var debugf = logp.MakeDebug("beat") @@ -273,7 +270,7 @@ func (b *Beat) createBeater(bt beat.Creator) (beat.Beater, error) { logSystemInfo(b.Info) logp.Info("Setup Beat: %s; Version: %s", b.Info.Beat, b.Info.Version) - err = b.registerTemplateLoading() + err = b.registerESIndexManagement() if err != nil { return nil, err } @@ -311,13 +308,14 @@ func (b *Beat) createBeater(bt beat.Creator) (beat.Beater, error) { Logger: logp.L().Named("publisher"), }, b.Config.Pipeline, - b.Config.Output) + b.makeOutputFactory(b.Config.Output), + ) if err != nil { return nil, fmt.Errorf("error initializing publisher: %+v", err) } - reload.Register.MustRegister("output", pipeline.OutputReloader()) + reload.Register.MustRegister("output", b.makeOutputReloader(pipeline.OutputReloader())) // TODO: some beats race on shutdown with publisher.Stop -> do not call Stop yet, // but refine publisher to disconnect clients on stop automatically @@ -438,47 +436,29 @@ func (b *Beat) Setup(bt beat.Creator, settings SetupSettings) error { return err } - if settings.Template { + if settings.Template || settings.ILMPolicy { outCfg := b.Config.Output if outCfg.Name() != "elasticsearch" { - return fmt.Errorf("Template loading requested but the Elasticsearch output is not configured/enabled") - } - - if b.Config.ILM.Enabled() { - cfgwarn.Beta("Index lifecycle management is enabled which is in beta.") - - ilmCfg, err := getILMConfig(b) - if err != nil { - return err - } - - err = b.prepareILMTemplate(ilmCfg) - if err != nil { - return err - } + return fmt.Errorf("Index management requested but the Elasticsearch output is not configured/enabled") } esConfig := outCfg.Config() - if tmplCfg := b.Config.Template; tmplCfg == nil || tmplCfg.Enabled() { - loadCallback, err := b.templateLoadingCallback() - if err != nil { - return err - } - + if b.index.Enabled() { esClient, err := elasticsearch.NewConnectedClient(esConfig) if err != nil { return err } - // Load template - err = loadCallback(esClient) + // prepare index by loading templates, lifecycle policies and write aliases + + m := b.index.Manager(esClient, idxmgmt.BeatsAssets(b.Fields)) + err = m.Setup(settings.Template, settings.ILMPolicy) if err != nil { return err } } - - fmt.Println("Loaded index template") + fmt.Println("Index setup complete.") } if settings.Dashboard { @@ -515,13 +495,6 @@ func (b *Beat) Setup(bt beat.Creator, settings SetupSettings) error { fmt.Println("Loaded Ingest pipelines") } - if settings.ILMPolicy { - if err := b.loadILMPolicy(); err != nil { - return err - } - fmt.Println("Loaded Index Lifecycle Management (ILM) policy") - } - return nil }()) } @@ -614,7 +587,12 @@ func (b *Beat) configure(settings Settings) error { return err } - return nil + imFactory := settings.IndexManagement + if imFactory == nil { + imFactory = idxmgmt.MakeDefaultSupport(settings.ILM) + } + b.index, err = imFactory(nil, b.Beat.Info, b.RawConfig) + return err } func (b *Beat) loadMeta() error { @@ -712,159 +690,50 @@ func (b *Beat) loadDashboards(ctx context.Context, force bool) error { return nil } -// registerTemplateLoading registers the loading of the template as a callback with -// the elasticsearch output. It is important the the registration happens before -// the publisher is created. -func (b *Beat) registerTemplateLoading() error { - var templateCfg template.TemplateConfig - - // Check if outputting to file is enabled, and output to file if it is - if b.Config.Template.Enabled() { - err := b.Config.Template.Unpack(&templateCfg) - if err != nil { - return fmt.Errorf("unpacking template config fails: %v", err) - } - } - - // Loads template by default if esOutput is enabled - if b.Config.Output.Name() == "elasticsearch" { - - // Get ES Index name for comparison - esCfg := struct { - Index string `config:"index"` - }{} - err := b.Config.Output.Config().Unpack(&esCfg) - if err != nil { - return err - } - - if esCfg.Index != "" && - (templateCfg.Name == "" || templateCfg.Pattern == "") && - (b.Config.Template == nil || b.Config.Template.Enabled()) { - return errors.New("setup.template.name and setup.template.pattern have to be set if index name is modified") - } - - if b.Config.Template == nil || (b.Config.Template != nil && b.Config.Template.Enabled()) { - - // load template through callback to make sure it is also loaded - // on reconnecting - callback, err := b.templateLoadingCallback() - if err != nil { - return err - } - elasticsearch.RegisterConnectCallback(callback) - } else if b.Config.ILM.Enabled() { - return errors.New("templates cannot be disable when using ILM") - } - - if b.Config.ILM.Enabled() { - cfgwarn.Beta("Index lifecycle management is enabled which is in beta.") - - ilmCfg, err := getILMConfig(b) - if err != nil { - return err - } - - err = b.prepareILMTemplate(ilmCfg) - if err != nil { - return err - } - - // Set the ingestion index to the rollover alias - logp.Info("Set output.elasticsearch.index to '%s' as ILM is enabled.", ilmCfg.RolloverAlias) - esCfg.Index = ilmCfg.RolloverAlias - err = b.Config.Output.Config().SetString("index", -1, ilmCfg.RolloverAlias) - if err != nil { - return errw.Wrap(err, "error setting output.elasticsearch.index") - } - - writeAliasCallback, err := b.writeAliasLoadingCallback() - if err != nil { - return err - } - - // Load write alias already on - esConfig := b.Config.Output.Config() - - // Check that ILM is enabled and the right elasticsearch version exists - esClient, err := elasticsearch.NewConnectedClient(esConfig) - if err != nil { - return err - } - - err = checkElasticsearchVersionIlm(esClient) - if err != nil { - return err - } - - err = checkILMFeatureEnabled(esClient) - if err != nil { - return err - } - - elasticsearch.RegisterConnectCallback(writeAliasCallback) - } - } - - return nil -} - -func (b *Beat) prepareILMTemplate(ilmCfg *ilmConfig) error { - // In case no template settings are set, config must be created - if b.Config.Template == nil { - b.Config.Template = common.NewConfig() - } - // Template name and pattern can't be configure when using ILM - logp.Info("Set setup.template.name to '%s' as ILM is enabled.", ilmCfg.RolloverAlias) - err := b.Config.Template.SetString("name", -1, ilmCfg.RolloverAlias) - if err != nil { - return errw.Wrap(err, "error setting setup.template.name") - } - pattern := fmt.Sprintf("%s-*", ilmCfg.RolloverAlias) - logp.Info("Set setup.template.pattern to '%s' as ILM is enabled.", pattern) - err = b.Config.Template.SetString("pattern", -1, pattern) - if err != nil { - return errw.Wrap(err, "error setting setup.template.pattern") +// registerESIndexManagement registers the loading of the template and ILM +// policy as a callback with the elasticsearch output. It is important the +// registration happens before the publisher is created. +func (b *Beat) registerESIndexManagement() error { + if b.Config.Output.Name() != "elasticsearch" || !b.index.Enabled() { + return nil } - // rollover_alias and lifecycle.name can't be configured and will be overwritten - logp.Info("Set settings.index.lifecycle.rollover_alias in template to %s as ILM is enabled.", ilmCfg.RolloverAlias) - err = b.Config.Template.SetString("settings.index.lifecycle.rollover_alias", -1, ilmCfg.RolloverAlias) + _, err := elasticsearch.RegisterConnectCallback(b.indexSetupCallback()) if err != nil { - return errw.Wrap(err, "error setting settings.index.lifecycle.rollover_alias") + return fmt.Errorf("failed to register index management with elasticsearch: %+v", err) } - logp.Info("Set settings.index.lifecycle.name in template to %s as ILM is enabled.", ILMPolicyName) - err = b.Config.Template.SetString("settings.index.lifecycle.name", -1, ILMPolicyName) - if err != nil { - return errw.Wrap(err, "error setting settings.index.lifecycle.name") - } - return nil } // Build and return a callback to load index template into ES -func (b *Beat) templateLoadingCallback() (func(esClient *elasticsearch.Client) error, error) { - callback := func(esClient *elasticsearch.Client) error { - if b.Config.Template == nil { - b.Config.Template = common.NewConfig() - } - - loader, err := template.NewLoader(b.Config.Template, esClient, b.Info, b.Fields, b.Config.Migration.Enabled()) - if err != nil { - return fmt.Errorf("Error creating Elasticsearch template loader: %v", err) - } +func (b *Beat) indexSetupCallback() func(esClient *elasticsearch.Client) error { + return func(esClient *elasticsearch.Client) error { + m := b.index.Manager(esClient, idxmgmt.BeatsAssets(b.Fields)) + return m.Setup(true, true) + } +} - err = loader.Load() - if err != nil { - return fmt.Errorf("Error loading Elasticsearch template: %v", err) - } +func (b *Beat) makeOutputReloader(outReloader pipeline.OutputReloader) reload.Reloadable { + return reload.ReloadableFunc(func(config *reload.ConfigWithMeta) error { + return outReloader.Reload(config, b.createOutput) + }) +} - logp.Info("Template successfully loaded.") +func (b *Beat) makeOutputFactory( + cfg common.ConfigNamespace, +) func(outputs.Observer) (string, outputs.Group, error) { + return func(outStats outputs.Observer) (string, outputs.Group, error) { + out, err := b.createOutput(outStats, cfg) + return cfg.Name(), out, err + } +} - return nil +func (b *Beat) createOutput(stats outputs.Observer, cfg common.ConfigNamespace) (outputs.Group, error) { + if !cfg.IsSet() { + return outputs.Group{}, nil } - return callback, nil + return outputs.Load(b.index, b.Info, stats, cfg.Name(), cfg.Config()) } // handleError handles the given error by logging it and then returning the diff --git a/libbeat/cmd/instance/ilm.go b/libbeat/cmd/instance/ilm.go deleted file mode 100644 index 0ef1f9778a60..000000000000 --- a/libbeat/cmd/instance/ilm.go +++ /dev/null @@ -1,216 +0,0 @@ -// Licensed to Elasticsearch B.V. under one or more contributor -// license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright -// ownership. Elasticsearch B.V. licenses this file to you under -// the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package instance - -import ( - "encoding/json" - "fmt" - "net/url" - - "github.com/pkg/errors" - - "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/logp" - "github.com/elastic/beats/libbeat/outputs/elasticsearch" -) - -type ilmConfig struct { - RolloverAlias string `config:"ilm.rollover_alias" ` - Pattern string `config:"ilm.pattern"` -} - -// ILMPolicy contains the default policy -var ILMPolicy = common.MapStr{ - "policy": common.MapStr{ - "phases": common.MapStr{ - "hot": common.MapStr{ - "actions": common.MapStr{ - "rollover": common.MapStr{ - "max_size": "50gb", - "max_age": "30d", - }, - }, - }, - }, - }, -} - -const ( - // ILMPolicyName is the default policy name - ILMPolicyName = "beats-default-policy" - // ILMDefaultPattern is the default pattern - ILMDefaultPattern = "{now/d}-000001" -) - -// Build and return a callback to load ILM write alias -func (b *Beat) writeAliasLoadingCallback() (func(esClient *elasticsearch.Client) error, error) { - callback := func(esClient *elasticsearch.Client) error { - if b.Config.ILM == nil { - b.Config.ILM = common.NewConfig() - } - - config, err := getILMConfig(b) - if err != nil { - return err - } - - // Escaping because of date pattern - pattern := url.PathEscape(config.Pattern) - // This always assume it's a date pattern by sourrounding it by <...> - firstIndex := fmt.Sprintf("%%3C%s-%s%%3E", config.RolloverAlias, pattern) - - // Check if alias already exists - status, b, err := esClient.Request("HEAD", "/_alias/"+config.RolloverAlias, "", nil, nil) - if err != nil && status != 404 { - logp.Err("Failed to check for alias: %s: %+v", err, string(b)) - return errors.Wrap(err, "failed to check for alias") - } - if status == 200 { - logp.Info("Write alias already exists") - return nil - } - - body := common.MapStr{ - "aliases": common.MapStr{ - config.RolloverAlias: common.MapStr{ - "is_write_index": true, - }, - }, - } - - // Create alias with write index - code, res, err := esClient.Request("PUT", "/"+firstIndex, "", nil, body) - if code == 400 { - logp.Err("Error creating alias with write index. As return code is 400, assuming already exists: %s, %s", err, string(res)) - return nil - - } else if err != nil { - logp.Err("Error creating alias with write index: %s, %s", err, string(res)) - return errors.Wrap(err, "failed to create write alias: "+string(res)) - } - - logp.Info("Alias with write index created: %s", firstIndex) - - return nil - } - - return callback, nil -} - -func (b *Beat) loadILMPolicy() error { - esClient, err := getElasticsearchClient(b) - if err != nil { - return err - } - - err = checkElasticsearchVersionIlm(esClient) - if err != nil { - return err - } - - err = checkILMFeatureEnabled(esClient) - if err != nil { - return err - } - - _, _, err = esClient.Request("PUT", "/_ilm/policy/"+ILMPolicyName, "", nil, ILMPolicy) - return err -} - -func getElasticsearchClient(b *Beat) (*elasticsearch.Client, error) { - outCfg := b.Config.Output - if outCfg.Name() != "elasticsearch" { - return nil, fmt.Errorf("Policy loading requested but the Elasticsearch output is not configured/enabled") - } - - esConfig := outCfg.Config() - - return elasticsearch.NewConnectedClient(esConfig) -} - -func loadConfigWithDefaults(config *ilmConfig, b *Beat) { - if config.RolloverAlias == "" { - config.RolloverAlias = fmt.Sprintf("%s-%s", b.Info.Beat, b.Info.Version) - } - - if config.Pattern == "" { - config.Pattern = ILMDefaultPattern - } -} - -func checkElasticsearchVersionIlm(client *elasticsearch.Client) error { - esV := client.GetVersion() - requiredVersion, err := common.NewVersion("6.6.0") - if err != nil { - return err - } - - if esV.LessThan(requiredVersion) { - return fmt.Errorf("ILM requires at least Elasticsearch 6.6.0. Used version: %s", esV.String()) - } - - return nil -} - -func checkILMFeatureEnabled(client *elasticsearch.Client) error { - code, body, err := client.Request("GET", "/_xpack", "", nil, nil) - - // If we get a 400, it's assumed to be the OSS version of Elasticsearch - if code == 400 { - return fmt.Errorf("ILM feature is not available in this Elasticsearch version") - } - if err != nil { - return err - } - - var response struct { - Features struct { - ILM struct { - Available bool `json:"available"` - Enabled bool `json:"enabled"` - } `json:"ilm"` - } `json:"features"` - } - - err = json.Unmarshal(body, &response) - if err != nil { - return fmt.Errorf("failed to parse JSON response: %v", err) - } - - if !response.Features.ILM.Available { - return fmt.Errorf("ILM feature is not available in Elasticsearch") - } - - if !response.Features.ILM.Enabled { - return fmt.Errorf("ILM feature is not enabled in Elasticsearch") - } - - return nil -} - -func getILMConfig(b *Beat) (*ilmConfig, error) { - config := &ilmConfig{} - err := b.Config.Output.Config().Unpack(config) - if err != nil { - return nil, errors.Wrap(err, "problem unpacking ilm configs") - } - - loadConfigWithDefaults(config, b) - - return config, nil -} diff --git a/libbeat/cmd/instance/settings.go b/libbeat/cmd/instance/settings.go index 8275282daad7..9b2bfd34a056 100644 --- a/libbeat/cmd/instance/settings.go +++ b/libbeat/cmd/instance/settings.go @@ -21,16 +21,23 @@ import ( "github.com/spf13/pflag" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" "github.com/elastic/beats/libbeat/monitoring/report" ) // Settings contains basic settings for any beat to pass into GenRootCmd type Settings struct { - Name string - IndexPrefix string - Version string - Monitoring report.Settings - RunFlags *pflag.FlagSet - ConfigOverrides *common.Config + Name string + IndexPrefix string + Version string + Monitoring report.Settings + RunFlags *pflag.FlagSet + ConfigOverrides *common.Config + DisableConfigResolver bool + + // load custom index manager. The config object will be the Beats root configuration. + IndexManagement idxmgmt.SupportFactory + ILM ilm.SupportFactory } diff --git a/libbeat/cmd/test/output.go b/libbeat/cmd/test/output.go index a94f90538983..ee855d8688b8 100644 --- a/libbeat/cmd/test/output.go +++ b/libbeat/cmd/test/output.go @@ -24,6 +24,7 @@ import ( "github.com/spf13/cobra" "github.com/elastic/beats/libbeat/cmd/instance" + "github.com/elastic/beats/libbeat/idxmgmt" "github.com/elastic/beats/libbeat/outputs" "github.com/elastic/beats/libbeat/testing" ) @@ -45,7 +46,8 @@ func GenTestOutputCmd(name, beatVersion string) *cobra.Command { os.Exit(1) } - output, err := outputs.Load(b.Info, nil, b.Config.Output.Name(), b.Config.Output.Config()) + im, _ := idxmgmt.DefaultSupport(nil, b.Info, nil) + output, err := outputs.Load(im, b.Info, nil, b.Config.Output.Name(), b.Config.Output.Config()) if err != nil { fmt.Fprintf(os.Stderr, "Error initializing output: %s\n", err) os.Exit(1) diff --git a/libbeat/common/reload/reload.go b/libbeat/common/reload/reload.go index 0e6933889e3c..ceb377274b55 100644 --- a/libbeat/common/reload/reload.go +++ b/libbeat/common/reload/reload.go @@ -47,6 +47,9 @@ type Reloadable interface { Reload(config *ConfigWithMeta) error } +// ReloadableFunc wraps a custom function in order to implement the Reloadable interface. +type ReloadableFunc func(config *ConfigWithMeta) error + // Registry of reloadable objects and lists type Registry struct { sync.RWMutex @@ -152,3 +155,8 @@ func (r *Registry) nameTaken(name string) bool { return false } + +// Reload calls the underlying function. +func (fn ReloadableFunc) Reload(config *ConfigWithMeta) error { + return fn(config) +} diff --git a/libbeat/docs/outputconfig.asciidoc b/libbeat/docs/outputconfig.asciidoc index 1e1e82604c39..57b9776342b1 100644 --- a/libbeat/docs/outputconfig.asciidoc +++ b/libbeat/docs/outputconfig.asciidoc @@ -342,15 +342,6 @@ This configuration results in indices named `sev1`, `sev2`, and `sev3`. The `mappings` setting simplifies the configuration, but is limited to string values. You cannot specify format strings within the mapping pairs. -//TODO: MOVE ILM OPTIONS TO APPEAR LOGICALLY BASED ON LOCATION IN THE YAML FILE. - -[[ilm-es]] -===== `ilm` - -Configuration options for index lifecycle management. - -See <> for more information. - ifndef::no-pipeline[] [[pipeline-option-es]] ===== `pipeline` diff --git a/libbeat/docs/shared-ilm.asciidoc b/libbeat/docs/shared-ilm.asciidoc index 61cac3791d3b..31c4001f27e5 100644 --- a/libbeat/docs/shared-ilm.asciidoc +++ b/libbeat/docs/shared-ilm.asciidoc @@ -18,15 +18,12 @@ existing indices. To use index lifecycle management on {beatname_uc} indices: -. Enable index lifecycle management by setting `ilm.enabled: true` in the {es} -output configuration. For example: +. Enable index lifecycle management by setting `setup.ilm.enabled: true`. For example: + -- [source,yaml] ------------------------------------------------------------------------------ -output.elasticsearch: - hosts: ["localhost:9200"] - ilm.enabled: true +setup.ilm.enabled: true ------------------------------------------------------------------------------ This configuration overwrites your index settings and adjusts the {beatname_uc} diff --git a/libbeat/idxmgmt/assets.go b/libbeat/idxmgmt/assets.go new file mode 100644 index 000000000000..e5ca4ca2e084 --- /dev/null +++ b/libbeat/idxmgmt/assets.go @@ -0,0 +1,32 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package idxmgmt + +type assets struct { + fields []byte +} + +// BeatsAssets creates an asseter with a predefine set of fields that is always +// reported. +func BeatsAssets(fields []byte) Asseter { + return &assets{fields: fields} +} + +func (a *assets) Fields(name string) []byte { + return a.fields // assume we have the beats global assets +} diff --git a/libbeat/idxmgmt/idxmgmt.go b/libbeat/idxmgmt/idxmgmt.go new file mode 100644 index 000000000000..b2f7f38568e1 --- /dev/null +++ b/libbeat/idxmgmt/idxmgmt.go @@ -0,0 +1,162 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package idxmgmt + +import ( + "errors" + "fmt" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/libbeat/outputs" + "github.com/elastic/beats/libbeat/template" +) + +// SupportFactory is used to provide custom index management support to libbeat. +type SupportFactory func(*logp.Logger, beat.Info, *common.Config) (Supporter, error) + +// Supporter provides index management and configuration related services +// throughout libbeat. +// The BuildSelector is used by the output to create an IndexSelector. The +// index selector will report the per event index name to be used. +// A manager instantiated via Supporter is responsible for instantiating/configuring +// the index throughout the Elastic Stack. +type Supporter interface { + // Enalbed checks if index management is configured to configure templates, + // ILM, or aliases. + Enabled() bool + + // ILM provides access to the configured ILM support. + ILM() ilm.Supporter + + // TemplateConfig returns the template configuration used by the index supporter. + TemplateConfig(withILM bool) (template.TemplateConfig, error) + + // BuildSelector create an index selector. + // The defaultIndex string is interpreted as format string. It is used + // as default index if the configuration provided does not define an index or + // has no default fallback if all indices are guarded by conditionals. + BuildSelector(cfg *common.Config) (outputs.IndexSelector, error) + + // Manager creates a new manager that can be used to execute the required steps + // for initializing an index, ILM policies, and write aliases. + Manager(client ESClient, assets Asseter) Manager +} + +// Asseter provides access to beats assets required to load the template. +type Asseter interface { + Fields(name string) []byte +} + +// ESClient defines the minimal interface required for the index manager to +// prepare an index. +type ESClient interface { + Request(method, path string, pipeline string, params map[string]string, body interface{}) (int, []byte, error) + GetVersion() common.Version +} + +// Manager is used to initialize indices, ILM policies, and aliases within the +// Elastic Stack. +type Manager interface { + Setup(template, policy bool) error +} + +// DefaultSupport initializes the default index management support used by most Beats. +func DefaultSupport(log *logp.Logger, info beat.Info, configRoot *common.Config) (Supporter, error) { + factory := MakeDefaultSupport(nil) + return factory(log, info, configRoot) +} + +// MakeDefaultSupport creates some default index management support, with a +// custom ILM support implementation. +func MakeDefaultSupport(ilmSupport ilm.SupportFactory) SupportFactory { + if ilmSupport == nil { + ilmSupport = ilm.DefaultSupport + } + + return func(log *logp.Logger, info beat.Info, configRoot *common.Config) (Supporter, error) { + const logName = "index-management" + + cfg := struct { + ILM *common.Config `config:"setup.ilm"` + Template *common.Config `config:"setup.template"` + Output common.ConfigNamespace `config:"output"` + Migration *common.Config `config:"migration"` + }{} + if configRoot != nil { + if err := configRoot.Unpack(&cfg); err != nil { + return nil, err + } + } + + if log == nil { + log = logp.NewLogger(logName) + } else { + log = log.Named(logName) + } + + if err := checkTemplateESSettings(cfg.Template, cfg.Output); err != nil { + return nil, err + } + + return newIndexSupport(log, info, ilmSupport, cfg.Template, cfg.ILM, cfg.Migration.Enabled()) + } +} + +// checkTemplateESSettings validates template settings and output.elasticsearch +// settings to be consistent. +// XXX: This is some legacy check that will not be active if the output is +// configured via Central Config Management. +// In the future we will have CM deal with index setup and providing a +// consistent output configuration. +// TODO: check if it's safe to move this check to the elasticsearch output +// (Not doing so, so to not interfere with outputs being setup via Central +// Management for now). +func checkTemplateESSettings(tmpl *common.Config, out common.ConfigNamespace) error { + if out.Name() != "elasticsearch" { + return nil + } + + enabled := tmpl == nil || tmpl.Enabled() + if !enabled { + return nil + } + + var tmplCfg template.TemplateConfig + if tmpl != nil { + if err := tmpl.Unpack(&tmplCfg); err != nil { + return fmt.Errorf("unpacking template config fails: %v", err) + } + } + + esCfg := struct { + Index string `config:"index"` + }{} + if err := out.Config().Unpack(&esCfg); err != nil { + return err + } + + tmplSet := tmplCfg.Name != "" && tmplCfg.Pattern != "" + if esCfg.Index != "" && !tmplSet { + return errors.New("setup.template.name and setup.template.pattern have to be set if index name is modified") + } + + return nil +} diff --git a/libbeat/idxmgmt/idxmgmt_test.go b/libbeat/idxmgmt/idxmgmt_test.go new file mode 100644 index 000000000000..3d7a841b7978 --- /dev/null +++ b/libbeat/idxmgmt/idxmgmt_test.go @@ -0,0 +1,272 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package idxmgmt + +import ( + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" + "github.com/elastic/beats/libbeat/template" +) + +func TestDefaultSupport_Enabled(t *testing.T) { + cases := map[string]struct { + ilmCalls []onCall + cfg map[string]interface{} + want bool + }{ + "templates and ilm disabled": { + want: false, + ilmCalls: []onCall{ + onMode().Return(ilm.ModeDisabled), + }, + cfg: map[string]interface{}{ + "setup.template.enabled": false, + }, + }, + "templates only": { + want: true, + ilmCalls: []onCall{ + onMode().Return(ilm.ModeDisabled), + }, + cfg: map[string]interface{}{ + "setup.template.enabled": true, + }, + }, + "ilm only": { + want: true, + ilmCalls: []onCall{ + onMode().Return(ilm.ModeEnabled), + }, + cfg: map[string]interface{}{ + "setup.template.enabled": false, + }, + }, + "ilm tentatively": { + want: true, + ilmCalls: []onCall{ + onMode().Return(ilm.ModeAuto), + }, + cfg: map[string]interface{}{ + "setup.template.enabled": false, + }, + }, + } + for name, test := range cases { + t.Run(name, func(t *testing.T) { + info := beat.Info{Beat: "test", Version: "9.9.9"} + factory := MakeDefaultSupport(makeMockILMSupport(test.ilmCalls...)) + im, err := factory(nil, info, common.MustNewConfigFrom(test.cfg)) + require.NoError(t, err) + assert.Equal(t, test.want, im.Enabled()) + }) + } +} + +func TestDefaultSupport_TemplateConfig(t *testing.T) { + ilmTemplateSettings := func(alias, policy string) []onCall { + return []onCall{ + onMode().Return(ilm.ModeEnabled), + onAlias().Return(ilm.Alias{Name: alias}), + onPolicy().Return(ilm.Policy{Name: policy}), + } + } + + cloneCfg := func(c template.TemplateConfig) template.TemplateConfig { + if c.AppendFields != nil { + tmp := make(common.Fields, len(c.AppendFields)) + copy(tmp, c.AppendFields) + c.AppendFields = tmp + } + + if c.Settings.Index != nil { + c.Settings.Index = (map[string]interface{})(common.MapStr(c.Settings.Index).Clone()) + } + if c.Settings.Index != nil { + c.Settings.Source = (map[string]interface{})(common.MapStr(c.Settings.Source).Clone()) + } + return c + } + + cfgWith := func(s template.TemplateConfig, mods ...map[string]interface{}) template.TemplateConfig { + for _, mod := range mods { + cfg := common.MustNewConfigFrom(mod) + s = cloneCfg(s) + err := cfg.Unpack(&s) + if err != nil { + panic(err) + } + } + return s + } + + cases := map[string]struct { + ilmCalls []onCall + cfg map[string]interface{} + want template.TemplateConfig + fail bool + }{ + "default template config": { + want: template.DefaultConfig(), + }, + "default template with ilm": { + ilmCalls: ilmTemplateSettings("alias", "test-9.9.9"), + want: cfgWith(template.DefaultConfig(), map[string]interface{}{ + "name": "alias", + "pattern": "alias-*", + "settings.index.lifecycle.name": "test-9.9.9", + "settings.index.lifecycle.rollover_alias": "alias", + }), + }, + } + for name, test := range cases { + t.Run(name, func(t *testing.T) { + info := beat.Info{Beat: "test", Version: "9.9.9"} + factory := MakeDefaultSupport(makeMockILMSupport(test.ilmCalls...)) + im, err := factory(nil, info, common.MustNewConfigFrom(test.cfg)) + require.NoError(t, err) + withILM := len(test.ilmCalls) > 0 + + tmpl, err := im.TemplateConfig(withILM) + if test.fail { + assert.Error(t, err) + } else { + require.NoError(t, err) + assert.Equal(t, test.want, tmpl) + } + }) + } +} + +func TestDefaultSupport_BuildSelector(t *testing.T) { + type nameFunc func(time.Time) string + + noILM := []onCall{onMode().Return(ilm.ModeDisabled)} + ilmTemplateSettings := func(alias, policy string) []onCall { + return []onCall{ + onMode().Return(ilm.ModeEnabled), + onAlias().Return(ilm.Alias{Name: alias}), + onPolicy().Return(ilm.Policy{Name: policy}), + } + } + + stable := func(s string) nameFunc { + return func(_ time.Time) string { return s } + } + dateIdx := func(base string) nameFunc { + return func(ts time.Time) string { + ext := fmt.Sprintf("%d.%02d.%02d", ts.Year(), ts.Month(), ts.Day()) + return fmt.Sprintf("%v-%v", base, ext) + } + } + + cases := map[string]struct { + ilmCalls []onCall + imCfg map[string]interface{} + cfg map[string]interface{} + want nameFunc + meta common.MapStr + }{ + "without ilm": { + ilmCalls: noILM, + cfg: map[string]interface{}{"index": "test-%{[agent.version]}"}, + want: stable("test-9.9.9"), + }, + "event alias without ilm": { + ilmCalls: noILM, + cfg: map[string]interface{}{"index": "test-%{[agent.version]}"}, + want: stable("test"), + meta: common.MapStr{ + "alias": "test", + }, + }, + "event index without ilm": { + ilmCalls: noILM, + cfg: map[string]interface{}{"index": "test-%{[agent.version]}"}, + want: dateIdx("test"), + meta: common.MapStr{ + "index": "test", + }, + }, + "with ilm": { + ilmCalls: ilmTemplateSettings("test-9.9.9", "test-9.9.9"), + cfg: map[string]interface{}{"index": "wrong-%{[agent.version]}"}, + want: stable("test-9.9.9"), + }, + "event alias wit ilm": { + ilmCalls: ilmTemplateSettings("test-9.9.9", "test-9.9.9"), + cfg: map[string]interface{}{"index": "test-%{[agent.version]}"}, + want: stable("event-alias"), + meta: common.MapStr{ + "alias": "event-alias", + }, + }, + "event index with ilm": { + ilmCalls: ilmTemplateSettings("test-9.9.9", "test-9.9.9"), + cfg: map[string]interface{}{"index": "test-%{[agent.version]}"}, + want: dateIdx("event-index"), + meta: common.MapStr{ + "index": "event-index", + }, + }, + "use indices": { + ilmCalls: ilmTemplateSettings("test-9.9.9", "test-9.9.9"), + cfg: map[string]interface{}{ + "index": "test-%{[agent.version]}", + "indices": []map[string]interface{}{ + {"index": "myindex"}, + }, + }, + want: stable("myindex"), + }, + } + for name, test := range cases { + t.Run(name, func(t *testing.T) { + ts := time.Now() + info := beat.Info{Beat: "test", Version: "9.9.9"} + + factory := MakeDefaultSupport(makeMockILMSupport(test.ilmCalls...)) + im, err := factory(nil, info, common.MustNewConfigFrom(test.imCfg)) + require.NoError(t, err) + + sel, err := im.BuildSelector(common.MustNewConfigFrom(test.cfg)) + require.NoError(t, err) + + meta := test.meta + idx, err := sel.Select(&beat.Event{ + Timestamp: ts, + Fields: common.MapStr{ + "test": "value", + "agent": common.MapStr{ + "version": "9.9.9", + }, + }, + Meta: meta, + }) + require.NoError(t, err) + assert.Equal(t, test.want(ts), idx) + }) + } +} diff --git a/libbeat/idxmgmt/ilm/config.go b/libbeat/idxmgmt/ilm/config.go new file mode 100644 index 000000000000..24934c1c6a6f --- /dev/null +++ b/libbeat/idxmgmt/ilm/config.go @@ -0,0 +1,124 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "fmt" + "strconv" + "strings" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/fmtstr" +) + +// Config is used for unpacking a common.Config. +type Config struct { + Mode Mode `config:"enabled"` + PolicyName fmtstr.EventFormatString `config:"policy_name"` + PolicyFile string `config:"policy_file"` + RolloverAlias string `config:"rollover_alias"` + Pattern string `config:"pattern"` + + // CheckExists can disable the check for an existing policy. Check required + // read_ilm privileges. If check is disabled the policy will only be + // installed if Overwrite is enabled. + CheckExists bool `config:"check_exists"` + + // Enable always overwrite policy mode. This required manage_ilm privileges. + Overwrite bool `config:"overwrite"` +} + +//Mode is used for enumerating the ilm mode. +type Mode uint8 + +const ( + //ModeAuto enum 'auto' + ModeAuto Mode = iota + + //ModeEnabled enum 'true' + ModeEnabled + + //ModeDisabled enum 'false' + ModeDisabled +) + +const ilmDefaultPattern = "{now/d}-000001" + +// DefaultPolicy defines the default policy to be used if no custom policy is +// configured. +// By default the policy contains not warm, cold, or delete phase. +// The index is configured to rollover every 50GB or after 30d. +var DefaultPolicy = common.MapStr{ + "policy": common.MapStr{ + "phases": common.MapStr{ + "hot": common.MapStr{ + "actions": common.MapStr{ + "rollover": common.MapStr{ + "max_size": "50gb", + "max_age": "30d", + }, + }, + }, + }, + }, +} + +//Unpack creates enumeration value true, false or auto +func (m *Mode) Unpack(in string) error { + in = strings.ToLower(in) + + if in == "auto" { + *m = ModeAuto + return nil + } + + b, err := strconv.ParseBool(in) + if err != nil { + return fmt.Errorf("ilm.enabled` mode '%v' is invalid (try auto, true, false)", in) + } + + if b { + *m = ModeEnabled + } else { + *m = ModeDisabled + } + return nil +} + +//Validate verifies that expected config options are given and valid +func (cfg *Config) Validate() error { + if cfg.RolloverAlias == "" && cfg.Mode != ModeDisabled { + return fmt.Errorf("rollover_alias must be set when ILM is not disabled") + } + return nil +} + +func defaultConfig(info beat.Info) Config { + name := fmt.Sprintf("%s-%s", info.Beat, info.Version) + nameFmt := fmtstr.MustCompileEvent(name) + + return Config{ + Mode: ModeAuto, + PolicyName: *nameFmt, + RolloverAlias: name, + Pattern: ilmDefaultPattern, + PolicyFile: "", + CheckExists: true, + } +} diff --git a/libbeat/idxmgmt/ilm/error.go b/libbeat/idxmgmt/ilm/error.go new file mode 100644 index 000000000000..4d644de9b983 --- /dev/null +++ b/libbeat/idxmgmt/ilm/error.go @@ -0,0 +1,94 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "errors" + "fmt" +) + +// Error indicates an error + reason describing the last error. +// The Reason() method returns a sentinal error value for comparison. +type Error struct { + reason error + cause error + message string +} + +var ( + ErrESVersionNotSupported = errors.New("ILM is not supported by the Elasticsearch version in use") + ErrILMCheckRequestFailed = errors.New("request checking for ILM availability failed") + ErrInvalidResponse = errors.New("invalid response received") + ErrESILMDisabled = errors.New("ILM is disabled in Elasticsearch") + ErrRequestFailed = errors.New("request failed") + ErrAliasAlreadyExists = errors.New("alias already exists") + ErrAliasCreateFailed = errors.New("failed to create write alias") + ErrOpNotAvailable = errors.New("operation not available") +) + +func errOf(reason error) error { + return &Error{reason: reason} +} + +func errf(reason error, msg string, vs ...interface{}) error { + return wrapErrf(nil, reason, msg, vs...) +} + +func wrapErr(cause, reason error) error { + return wrapErrf(cause, reason, "") +} + +func wrapErrf(cause, reason error, msg string, vs ...interface{}) error { + return &Error{ + cause: cause, + reason: reason, + message: fmt.Sprintf(msg, vs...), + } +} + +// ErrReason calls Reason() if the error implements this method. Otherwise return nil. +func ErrReason(err error) error { + if err == nil { + return nil + } + + ifc, ok := err.(interface{ Reason() error }) + if !ok { + return nil + } + return ifc.Reason() +} + +// Cause returns the errors cause, if present. +func (e *Error) Cause() error { return e.cause } + +// Reason returns a sentinal error value define within the ilm package. +func (e *Error) Reason() error { return e.reason } + +// Error returns the formatted error string. +func (e *Error) Error() string { + msg := e.message + if e.message == "" { + msg = e.reason.Error() + } + + if e.cause != nil { + return fmt.Sprintf("%v: %+v", msg, e.cause) + } + return msg +} diff --git a/libbeat/idxmgmt/ilm/eshandler.go b/libbeat/idxmgmt/ilm/eshandler.go new file mode 100644 index 000000000000..de493721bf71 --- /dev/null +++ b/libbeat/idxmgmt/ilm/eshandler.go @@ -0,0 +1,210 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "encoding/json" + "fmt" + "net/url" + "path" + + "github.com/elastic/beats/libbeat/common" +) + +type esClientHandler struct { + client ESClient +} + +var ( + esMinILMVersion = common.MustNewVersion("6.6.0") + esMinDefaultILMVesion = common.MustNewVersion("7.0.0") +) + +const ( + // esFeaturesPath is used to query Elasticsearch for availability of licensed + // features. + esFeaturesPath = "/_xpack" + + esILMPath = "/_ilm/policy" + + esAliasPath = "/_alias" +) + +// ESClientHandler creates a new APIHandler executing ILM, and alias queries +// against Elasticsearch. +func ESClientHandler(client ESClient) APIHandler { + if client == nil { + return nil + } + return &esClientHandler{client} +} + +// ESClient defines the minimal interface required for the ESClientHandler to +// prepare a policy and write alias. +type ESClient interface { + GetVersion() common.Version + Request( + method, path string, + pipeline string, + params map[string]string, + body interface{}, + ) (int, []byte, error) +} + +func (h *esClientHandler) ILMEnabled(mode Mode) (bool, error) { + if mode == ModeDisabled { + return false, nil + } + + avail, probe := h.checkILMVersion(mode) + if !avail { + if mode == ModeEnabled { + ver := h.client.GetVersion() + return false, errf(ErrESVersionNotSupported, + "Elasticsearch %v does not support ILM", ver.String()) + } + return false, nil + } + + if !probe { + // version potentially supports ILM, but mode + version indicates that we + // want to disable ILM support. + return false, nil + } + + avail, enabled, err := h.checkILMSupport() + if err != nil { + return false, err + } + + if !avail { + if mode == ModeEnabled { + return false, errOf(ErrESVersionNotSupported) + } + return false, nil + } + + if !enabled && mode == ModeEnabled { + return false, errOf(ErrESILMDisabled) + } + return enabled, nil +} + +func (h *esClientHandler) CreateILMPolicy(policy Policy) error { + path := path.Join(esILMPath, policy.Name) + _, _, err := h.client.Request("PUT", path, "", nil, policy.Body) + return err +} + +func (h *esClientHandler) HasILMPolicy(name string) (bool, error) { + // XXX: HEAD method does currently not work for checking if a policy exists + path := path.Join(esILMPath, name) + status, b, err := h.client.Request("GET", path, "", nil, nil) + if err != nil && status != 404 { + return false, wrapErrf(err, ErrRequestFailed, + "failed to check for policy name '%v': (status=%v) %s", name, status, b) + } + return status == 200, nil +} + +func (h *esClientHandler) HasAlias(name string) (bool, error) { + path := path.Join(esAliasPath, name) + status, b, err := h.client.Request("HEAD", path, "", nil, nil) + if err != nil && status != 404 { + return false, wrapErrf(err, ErrRequestFailed, + "failed to check for alias '%v': (status=%v) %s", name, status, b) + } + return status == 200, nil +} + +func (h *esClientHandler) CreateAlias(alias Alias) error { + // Escaping because of date pattern + // This always assume it's a date pattern by sourrounding it by <...> + firstIndex := fmt.Sprintf("<%s-%s>", alias.Name, alias.Pattern) + firstIndex = url.PathEscape(firstIndex) + + body := common.MapStr{ + "aliases": common.MapStr{ + alias.Name: common.MapStr{ + "is_write_index": true, + }, + }, + } + + // Note: actual aliases are accessible via the index + status, res, err := h.client.Request("PUT", "/"+firstIndex, "", nil, body) + if status == 400 { + return errOf(ErrAliasAlreadyExists) + } else if err != nil { + return wrapErrf(err, ErrAliasCreateFailed, "failed to create alias: %s", res) + } + + return nil +} + +func (h *esClientHandler) checkILMVersion(mode Mode) (avail, probe bool) { + ver := h.client.GetVersion() + avail = !ver.LessThan(esMinILMVersion) + if avail { + probe = (mode == ModeEnabled) || + (mode == ModeAuto && !ver.LessThan(esMinDefaultILMVesion)) + } + + return avail, probe +} + +func (h *esClientHandler) checkILMSupport() (avail, enbaled bool, err error) { + var response struct { + Features struct { + ILM struct { + Available bool `json:"available"` + Enabled bool `json:"enabled"` + } `json:"ilm"` + } `json:"features"` + } + status, err := h.queryFeatures(&response) + if status == 400 { + // If we get a 400, it's assumed to be the OSS version of Elasticsearch + return false, false, nil + } + if err != nil { + return false, false, wrapErr(err, ErrILMCheckRequestFailed) + } + + avail = response.Features.ILM.Available + enbaled = response.Features.ILM.Enabled + return avail, enbaled, nil +} + +func (h *esClientHandler) queryFeatures(to interface{}) (int, error) { + status, body, err := h.client.Request("GET", esFeaturesPath, "", nil, nil) + if status >= 400 || err != nil { + return status, err + } + + if to != nil { + if err := json.Unmarshal(body, to); err != nil { + return status, wrapErrf(err, ErrInvalidResponse, "failed to parse JSON response") + } + } + return status, nil +} + +func (h *esClientHandler) access() ESClient { + return h.client +} diff --git a/libbeat/idxmgmt/ilm/eshandler_integration_test.go b/libbeat/idxmgmt/ilm/eshandler_integration_test.go new file mode 100644 index 000000000000..808ab48b47d4 --- /dev/null +++ b/libbeat/idxmgmt/ilm/eshandler_integration_test.go @@ -0,0 +1,207 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//+build integration + +package ilm_test + +import ( + "fmt" + "os" + "testing" + "time" + + "github.com/gofrs/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/elastic/beats/libbeat/idxmgmt/ilm" + "github.com/elastic/beats/libbeat/outputs/elasticsearch" + "github.com/elastic/beats/libbeat/outputs/outil" +) + +const ( + // ElasticsearchDefaultHost is the default host for elasticsearch. + ElasticsearchDefaultHost = "localhost" + // ElasticsearchDefaultPort is the default port for elasticsearch. + ElasticsearchDefaultPort = "9200" +) + +func TestESClientHandler_ILMEnabled(t *testing.T) { + t.Run("no ilm if disabled", func(t *testing.T) { + h := newESClientHandler(t) + b, err := h.ILMEnabled(ilm.ModeDisabled) + assert.NoError(t, err) + assert.False(t, b) + }) + + t.Run("with ilm if auto", func(t *testing.T) { + h := newESClientHandler(t) + b, err := h.ILMEnabled(ilm.ModeAuto) + assert.NoError(t, err) + assert.True(t, b) + }) + + t.Run("with ilm if enabled", func(t *testing.T) { + h := newESClientHandler(t) + b, err := h.ILMEnabled(ilm.ModeEnabled) + assert.NoError(t, err) + assert.True(t, b) + }) +} + +func TestESClientHandler_ILMPolicy(t *testing.T) { + t.Run("does not exist", func(t *testing.T) { + name := makeName("esch-policy-no") + h := newESClientHandler(t) + b, err := h.HasILMPolicy(name) + assert.NoError(t, err) + assert.False(t, b) + }) + + t.Run("create new", func(t *testing.T) { + policy := ilm.Policy{ + Name: makeName("esch-policy-create"), + Body: ilm.DefaultPolicy, + } + h := newESClientHandler(t) + err := h.CreateILMPolicy(policy) + require.NoError(t, err) + + b, err := h.HasILMPolicy(policy.Name) + assert.NoError(t, err) + assert.True(t, b) + }) + + t.Run("overwrite", func(t *testing.T) { + policy := ilm.Policy{ + Name: makeName("esch-policy-overwrite"), + Body: ilm.DefaultPolicy, + } + h := newESClientHandler(t) + + err := h.CreateILMPolicy(policy) + require.NoError(t, err) + + // check second 'create' does not throw (assuming race with other beat) + err = h.CreateILMPolicy(policy) + require.NoError(t, err) + + b, err := h.HasILMPolicy(policy.Name) + assert.NoError(t, err) + assert.True(t, b) + }) +} + +func TestESClientHandler_Alias(t *testing.T) { + makeAlias := func(base string) ilm.Alias { + return ilm.Alias{ + Name: makeName(base), + Pattern: "{now/d}-000001", + } + } + + t.Run("does not exist", func(t *testing.T) { + name := makeName("esch-alias-no") + h := newESClientHandler(t) + b, err := h.HasAlias(name) + assert.NoError(t, err) + assert.False(t, b) + }) + + t.Run("create new", func(t *testing.T) { + alias := makeAlias("esch-alias-create") + h := newESClientHandler(t) + err := h.CreateAlias(alias) + assert.NoError(t, err) + + b, err := h.HasAlias(alias.Name) + assert.NoError(t, err) + assert.True(t, b) + }) + + t.Run("second create", func(t *testing.T) { + alias := makeAlias("esch-alias-2create") + h := newESClientHandler(t) + + err := h.CreateAlias(alias) + assert.NoError(t, err) + + err = h.CreateAlias(alias) + require.Error(t, err) + assert.Equal(t, ilm.ErrAliasAlreadyExists, ilm.ErrReason(err)) + + b, err := h.HasAlias(alias.Name) + assert.NoError(t, err) + assert.True(t, b) + }) +} + +func newESClientHandler(t *testing.T) ilm.APIHandler { + client, err := elasticsearch.NewClient(elasticsearch.ClientSettings{ + URL: getURL(), + Index: outil.MakeSelector(), + Username: getUser(), + Password: getUser(), + Timeout: 60 * time.Second, + CompressionLevel: 3, + }, nil) + if err != nil { + t.Fatal(err) + } + + if err := client.Connect(); err != nil { + t.Fatalf("Failed to connect to Test Elasticsearch instance: %v", err) + } + + return ilm.ESClientHandler(client) +} + +func makeName(base string) string { + id, err := uuid.NewV4() + if err != nil { + panic(err) + } + return fmt.Sprintf("%v-%v", base, id.String()) +} + +func getURL() string { + return fmt.Sprintf("http://%v:%v", getEsHost(), getEsPort()) +} + +// GetEsHost returns the Elasticsearch testing host. +func getEsHost() string { + return getEnv("ES_HOST", ElasticsearchDefaultHost) +} + +// GetEsPort returns the Elasticsearch testing port. +func getEsPort() string { + return getEnv("ES_PORT", ElasticsearchDefaultPort) +} + +// GetUser returns the Elasticsearch testing user. +func getUser() string { return getEnv("ES_USER", "") } + +// GetPass returns the Elasticsearch testing user's password. +func getPass() string { return getEnv("ES_PASS", "") } + +func getEnv(name, def string) string { + if v := os.Getenv(name); v != "" { + return v + } + return def +} diff --git a/libbeat/idxmgmt/ilm/ilm.go b/libbeat/idxmgmt/ilm/ilm.go new file mode 100644 index 000000000000..6ca833b978fd --- /dev/null +++ b/libbeat/idxmgmt/ilm/ilm.go @@ -0,0 +1,147 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "encoding/json" + "io/ioutil" + "time" + + "github.com/pkg/errors" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/fmtstr" + "github.com/elastic/beats/libbeat/logp" +) + +// SupportFactory is used to define a policy type to be used. +type SupportFactory func(*logp.Logger, beat.Info, *common.Config) (Supporter, error) + +// Supporter implements ILM support. For loading the policies and creating +// write alias a manager instance must be generated. +type Supporter interface { + Mode() Mode + Alias() Alias + Policy() Policy + Manager(h APIHandler) Manager +} + +// Manager uses an APIHandler to install a policy. +type Manager interface { + Enabled() (bool, error) + EnsureAlias() error + EnsurePolicy(overwrite bool) error +} + +// APIHandler defines the interface between a remote service and the Manager. +type APIHandler interface { + ILMEnabled(Mode) (bool, error) + + HasAlias(name string) (bool, error) + CreateAlias(alias Alias) error + + HasILMPolicy(name string) (bool, error) + CreateILMPolicy(policy Policy) error +} + +// Policy describes a policy to be loaded into Elasticsearch. +// See: [Policy phases and actions documentation](https://www.elastic.co/guide/en/elasticsearch/reference/master/ilm-policy-definition.html). +type Policy struct { + Name string + Body map[string]interface{} +} + +// Alias describes the alias to be created in Elasticsearch. +type Alias struct { + Name string + Pattern string +} + +// DefaultSupport configures a new default ILM support implementation. +func DefaultSupport(log *logp.Logger, info beat.Info, config *common.Config) (Supporter, error) { + if log == nil { + log = logp.NewLogger("ilm") + } else { + log = log.Named("ilm") + } + + cfg := defaultConfig(info) + if config != nil { + if err := config.Unpack(&cfg); err != nil { + return nil, err + } + } + + if cfg.Mode == ModeDisabled { + return NoopSupport(info, config) + } + + name, err := applyStaticFmtstr(info, &cfg.PolicyName) + if err != nil { + return nil, errors.Wrap(err, "failed to read ilm policy name") + } + + alias := Alias{ + Name: cfg.RolloverAlias, + Pattern: cfg.Pattern, + } + + policy := Policy{ + Name: name, + Body: DefaultPolicy, + } + if path := cfg.PolicyFile; path != "" { + contents, err := ioutil.ReadFile(path) + if err != nil { + return nil, errors.Wrapf(err, "failed to read policy file '%v'", path) + } + + var body map[string]interface{} + if err := json.Unmarshal(contents, &body); err != nil { + return nil, errors.Wrapf(err, "failed to decode policy file '%v'", path) + } + + policy.Body = body + } + + log.Infof("Policy name: %v", name) + return NewDefaultSupport(log, cfg.Mode, alias, policy, cfg.Overwrite, cfg.CheckExists), nil +} + +func applyStaticFmtstr(info beat.Info, fmt *fmtstr.EventFormatString) (string, error) { + return fmt.Run(&beat.Event{ + Fields: common.MapStr{ + // beat object was left in for backward compatibility reason for older configs. + "beat": common.MapStr{ + "name": info.Beat, + "version": info.Version, + }, + "agent": common.MapStr{ + "name": info.Beat, + "version": info.Version, + }, + // For the Beats that have an observer role + "observer": common.MapStr{ + "name": info.Beat, + "version": info.Version, + }, + }, + Timestamp: time.Now(), + }) +} diff --git a/libbeat/idxmgmt/ilm/ilm_test.go b/libbeat/idxmgmt/ilm/ilm_test.go new file mode 100644 index 000000000000..e4a6ccf2864c --- /dev/null +++ b/libbeat/idxmgmt/ilm/ilm_test.go @@ -0,0 +1,279 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" +) + +func TestDefaultSupport_Init(t *testing.T) { + info := beat.Info{Beat: "test", Version: "9.9.9"} + + t.Run("mode from config", func(t *testing.T) { + cases := map[string]Mode{ + "true": ModeEnabled, + "false": ModeDisabled, + "auto": ModeAuto, + } + for setting, expected := range cases { + expected := expected + t.Run(setting, func(t *testing.T) { + cfg := common.MustNewConfigFrom(map[string]interface{}{ + "enabled": setting, + "rollover_alias": "test", + }) + + s, err := DefaultSupport(nil, info, cfg) + require.NoError(t, err) + assert.Equal(t, expected, s.Mode()) + }) + } + }) + + t.Run("with custom config", func(t *testing.T) { + tmp, err := DefaultSupport(nil, info, common.MustNewConfigFrom( + map[string]interface{}{ + "enabled": true, + "name": "test-%{[agent.version]}", + "rollover_alias": "alias", + "pattern": "01", + "check_exists": false, + "overwrite": true, + }, + )) + require.NoError(t, err) + + s := tmp.(*ilmSupport) + assert := assert.New(t) + assert.Equal(true, s.overwrite) + assert.Equal(false, s.checkExists) + assert.Equal(ModeEnabled, s.Mode()) + assert.Equal(DefaultPolicy, common.MapStr(s.Policy().Body)) + assert.Equal(Alias{Name: "alias", Pattern: "01"}, s.Alias()) + }) + + t.Run("load external policy", func(t *testing.T) { + s, err := DefaultSupport(nil, info, common.MustNewConfigFrom( + map[string]interface{}{ + "policy_file": "testfiles/custom.json", + }, + )) + require.NoError(t, err) + assert.Equal(t, map[string]interface{}{"hello": "world"}, s.Policy().Body) + }) +} + +func TestDefaultSupport_Manager_Enabled(t *testing.T) { + cases := map[string]struct { + calls []onCall + cfg map[string]interface{} + b bool + fail error + err bool + }{ + "disabled via config": { + cfg: map[string]interface{}{"enabled": false}, + }, + "disabled via handler": { + calls: []onCall{ + onILMEnabled(ModeAuto).Return(false, nil), + }, + }, + "enabled via handler": { + calls: []onCall{ + onILMEnabled(ModeAuto).Return(true, nil), + }, + b: true, + }, + "handler confirms enabled flag": { + calls: []onCall{ + onILMEnabled(ModeEnabled).Return(true, nil), + }, + cfg: map[string]interface{}{"enabled": true}, + b: true, + }, + "fail enabled": { + calls: []onCall{ + onILMEnabled(ModeEnabled).Return(false, nil), + }, + cfg: map[string]interface{}{"enabled": true}, + fail: ErrESILMDisabled, + }, + "io error": { + calls: []onCall{ + onILMEnabled(ModeAuto).Return(false, errors.New("ups")), + }, + cfg: map[string]interface{}{}, + err: true, + }, + } + + for name, test := range cases { + t.Run(name, func(t *testing.T) { + cfg := test.cfg + if cfg == nil { + cfg = map[string]interface{}{} + } + + h := newMockHandler(test.calls...) + m := createManager(t, h, test.cfg) + b, err := m.Enabled() + + if test.fail == nil && !test.err { + require.NoError(t, err) + } + if test.err || test.fail != nil { + require.Error(t, err) + } + if test.fail != nil { + assert.Equal(t, test.fail, ErrReason(err)) + } + + assert.Equal(t, test.b, b) + h.AssertExpectations(t) + }) + } +} + +func TestDefaultSupport_Manager_EnsureAlias(t *testing.T) { + alias := Alias{ + Name: "test-9.9.9", + Pattern: ilmDefaultPattern, + } + + cases := map[string]struct { + calls []onCall + cfg map[string]interface{} + fail error + }{ + "create new alias": { + calls: []onCall{ + onHasAlias(alias.Name).Return(false, nil), + onCreateAlias(alias).Return(nil), + }, + }, + "alias already exists": { + calls: []onCall{ + onHasAlias(alias.Name).Return(true, nil), + }, + }, + "fail": { + calls: []onCall{ + onHasAlias(alias.Name).Return(false, nil), + onCreateAlias(alias).Return(errOf(ErrRequestFailed)), + }, + fail: ErrRequestFailed, + }, + } + + for name, test := range cases { + t.Run(name, func(t *testing.T) { + cfg := test.cfg + if cfg == nil { + cfg = map[string]interface{}{"alias": "test"} + } + + h := newMockHandler(test.calls...) + m := createManager(t, h, test.cfg) + err := m.EnsureAlias() + + if test.fail == nil { + require.NoError(t, err) + } else { + require.Error(t, err) + assert.Equal(t, test.fail, ErrReason(err)) + } + h.AssertExpectations(t) + }) + } +} + +func TestDefaultSupport_Manager_EnsurePolicy(t *testing.T) { + testPolicy := Policy{ + Name: "test-9.9.9", + Body: DefaultPolicy, + } + + cases := map[string]struct { + calls []onCall + overwrite bool + cfg map[string]interface{} + fail error + }{ + "create new policy": { + calls: []onCall{ + onHasILMPolicy(testPolicy.Name).Return(false, nil), + onCreateILMPolicy(testPolicy).Return(nil), + }, + }, + "policy already exists": { + calls: []onCall{ + onHasILMPolicy(testPolicy.Name).Return(true, nil), + }, + }, + "overwrite existing": { + overwrite: true, + calls: []onCall{ + onCreateILMPolicy(testPolicy).Return(nil), + }, + }, + "fail": { + calls: []onCall{ + onHasILMPolicy(testPolicy.Name).Return(false, nil), + onCreateILMPolicy(testPolicy).Return(errOf(ErrRequestFailed)), + }, + fail: ErrRequestFailed, + }, + } + + for name, test := range cases { + test := test + t.Run(name, func(t *testing.T) { + cfg := test.cfg + if cfg == nil { + cfg = map[string]interface{}{"name": "test"} + } + + h := newMockHandler(test.calls...) + m := createManager(t, h, test.cfg) + err := m.EnsurePolicy(test.overwrite) + + if test.fail == nil { + require.NoError(t, err) + } else { + require.Error(t, err) + assert.Equal(t, test.fail, ErrReason(err)) + } + h.AssertExpectations(t) + }) + } +} + +func createManager(t *testing.T, h APIHandler, cfg map[string]interface{}) Manager { + info := beat.Info{Beat: "test", Version: "9.9.9"} + s, err := DefaultSupport(nil, info, common.MustNewConfigFrom(cfg)) + require.NoError(t, err) + return s.Manager(h) +} diff --git a/libbeat/idxmgmt/ilm/mockapihandler_test.go b/libbeat/idxmgmt/ilm/mockapihandler_test.go new file mode 100644 index 000000000000..6c1313b30913 --- /dev/null +++ b/libbeat/idxmgmt/ilm/mockapihandler_test.go @@ -0,0 +1,79 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "github.com/stretchr/testify/mock" +) + +type mockHandler struct { + mock.Mock +} + +type onCall struct { + name string + args []interface{} + returns []interface{} +} + +func (c onCall) Return(values ...interface{}) onCall { + c.returns = values + return c +} + +func newMockHandler(calls ...onCall) *mockHandler { + m := &mockHandler{} + for _, c := range calls { + m.On(c.name, c.args...).Return(c.returns...) + } + return m +} + +func onILMEnabled(m Mode) onCall { return makeOnCall("ILMEnabled", m) } +func (h *mockHandler) ILMEnabled(mode Mode) (bool, error) { + args := h.Called(mode) + return args.Bool(0), args.Error(1) +} + +func onHasAlias(name string) onCall { return makeOnCall("HasAlias", name) } +func (h *mockHandler) HasAlias(name string) (bool, error) { + args := h.Called(name) + return args.Bool(0), args.Error(1) +} + +func onCreateAlias(alias Alias) onCall { return makeOnCall("CreateAlias", alias) } +func (h *mockHandler) CreateAlias(alias Alias) error { + args := h.Called(alias) + return args.Error(0) +} + +func onHasILMPolicy(name string) onCall { return makeOnCall("HasILMPolicy", name) } +func (h *mockHandler) HasILMPolicy(name string) (bool, error) { + args := h.Called(name) + return args.Bool(0), args.Error(1) +} + +func onCreateILMPolicy(policy Policy) onCall { return makeOnCall("CreateILMPolicy", policy) } +func (h *mockHandler) CreateILMPolicy(policy Policy) error { + args := h.Called(policy) + return args.Error(0) +} + +func makeOnCall(name string, args ...interface{}) onCall { + return onCall{name: name, args: args} +} diff --git a/libbeat/idxmgmt/ilm/noop.go b/libbeat/idxmgmt/ilm/noop.go new file mode 100644 index 000000000000..129ca4c9eab7 --- /dev/null +++ b/libbeat/idxmgmt/ilm/noop.go @@ -0,0 +1,41 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" +) + +type noopSupport struct{} +type noopManager struct{} + +// NoopSupport creates a noop ILM implementation with ILM support being always +// disabled. Attempts to install a policy or create a write alias will fail. +func NoopSupport(info beat.Info, config *common.Config) (Supporter, error) { + return (*noopSupport)(nil), nil +} + +func (*noopSupport) Mode() Mode { return ModeDisabled } +func (*noopSupport) Alias() Alias { return Alias{} } +func (*noopSupport) Policy() Policy { return Policy{} } +func (*noopSupport) Manager(_ APIHandler) Manager { return (*noopManager)(nil) } + +func (*noopManager) Enabled() (bool, error) { return false, nil } +func (*noopManager) EnsureAlias() error { return errOf(ErrOpNotAvailable) } +func (*noopManager) EnsurePolicy(_ bool) error { return errOf(ErrOpNotAvailable) } diff --git a/libbeat/idxmgmt/ilm/std.go b/libbeat/idxmgmt/ilm/std.go new file mode 100644 index 000000000000..8c55e471136e --- /dev/null +++ b/libbeat/idxmgmt/ilm/std.go @@ -0,0 +1,141 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package ilm + +import ( + "time" + + "github.com/elastic/beats/libbeat/logp" +) + +type ilmSupport struct { + log *logp.Logger + + mode Mode + overwrite bool + checkExists bool + + alias Alias + policy Policy +} + +type singlePolicyManager struct { + *ilmSupport + client APIHandler + + // cached info + cache infoCache +} + +type infoCache struct { + LastUpdate time.Time + Enabled bool +} + +var defaultCacheDuration = 5 * time.Minute + +// NewDefaultSupport creates an instance of default ILM support implementation. +func NewDefaultSupport( + log *logp.Logger, + mode Mode, + alias Alias, + policy Policy, + overwrite, checkExists bool, +) Supporter { + return &ilmSupport{ + log: log, + mode: mode, + overwrite: overwrite, + checkExists: checkExists, + alias: alias, + policy: policy, + } +} + +func (s *ilmSupport) Mode() Mode { return s.mode } +func (s *ilmSupport) Alias() Alias { return s.alias } +func (s *ilmSupport) Policy() Policy { return s.policy } + +func (s *ilmSupport) Manager(h APIHandler) Manager { + return &singlePolicyManager{ + client: h, + ilmSupport: s, + } +} + +func (m *singlePolicyManager) Enabled() (bool, error) { + if m.mode == ModeDisabled { + return false, nil + } + + if m.cache.Valid() { + return m.cache.Enabled, nil + } + + enabled, err := m.client.ILMEnabled(m.mode) + if err != nil { + return enabled, err + } + + if !enabled && m.mode == ModeEnabled { + return false, errOf(ErrESILMDisabled) + } + + m.cache.Enabled = enabled + m.cache.LastUpdate = time.Now() + return enabled, nil +} + +func (m *singlePolicyManager) EnsureAlias() error { + b, err := m.client.HasAlias(m.alias.Name) + if err != nil { + return err + } + if b { + return nil + } + + // This always assume it's a date pattern by sourrounding it by <...> + return m.client.CreateAlias(m.alias) +} + +func (m *singlePolicyManager) EnsurePolicy(overwrite bool) error { + log := m.log + overwrite = overwrite || m.overwrite + + exists := true + if m.checkExists && !overwrite { + b, err := m.client.HasILMPolicy(m.policy.Name) + if err != nil { + return err + } + exists = b + } + + if !exists || overwrite { + return m.client.CreateILMPolicy(m.policy) + } + + log.Infof("do not generate ilm policy: exists=%v, overwrite=%v", + exists, overwrite) + return nil +} + +func (c *infoCache) Valid() bool { + return !c.LastUpdate.IsZero() && time.Since(c.LastUpdate) < defaultCacheDuration +} diff --git a/libbeat/idxmgmt/ilm/testfiles/custom.json b/libbeat/idxmgmt/ilm/testfiles/custom.json new file mode 100644 index 000000000000..56c8e280338e --- /dev/null +++ b/libbeat/idxmgmt/ilm/testfiles/custom.json @@ -0,0 +1 @@ +{"hello": "world"} diff --git a/libbeat/idxmgmt/mockilm_test.go b/libbeat/idxmgmt/mockilm_test.go new file mode 100644 index 000000000000..5aac9419ace8 --- /dev/null +++ b/libbeat/idxmgmt/mockilm_test.go @@ -0,0 +1,96 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package idxmgmt + +import ( + "github.com/stretchr/testify/mock" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" + "github.com/elastic/beats/libbeat/logp" +) + +type mockILMSupport struct { + mock.Mock +} + +type onCall struct { + name string + args []interface{} + returns []interface{} +} + +func makeMockILMSupport(calls ...onCall) ilm.SupportFactory { + return func(_ *logp.Logger, _ beat.Info, _ *common.Config) (ilm.Supporter, error) { + m := &mockILMSupport{} + for _, c := range calls { + m.On(c.name, c.args...).Return(c.returns...) + } + return m, nil + } +} + +func (c onCall) Return(values ...interface{}) onCall { + c.returns = values + return c +} + +func onMode() onCall { return makeOnCall("Mode") } +func (m *mockILMSupport) Mode() ilm.Mode { + args := m.Called() + return args.Get(0).(ilm.Mode) +} + +func onAlias() onCall { return makeOnCall("Alias") } +func (m *mockILMSupport) Alias() ilm.Alias { + args := m.Called() + return args.Get(0).(ilm.Alias) +} + +func onPolicy() onCall { return makeOnCall("Policy") } +func (m *mockILMSupport) Policy() ilm.Policy { + args := m.Called() + return args.Get(0).(ilm.Policy) +} + +func (m *mockILMSupport) Manager(_ ilm.APIHandler) ilm.Manager { + return m +} + +func onEnabled() onCall { return makeOnCall("Enabled") } +func (m *mockILMSupport) Enabled() (bool, error) { + args := m.Called() + return args.Bool(0), args.Error(1) +} + +func onEnsureAlias() onCall { return makeOnCall("EnsureAlias") } +func (m *mockILMSupport) EnsureAlias() error { + args := m.Called() + return args.Error(0) +} + +func onEnsurePolicy() onCall { return makeOnCall("EnsurePolicy") } +func (m *mockILMSupport) EnsurePolicy(overwrite bool) error { + args := m.Called() + return args.Error(0) +} + +func makeOnCall(name string, args ...interface{}) onCall { + return onCall{name: name, args: args} +} diff --git a/libbeat/idxmgmt/std.go b/libbeat/idxmgmt/std.go new file mode 100644 index 000000000000..a2e8149e7bba --- /dev/null +++ b/libbeat/idxmgmt/std.go @@ -0,0 +1,403 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package idxmgmt + +import ( + "errors" + "fmt" + + "github.com/elastic/beats/libbeat/beat" + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/common/atomic" + "github.com/elastic/beats/libbeat/idxmgmt/ilm" + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/libbeat/outputs" + "github.com/elastic/beats/libbeat/outputs/outil" + "github.com/elastic/beats/libbeat/template" +) + +type indexSupport struct { + log *logp.Logger + ilm ilm.Supporter + info beat.Info + migration bool + templateCfg template.TemplateConfig + defaultIndex string + + st indexState +} + +type indexState struct { + withILM atomic.Bool +} + +type indexManager struct { + support *indexSupport + ilm ilm.Manager + + client ESClient + assets Asseter +} + +type indexSelector outil.Selector + +type ilmIndexSelector struct { + index outil.Selector + alias outil.Selector + st *indexState +} + +func newIndexSupport( + log *logp.Logger, + info beat.Info, + ilmFactory ilm.SupportFactory, + tmplConfig *common.Config, + ilmConfig *common.Config, + migration bool, +) (*indexSupport, error) { + if ilmFactory == nil { + ilmFactory = ilm.DefaultSupport + } + + ilm, err := ilmFactory(log, info, ilmConfig) + if err != nil { + return nil, err + } + + tmplCfg, err := unpackTemplateConfig(tmplConfig) + if err != nil { + return nil, err + } + + return &indexSupport{ + log: log, + ilm: ilm, + info: info, + templateCfg: tmplCfg, + migration: migration, + defaultIndex: fmt.Sprintf("%v-%v-%%{+yyyy.MM.dd}", info.IndexPrefix, info.Version), + }, nil +} + +func (s *indexSupport) Enabled() bool { + return s.templateCfg.Enabled || (s.ilm.Mode() != ilm.ModeDisabled) +} + +func (s *indexSupport) ILM() ilm.Supporter { + return s.ilm +} + +func (s *indexSupport) TemplateConfig(withILM bool) (template.TemplateConfig, error) { + log := s.log + + cfg := s.templateCfg + if withILM { + if mode := s.ilm.Mode(); mode == ilm.ModeDisabled { + withILM = false + } else if mode == ilm.ModeEnabled { + withILM = true + } + } + + var err error + if withILM { + cfg, err = applyILMSettings(log, cfg, s.ilm.Policy(), s.ilm.Alias()) + } + return cfg, err +} + +func (s *indexSupport) Manager( + client ESClient, + assets Asseter, +) Manager { + ilm := s.ilm.Manager(ilm.ESClientHandler(client)) + return &indexManager{ + support: s, + ilm: ilm, + client: client, + assets: assets, + } +} + +func (s *indexSupport) BuildSelector(cfg *common.Config) (outputs.IndexSelector, error) { + var err error + log := s.log + + // we construct our own configuration object based on the available settings + // in cfg and defaultIndex. The configuration object provided must not be + // modified. + selCfg := common.NewConfig() + if cfg.HasField("indices") { + sub, err := cfg.Child("indices", -1) + if err != nil { + return nil, err + } + selCfg.SetChild("indices", -1, sub) + } + + var indexName string + if cfg.HasField("index") { + indexName, err = cfg.String("index", -1) + if err != nil { + return nil, err + } + } + + var alias string + mode := s.ilm.Mode() + if mode != ilm.ModeDisabled { + alias = s.ilm.Alias().Name + log.Infof("Set %v to '%s' as ILM is enabled.", cfg.PathOf("index"), alias) + } + if mode == ilm.ModeEnabled { + indexName = alias + } + + // no index name configuration found yet -> define default index name based on + // beat.Info provided to the indexSupport on during setup. + if indexName == "" { + indexName = s.defaultIndex + } + + selCfg.SetString("index", -1, indexName) + buildSettings := outil.Settings{ + Key: "index", + MultiKey: "indices", + EnableSingleOnly: true, + FailEmpty: mode != ilm.ModeEnabled, + } + + indexSel, err := outil.BuildSelectorFromConfig(selCfg, buildSettings) + if err != nil { + return nil, err + } + + if mode != ilm.ModeAuto { + return indexSelector(indexSel), nil + } + + selCfg.SetString("index", -1, alias) + aliasSel, err := outil.BuildSelectorFromConfig(selCfg, buildSettings) + return &ilmIndexSelector{ + index: indexSel, + alias: aliasSel, + st: &s.st, + }, nil +} + +func (m *indexManager) Setup(template, policy bool) error { + return m.load(template, policy) +} + +func (m *indexManager) Load() error { + return m.load(false, false) +} + +func (m *indexManager) load(forceTemplate, forcePolicy bool) error { + var err error + log := m.support.log + + withILM := m.support.st.withILM.Load() + if !withILM { + withILM, err = m.ilm.Enabled() + if err != nil { + return err + } + + if withILM { + log.Info("Auto ILM enable success.") + } + } + + // mark ILM as enabled in indexState if withILM is true + if withILM { + m.support.st.withILM.CAS(false, withILM) + } + + // install ilm policy + if withILM { + if err := m.ilm.EnsurePolicy(forcePolicy); err != nil { + return err + } + log.Info("ILM policy successfully loaded.") + } + + // create and install template + if m.support.templateCfg.Enabled { + tmplCfg := m.support.templateCfg + if withILM { + ilm := m.support.ilm + tmplCfg, err = applyILMSettings(log, tmplCfg, ilm.Policy(), ilm.Alias()) + if err != nil { + return err + } + } + + if forceTemplate { + tmplCfg.Overwrite = true + } + + fields := m.assets.Fields(m.support.info.Beat) + loader, err := template.NewLoader(tmplCfg, m.client, m.support.info, fields, m.support.migration) + if err != nil { + return fmt.Errorf("Error creating Elasticsearch template loader: %v", err) + } + + err = loader.Load() + if err != nil { + return fmt.Errorf("Error loading Elasticsearch template: %v", err) + } + + log.Info("Loaded index template.") + } + + // create alias + if withILM { + if err := m.ilm.EnsureAlias(); err != nil { + if ilm.ErrReason(err) != ilm.ErrAliasAlreadyExists { + return err + } + log.Info("Write alias exists already") + } else { + log.Info("Write alias successfully generated.") + } + } + + return nil +} + +func (s *ilmIndexSelector) Select(evt *beat.Event) (string, error) { + if idx := getEventCustomIndex(evt); idx != "" { + return idx, nil + } + + if s.st.withILM.Load() { + idx, err := s.alias.Select(evt) + return idx, err + } + + idx, err := s.index.Select(evt) + return idx, err +} + +func (s indexSelector) Select(evt *beat.Event) (string, error) { + if idx := getEventCustomIndex(evt); idx != "" { + return idx, nil + } + return outil.Selector(s).Select(evt) +} + +func getEventCustomIndex(evt *beat.Event) string { + if len(evt.Meta) == 0 { + return "" + } + + if tmp := evt.Meta["alias"]; tmp != nil { + if alias, ok := tmp.(string); ok { + return alias + } + } + + if tmp := evt.Meta["index"]; tmp != nil { + if idx, ok := tmp.(string); ok { + ts := evt.Timestamp.UTC() + return fmt.Sprintf("%s-%d.%02d.%02d", + idx, ts.Year(), ts.Month(), ts.Day()) + } + } + + return "" +} + +func unpackTemplateConfig(cfg *common.Config) (config template.TemplateConfig, err error) { + config = template.DefaultConfig() + if cfg != nil { + err = cfg.Unpack(&config) + } + return config, err +} + +func applyILMSettings( + log *logp.Logger, + tmpl template.TemplateConfig, + policy ilm.Policy, + alias ilm.Alias, +) (template.TemplateConfig, error) { + if !tmpl.Enabled { + return tmpl, nil + } + + if alias.Name == "" { + return tmpl, errors.New("no ilm rollover alias configured") + } + + if policy.Name == "" { + return tmpl, errors.New("no ilm policy name configured") + } + + tmpl.Name = alias.Name + if log != nil { + log.Infof("Set setup.template.name to '%s' as ILM is enabled.", alias) + } + + tmpl.Pattern = fmt.Sprintf("%s-*", alias.Name) + if log != nil { + log.Infof("Set setup.template.pattern to '%s' as ILM is enabled.", tmpl.Pattern) + } + + // rollover_alias and lifecycle.name can't be configured and will be overwritten + + // init/copy index settings + idxSettings := tmpl.Settings.Index + if idxSettings == nil { + idxSettings = map[string]interface{}{} + } else { + tmp := make(map[string]interface{}, len(idxSettings)) + for k, v := range idxSettings { + tmp[k] = v + } + idxSettings = tmp + } + tmpl.Settings.Index = idxSettings + + // init/copy index.lifecycle settings + var lifecycle map[string]interface{} + if ifcLifecycle := idxSettings["lifecycle"]; ifcLifecycle == nil { + lifecycle = map[string]interface{}{} + } else if tmp, ok := ifcLifecycle.(map[string]interface{}); ok { + lifecycle = make(map[string]interface{}, len(tmp)) + for k, v := range tmp { + lifecycle[k] = v + } + } else { + return tmpl, errors.New("settings.index.lifecycle must be an object") + } + idxSettings["lifecycle"] = lifecycle + + // add rollover_alias and name to index.lifecycle settings + if _, exists := lifecycle["rollover_alias"]; !exists { + log.Infof("Set settings.index.lifecycle.rollover_alias in template to %s as ILM is enabled.", alias) + lifecycle["rollover_alias"] = alias.Name + } + if _, exists := lifecycle["name"]; !exists { + log.Infof("Set settings.index.lifecycle.name in template to %s as ILM is enabled.", policy) + lifecycle["name"] = policy.Name + } + + return tmpl, nil +} diff --git a/libbeat/outputs/console/console.go b/libbeat/outputs/console/console.go index 66598fd6c53c..c91d420674dd 100644 --- a/libbeat/outputs/console/console.go +++ b/libbeat/outputs/console/console.go @@ -53,6 +53,7 @@ func init() { } func makeConsole( + _ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, diff --git a/libbeat/outputs/elasticsearch/client.go b/libbeat/outputs/elasticsearch/client.go index 18dc9683345b..5230f3c57a3f 100644 --- a/libbeat/outputs/elasticsearch/client.go +++ b/libbeat/outputs/elasticsearch/client.go @@ -43,7 +43,7 @@ type Client struct { Connection tlsConfig *transport.TLSConfig - index outil.Selector + index outputs.IndexSelector pipeline *outil.Selector params map[string]string timeout time.Duration @@ -70,7 +70,7 @@ type ClientSettings struct { EscapeHTML bool Parameters map[string]string Headers map[string]string - Index outil.Selector + Index outputs.IndexSelector Pipeline *outil.Selector Timeout time.Duration CompressionLevel int @@ -366,7 +366,7 @@ func (client *Client) publishEvents( // successfully added to bulk request. func bulkEncodePublishRequest( body bulkWriter, - index outil.Selector, + index outputs.IndexSelector, pipeline *outil.Selector, eventType string, data []publisher.Event, @@ -390,7 +390,7 @@ func bulkEncodePublishRequest( } func createEventBulkMeta( - indexSel outil.Selector, + indexSel outputs.IndexSelector, pipelineSel *outil.Selector, eventType string, event *beat.Event, @@ -401,7 +401,7 @@ func createEventBulkMeta( return nil, err } - index, err := getIndex(event, indexSel) + index, err := indexSel.Select(event) if err != nil { err := fmt.Errorf("failed to select event index: %v", err) return nil, err @@ -447,24 +447,6 @@ func getPipeline(event *beat.Event, pipelineSel *outil.Selector) (string, error) return "", nil } -// getIndex returns the full index name -// Index is either defined in the config as part of the output -// or can be overload by the event through setting index -func getIndex(event *beat.Event, index outil.Selector) (string, error) { - if event.Meta != nil { - if str, exists := event.Meta["index"]; exists { - idx, ok := str.(string) - if ok { - ts := event.Timestamp.UTC() - return fmt.Sprintf("%s-%d.%02d.%02d", - idx, ts.Year(), ts.Month(), ts.Day()), nil - } - } - } - - return index.Select(event) -} - // bulkCollectPublishFails checks per item errors returning all events // to be tried again due to error code returned for that items. If indexing an // event failed due to some error in the event itself (e.g. does not respect mapping), diff --git a/libbeat/outputs/elasticsearch/client_integration_test.go b/libbeat/outputs/elasticsearch/client_integration_test.go index 8a3a7d5f5b91..fb690c23c9f7 100644 --- a/libbeat/outputs/elasticsearch/client_integration_test.go +++ b/libbeat/outputs/elasticsearch/client_integration_test.go @@ -28,6 +28,7 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/idxmgmt" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/outputs" "github.com/elastic/beats/libbeat/outputs/elasticsearch/internal" @@ -262,7 +263,9 @@ func connectTestEs(t *testing.T, cfg interface{}) (outputs.Client, *Client) { t.Fatal(err) } - output, err := makeES(beat.Info{Beat: "libbeat"}, outputs.NewNilObserver(), config) + info := beat.Info{Beat: "libbeat"} + im, _ := idxmgmt.DefaultSupport(nil, info, nil) + output, err := makeES(im, info, outputs.NewNilObserver(), config) if err != nil { t.Fatal(err) } diff --git a/libbeat/outputs/elasticsearch/client_test.go b/libbeat/outputs/elasticsearch/client_test.go index 3d626935caad..27825c653532 100644 --- a/libbeat/outputs/elasticsearch/client_test.go +++ b/libbeat/outputs/elasticsearch/client_test.go @@ -32,7 +32,7 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/fmtstr" + "github.com/elastic/beats/libbeat/idxmgmt" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/libbeat/outputs/outest" "github.com/elastic/beats/libbeat/outputs/outil" @@ -189,47 +189,6 @@ func TestCollectPipelinePublishFail(t *testing.T) { assert.Equal(t, events, res) } -func TestGetIndexStandard(t *testing.T) { - ts := time.Now().UTC() - extension := fmt.Sprintf("%d.%02d.%02d", ts.Year(), ts.Month(), ts.Day()) - fields := common.MapStr{"field": 1} - - pattern := "beatname-%{+yyyy.MM.dd}" - fmtstr := fmtstr.MustCompileEvent(pattern) - indexSel := outil.MakeSelector(outil.FmtSelectorExpr(fmtstr, "")) - - event := &beat.Event{Timestamp: ts, Fields: fields} - index, _ := getIndex(event, indexSel) - assert.Equal(t, index, "beatname-"+extension) -} - -func TestGetIndexOverwrite(t *testing.T) { - time := time.Now().UTC() - extension := fmt.Sprintf("%d.%02d.%02d", time.Year(), time.Month(), time.Day()) - - fields := common.MapStr{ - "@timestamp": common.Time(time), - "field": 1, - "beat": common.MapStr{ - "name": "testbeat", - }, - } - - pattern := "beatname-%%{+yyyy.MM.dd}" - fmtstr := fmtstr.MustCompileEvent(pattern) - indexSel := outil.MakeSelector(outil.FmtSelectorExpr(fmtstr, "")) - - event := &beat.Event{ - Timestamp: time, - Meta: map[string]interface{}{ - "index": "dynamicindex", - }, - Fields: fields} - index, _ := getIndex(event, indexSel) - expected := "dynamicindex-" + extension - assert.Equal(t, expected, index) -} - func BenchmarkCollectPublishFailsNone(b *testing.B) { response := []byte(` { "items": [ @@ -406,11 +365,15 @@ func TestBulkEncodeEvents(t *testing.T) { test := test t.Run(name, func(t *testing.T) { cfg := common.MustNewConfigFrom(test.config) - - index, pipeline, err := buildSelectors(beat.Info{ + info := beat.Info{ IndexPrefix: "test", Version: version.GetDefaultVersion(), - }, cfg) + } + + im, err := idxmgmt.DefaultSupport(nil, info, common.NewConfig()) + require.NoError(t, err) + + index, pipeline, err := buildSelectors(im, info, cfg) require.NoError(t, err) events := make([]publisher.Event, len(test.events)) diff --git a/libbeat/outputs/elasticsearch/elasticsearch.go b/libbeat/outputs/elasticsearch/elasticsearch.go index 0c9dd08537c8..f604190c31c4 100644 --- a/libbeat/outputs/elasticsearch/elasticsearch.go +++ b/libbeat/outputs/elasticsearch/elasticsearch.go @@ -100,6 +100,7 @@ func DeregisterConnectCallback(key uuid.UUID) { } func makeES( + im outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, @@ -108,7 +109,7 @@ func makeES( cfg.SetInt("bulk_max_size", -1, defaultBulkSize) } - index, pipeline, err := buildSelectors(beat, cfg) + index, pipeline, err := buildSelectors(im, beat, cfg) if err != nil { return outputs.Fail(err) } @@ -177,20 +178,11 @@ func makeES( } func buildSelectors( + im outputs.IndexManager, beat beat.Info, cfg *common.Config, -) (index outil.Selector, pipeline *outil.Selector, err error) { - if !cfg.HasField("index") { - pattern := fmt.Sprintf("%v-%v-%%{+yyyy.MM.dd}", beat.IndexPrefix, beat.Version) - cfg.SetString("index", -1, pattern) - } - - index, err = outil.BuildSelectorFromConfig(cfg, outil.Settings{ - Key: "index", - MultiKey: "indices", - EnableSingleOnly: true, - FailEmpty: true, - }) +) (index outputs.IndexSelector, pipeline *outil.Selector, err error) { + index, err = im.BuildSelector(cfg) if err != nil { return index, pipeline, err } diff --git a/libbeat/outputs/fileout/file.go b/libbeat/outputs/fileout/file.go index 1b05fbb783fe..ab5b040bea59 100644 --- a/libbeat/outputs/fileout/file.go +++ b/libbeat/outputs/fileout/file.go @@ -44,6 +44,7 @@ type fileOutput struct { // makeFileout instantiates a new file output instance. func makeFileout( + _ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, diff --git a/libbeat/outputs/kafka/kafka.go b/libbeat/outputs/kafka/kafka.go index d9f9e86ac18c..dc34e77c5581 100644 --- a/libbeat/outputs/kafka/kafka.go +++ b/libbeat/outputs/kafka/kafka.go @@ -70,6 +70,7 @@ func kafkaMetricsRegistry() gometrics.Registry { } func makeKafka( + _ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, diff --git a/libbeat/outputs/kafka/kafka_integration_test.go b/libbeat/outputs/kafka/kafka_integration_test.go index 78df0a12a081..4d85003a719a 100644 --- a/libbeat/outputs/kafka/kafka_integration_test.go +++ b/libbeat/outputs/kafka/kafka_integration_test.go @@ -199,7 +199,7 @@ func TestKafkaPublish(t *testing.T) { } t.Run(name, func(t *testing.T) { - grp, err := makeKafka(beat.Info{Beat: "libbeat"}, outputs.NewNilObserver(), cfg) + grp, err := makeKafka(nil, beat.Info{Beat: "libbeat"}, outputs.NewNilObserver(), cfg) if err != nil { t.Fatal(err) } diff --git a/libbeat/outputs/logstash/logstash.go b/libbeat/outputs/logstash/logstash.go index 02928ad0d08b..0c14bf5882bb 100644 --- a/libbeat/outputs/logstash/logstash.go +++ b/libbeat/outputs/logstash/logstash.go @@ -40,6 +40,7 @@ func init() { } func makeLogstash( + _ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, diff --git a/libbeat/outputs/logstash/logstash_integration_test.go b/libbeat/outputs/logstash/logstash_integration_test.go index ba00c59de13d..ead21295c769 100644 --- a/libbeat/outputs/logstash/logstash_integration_test.go +++ b/libbeat/outputs/logstash/logstash_integration_test.go @@ -32,6 +32,7 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/fmtstr" + "github.com/elastic/beats/libbeat/idxmgmt" "github.com/elastic/beats/libbeat/outputs" "github.com/elastic/beats/libbeat/outputs/elasticsearch" "github.com/elastic/beats/libbeat/outputs/outest" @@ -175,7 +176,17 @@ func newTestElasticsearchOutput(t *testing.T, test string) *testOutputer { "template.enabled": false, }) - grp, err := plugin(beat.Info{Beat: "libbeat"}, outputs.NewNilObserver(), config) + info := beat.Info{Beat: "libbeat"} + im, err := idxmgmt.DefaultSupport(nil, info, common.MustNewConfigFrom( + map[string]interface{}{ + "setup.ilm.enabled": false, + }, + )) + if err != nil { + t.Fatal("init index management:", err) + } + + grp, err := plugin(im, info, outputs.NewNilObserver(), config) if err != nil { t.Fatalf("init elasticsearch output plugin failed: %v", err) } diff --git a/libbeat/outputs/logstash/logstash_test.go b/libbeat/outputs/logstash/logstash_test.go index 9c94a18ae1d2..7c1552fcb830 100644 --- a/libbeat/outputs/logstash/logstash_test.go +++ b/libbeat/outputs/logstash/logstash_test.go @@ -179,7 +179,7 @@ func newTestLumberjackOutput( } cfg, _ := common.NewConfigFrom(config) - grp, err := outputs.Load(beat.Info{}, nil, "logstash", cfg) + grp, err := outputs.Load(nil, beat.Info{}, nil, "logstash", cfg) if err != nil { t.Fatalf("init logstash output plugin failed: %v", err) } diff --git a/libbeat/outputs/output_reg.go b/libbeat/outputs/output_reg.go index 5b669c9413b1..6625f1125b1f 100644 --- a/libbeat/outputs/output_reg.go +++ b/libbeat/outputs/output_reg.go @@ -28,10 +28,25 @@ var outputReg = map[string]Factory{} // Factory is used by output plugins to build an output instance type Factory func( + im IndexManager, beat beat.Info, stats Observer, cfg *common.Config) (Group, error) +// IndexManager provides additional index related services to the outputs. +type IndexManager interface { + // BuildSelector can be used by an output to create an IndexSelector based on + // the outputs configuration. + // The defaultIndex is interpreted as format string and used as default fallback + // if no index is configured or all indices are guarded using conditionals. + BuildSelector(cfg *common.Config) (IndexSelector, error) +} + +// IndexSelector is used to find the index name an event shall be indexed to. +type IndexSelector interface { + Select(event *beat.Event) (string, error) +} + // Group configures and combines multiple clients into load-balanced group of clients // being managed by the publisher pipeline. type Group struct { @@ -54,7 +69,13 @@ func FindFactory(name string) Factory { } // Load creates and configures a output Group using a configuration object.. -func Load(info beat.Info, stats Observer, name string, config *common.Config) (Group, error) { +func Load( + im IndexManager, + info beat.Info, + stats Observer, + name string, + config *common.Config, +) (Group, error) { factory := FindFactory(name) if factory == nil { return Group{}, fmt.Errorf("output type %v undefined", name) @@ -63,5 +84,5 @@ func Load(info beat.Info, stats Observer, name string, config *common.Config) (G if stats == nil { stats = NewNilObserver() } - return factory(info, stats, config) + return factory(im, info, stats, config) } diff --git a/libbeat/outputs/redis/redis.go b/libbeat/outputs/redis/redis.go index 66bcaa0e72d6..97a6b9fdafac 100644 --- a/libbeat/outputs/redis/redis.go +++ b/libbeat/outputs/redis/redis.go @@ -49,6 +49,7 @@ func init() { } func makeRedis( + _ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config, diff --git a/libbeat/outputs/redis/redis_integration_test.go b/libbeat/outputs/redis/redis_integration_test.go index 57f491caa433..bf0fcf0ac215 100644 --- a/libbeat/outputs/redis/redis_integration_test.go +++ b/libbeat/outputs/redis/redis_integration_test.go @@ -289,7 +289,7 @@ func newRedisTestingOutput(t *testing.T, cfg map[string]interface{}) outputs.Cli t.Fatalf("redis output module not registered") } - out, err := plugin(beat.Info{Beat: testBeatname, Version: testBeatversion}, outputs.NewNilObserver(), config) + out, err := plugin(nil, beat.Info{Beat: testBeatname, Version: testBeatversion}, outputs.NewNilObserver(), config) if err != nil { t.Fatalf("Failed to initialize redis output: %v", err) } diff --git a/libbeat/publisher/pipeline/controller.go b/libbeat/publisher/pipeline/controller.go index 72e4c1487a45..cbd1b5205374 100644 --- a/libbeat/publisher/pipeline/controller.go +++ b/libbeat/publisher/pipeline/controller.go @@ -146,16 +146,22 @@ func makeWorkQueue() workQueue { } // Reload the output -func (c *outputController) Reload(cfg *reload.ConfigWithMeta) error { - outputCfg := common.ConfigNamespace{} - +func (c *outputController) Reload( + cfg *reload.ConfigWithMeta, + outFactory func(outputs.Observer, common.ConfigNamespace) (outputs.Group, error), +) error { + outCfg := common.ConfigNamespace{} if cfg != nil { - if err := cfg.Config.Unpack(&outputCfg); err != nil { + if err := cfg.Config.Unpack(&outCfg); err != nil { return err } } - output, err := loadOutput(c.beat, c.monitors, outputCfg) + output, err := loadOutput(c.monitors, func(stats outputs.Observer) (string, outputs.Group, error) { + name := outCfg.Name() + out, err := outFactory(stats, outCfg) + return name, out, err + }) if err != nil { return err } diff --git a/libbeat/publisher/pipeline/module.go b/libbeat/publisher/pipeline/module.go index e9f50779d026..2c854c13676c 100644 --- a/libbeat/publisher/pipeline/module.go +++ b/libbeat/publisher/pipeline/module.go @@ -45,6 +45,11 @@ type Monitors struct { Logger *logp.Logger } +// OutputFactory is used by the publisher pipeline to create an output instance. +// If the group returned can be empty. The pipeline will accept events, but +// eventually block. +type OutputFactory func(outputs.Observer) (string, outputs.Group, error) + func init() { flag.BoolVar(&publishDisabled, "N", false, "Disable actual publishing for testing") } @@ -55,7 +60,7 @@ func Load( beatInfo beat.Info, monitors Monitors, config Config, - outcfg common.ConfigNamespace, + makeOutput func(outputs.Observer) (string, outputs.Group, error), ) (*Pipeline, error) { log := monitors.Logger if log == nil { @@ -95,7 +100,7 @@ func Load( return nil, err } - out, err := loadOutput(beatInfo, monitors, outcfg) + out, err := loadOutput(monitors, makeOutput) if err != nil { return nil, err } @@ -110,9 +115,8 @@ func Load( } func loadOutput( - beatInfo beat.Info, monitors Monitors, - outcfg common.ConfigNamespace, + makeOutput OutputFactory, ) (outputs.Group, error) { log := monitors.Logger if log == nil { @@ -123,7 +127,7 @@ func loadOutput( return outputs.Group{}, nil } - if !outcfg.IsSet() { + if makeOutput == nil { return outputs.Group{}, nil } @@ -141,13 +145,13 @@ func loadOutput( outStats = outputs.NewStats(metrics) } - out, err := outputs.Load(beatInfo, outStats, outcfg.Name(), outcfg.Config()) + outName, out, err := makeOutput(outStats) if err != nil { return outputs.Fail(err) } if metrics != nil { - monitoring.NewString(metrics, "type").Set(outcfg.Name()) + monitoring.NewString(metrics, "type").Set(outName) } if monitors.Telemetry != nil { telemetry := monitors.Telemetry.GetRegistry("output") @@ -156,7 +160,7 @@ func loadOutput( } else { telemetry = monitors.Telemetry.NewRegistry("output") } - monitoring.NewString(telemetry, "name").Set(outcfg.Name()) + monitoring.NewString(telemetry, "name").Set(outName) } return out, nil diff --git a/libbeat/publisher/pipeline/pipeline.go b/libbeat/publisher/pipeline/pipeline.go index 00c203f3f224..fbe49510e0dc 100644 --- a/libbeat/publisher/pipeline/pipeline.go +++ b/libbeat/publisher/pipeline/pipeline.go @@ -131,6 +131,15 @@ const ( WaitOnClientClose ) +// OutputReloader interface, that can be queried from an active publisher pipeline. +// The output reloader can be used to change the active output. +type OutputReloader interface { + Reload( + cfg *reload.ConfigWithMeta, + factory func(outputs.Observer, common.ConfigNamespace) (outputs.Group, error), + ) error +} + type pipelineEventer struct { mutex sync.Mutex modifyable bool @@ -442,6 +451,6 @@ func makePipelineProcessors( } // OutputReloader returns a reloadable object for the output section of this pipeline -func (p *Pipeline) OutputReloader() reload.Reloadable { +func (p *Pipeline) OutputReloader() OutputReloader { return p.output } diff --git a/libbeat/publisher/pipeline/stress/out.go b/libbeat/publisher/pipeline/stress/out.go index 5bc72ed33cd7..211e056ce602 100644 --- a/libbeat/publisher/pipeline/stress/out.go +++ b/libbeat/publisher/pipeline/stress/out.go @@ -53,7 +53,7 @@ func init() { outputs.RegisterType("test", makeTestOutput) } -func makeTestOutput(beat beat.Info, observer outputs.Observer, cfg *common.Config) (outputs.Group, error) { +func makeTestOutput(_ outputs.IndexManager, beat beat.Info, observer outputs.Observer, cfg *common.Config) (outputs.Group, error) { config := defaultTestOutputConfig if err := cfg.Unpack(&config); err != nil { return outputs.Fail(err) diff --git a/libbeat/publisher/pipeline/stress/run.go b/libbeat/publisher/pipeline/stress/run.go index e21d3f29d269..3ebce0351f1e 100644 --- a/libbeat/publisher/pipeline/stress/run.go +++ b/libbeat/publisher/pipeline/stress/run.go @@ -25,6 +25,7 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/libbeat/outputs" "github.com/elastic/beats/libbeat/publisher/pipeline" ) @@ -57,13 +58,19 @@ func RunTests( return fmt.Errorf("unpacking config failed: %v", err) } - pipeline, err := pipeline.Load(info, pipeline.Monitors{ - Metrics: nil, - Telemetry: nil, - Logger: logp.L(), - }, + pipeline, err := pipeline.Load(info, + pipeline.Monitors{ + Metrics: nil, + Telemetry: nil, + Logger: logp.L(), + }, config.Pipeline, - config.Output) + func(stat outputs.Observer) (string, outputs.Group, error) { + cfg := config.Output + out, err := outputs.Load(nil, info, stat, cfg.Name(), cfg.Config()) + return cfg.Name(), out, err + }, + ) if err != nil { return fmt.Errorf("loading pipeline failed: %+v", err) } diff --git a/libbeat/template/config.go b/libbeat/template/config.go index 77e93d720115..ed939fcc9a06 100644 --- a/libbeat/template/config.go +++ b/libbeat/template/config.go @@ -39,10 +39,10 @@ type TemplateSettings struct { Source map[string]interface{} `config:"_source"` } -var ( - // DefaultConfig for index template - DefaultConfig = TemplateConfig{ +// DefaultConfig for index template +func DefaultConfig() TemplateConfig { + return TemplateConfig{ Enabled: true, Fields: "", } -) +} diff --git a/libbeat/template/load.go b/libbeat/template/load.go index cf357f952eab..99978796f78f 100644 --- a/libbeat/template/load.go +++ b/libbeat/template/load.go @@ -45,14 +45,13 @@ type Loader struct { } // NewLoader creates a new template loader -func NewLoader(cfg *common.Config, client ESClient, beatInfo beat.Info, fields []byte, migration bool) (*Loader, error) { - config := DefaultConfig - - err := cfg.Unpack(&config) - if err != nil { - return nil, err - } - +func NewLoader( + config TemplateConfig, + client ESClient, + beatInfo beat.Info, + fields []byte, + migration bool, +) (*Loader, error) { return &Loader{ config: config, client: client, diff --git a/libbeat/template/load_integration_test.go b/libbeat/template/load_integration_test.go index 741fc684441c..b1f4e01c4a5e 100644 --- a/libbeat/template/load_integration_test.go +++ b/libbeat/template/load_integration_test.go @@ -236,17 +236,17 @@ func TestOverwrite(t *testing.T) { client.Request("DELETE", "/_template/"+templateName, "", nil, nil) // Load template - config := newConfigFrom(t, TemplateConfig{ + config := TemplateConfig{ Enabled: true, Fields: absPath + "/fields.yml", - }) + } loader, err := NewLoader(config, client, beatInfo, nil, false) assert.NoError(t, err) err = loader.Load() assert.NoError(t, err) // Load template again, this time with custom settings - config = newConfigFrom(t, TemplateConfig{ + config = TemplateConfig{ Enabled: true, Fields: absPath + "/fields.yml", Settings: TemplateSettings{ @@ -254,7 +254,7 @@ func TestOverwrite(t *testing.T) { "enabled": false, }, }, - }) + } loader, err = NewLoader(config, client, beatInfo, nil, false) assert.NoError(t, err) err = loader.Load() @@ -265,7 +265,7 @@ func TestOverwrite(t *testing.T) { assert.Equal(t, true, templateJSON.SourceEnabled()) // Load template again, this time with custom settings AND overwrite: true - config = newConfigFrom(t, TemplateConfig{ + config = TemplateConfig{ Enabled: true, Overwrite: true, Fields: absPath + "/fields.yml", @@ -274,7 +274,7 @@ func TestOverwrite(t *testing.T) { "enabled": false, }, }, - }) + } loader, err = NewLoader(config, client, beatInfo, nil, false) assert.NoError(t, err) err = loader.Load() @@ -372,12 +372,6 @@ func TestTemplateWithData(t *testing.T) { assert.False(t, loader.CheckTemplate(tmpl.GetName())) } -func newConfigFrom(t *testing.T, from interface{}) *common.Config { - cfg, err := common.NewConfigFrom(from) - assert.NoError(t, err) - return cfg -} - func getTemplate(t *testing.T, client ESClient, templateName string) testTemplate { status, body, err := client.Request("GET", "/_template/"+templateName, "", nil, nil) assert.NoError(t, err) diff --git a/libbeat/template/template.go b/libbeat/template/template.go index 5a03ca770dd9..1e829d196b1c 100644 --- a/libbeat/template/template.go +++ b/libbeat/template/template.go @@ -53,7 +53,13 @@ type Template struct { } // New creates a new template instance -func New(beatVersion string, beatName string, esVersion common.Version, config TemplateConfig, migration bool) (*Template, error) { +func New( + beatVersion string, + beatName string, + esVersion common.Version, + config TemplateConfig, + migration bool, +) (*Template, error) { bV, err := common.NewVersion(beatVersion) if err != nil { return nil, err diff --git a/libbeat/tests/system/config/libbeat.yml.j2 b/libbeat/tests/system/config/libbeat.yml.j2 index 839836be2875..5ac42df84469 100644 --- a/libbeat/tests/system/config/libbeat.yml.j2 +++ b/libbeat/tests/system/config/libbeat.yml.j2 @@ -22,6 +22,18 @@ setup.template.name: "{{setup_template_name}}" setup.template.pattern: "{{setup_template_pattern}}" {%- endif %} +{% if ilm %} +setup.ilm: + enabled: {{ ilm.enabled | default("auto") }} + policy_name: libbeat-test-default-policy + {% if ilm.pattern %} + pattern: {{ ilm.pattern }} + {% endif %} + {% if ilm.rollover_alias %} + rollover_alias: {{ ilm.rollover_alias }} + {% endif %} +{% endif %} + #================================ Processors ===================================== {%- if processors %} diff --git a/libbeat/tests/system/config/mockbeat.yml.j2 b/libbeat/tests/system/config/mockbeat.yml.j2 index 134545b9970c..45893b1bddb0 100644 --- a/libbeat/tests/system/config/mockbeat.yml.j2 +++ b/libbeat/tests/system/config/mockbeat.yml.j2 @@ -79,6 +79,18 @@ setup.template: path: {{ template_json_path }} name: {{ template_json_name }} +{% if ilm %} +setup.ilm: + enabled: {{ ilm.enabled | default("auto") }} + policy_name: libbeat-test-default-policy + {% if ilm.pattern %} + pattern: {{ ilm.pattern }} + {% endif %} + {% if ilm.rollover_alias %} + rollover_alias: {{ ilm.rollover_alias }} + {% endif %} +{% endif %} + #================================ Logging ===================================== {% if metrics_period -%} diff --git a/libbeat/tests/system/test_ilm.py b/libbeat/tests/system/test_ilm.py index 04d1fb1da551..069093253a2b 100644 --- a/libbeat/tests/system/test_ilm.py +++ b/libbeat/tests/system/test_ilm.py @@ -10,6 +10,9 @@ INTEGRATION_TESTS = os.environ.get('INTEGRATION_TESTS', False) +testPolicyName = "libbeat-test-default-policy" + + class Test(BaseTest): def setUp(self): @@ -19,7 +22,7 @@ def setUp(self): print("Using elasticsearch: {}".format(self.elasticsearch_url)) self.es = Elasticsearch([self.elasticsearch_url]) self.alias_name = "mockbeat-9.9.9" - self.policy_name = "beats-default-policy" + self.policy_name = testPolicyName logging.getLogger("urllib3").setLevel(logging.WARNING) logging.getLogger("elasticsearch").setLevel(logging.ERROR) @@ -31,9 +34,11 @@ def test_enabled(self): """ self.render_config_template( + ilm={ + "enabled": True, + }, elasticsearch={ "hosts": self.get_elasticsearch_url(), - "ilm.enabled": True, }, ) @@ -48,7 +53,8 @@ def test_enabled(self): # Check if template is loaded with settings template = self.es.transport.perform_request('GET', '/_template/' + self.alias_name) - assert template[self.alias_name]["settings"]["index"]["lifecycle"]["name"] == "beats-default-policy" + print(self.alias_name) + assert template[self.alias_name]["settings"]["index"]["lifecycle"]["name"] == testPolicyName assert template[self.alias_name]["settings"]["index"]["lifecycle"]["rollover_alias"] == self.alias_name # Make sure the correct index + alias was created @@ -75,11 +81,13 @@ def test_rollover_alias(self): alias_name = "foo" self.render_config_template( + ilm={ + "enabled": True, + "pattern": "1", + "rollover_alias": alias_name + }, elasticsearch={ "hosts": self.get_elasticsearch_url(), - "ilm.enabled": True, - "ilm.pattern": "1", - "ilm.rollover_alias": alias_name }, ) @@ -109,10 +117,12 @@ def test_pattern(self): """ self.render_config_template( + ilm={ + "enabled": True, + "pattern": "1" + }, elasticsearch={ "hosts": self.get_elasticsearch_url(), - "ilm.enabled": True, - "ilm.pattern": "1" }, ) @@ -142,10 +152,12 @@ def test_pattern_date(self): """ self.render_config_template( + ilm={ + "enabled": True, + "pattern": "'{now/d}'" + }, elasticsearch={ "hosts": self.get_elasticsearch_url(), - "ilm.enabled": True, - "ilm.pattern": "'{now/d}'" }, ) diff --git a/metricbeat/metricbeat.reference.yml b/metricbeat/metricbeat.reference.yml index 4850233d174c..d6f0d0a79f72 100644 --- a/metricbeat/metricbeat.reference.yml +++ b/metricbeat/metricbeat.reference.yml @@ -956,11 +956,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "metricbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1607,6 +1602,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "metricbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/metricbeat/metricbeat.yml b/metricbeat/metricbeat.yml index b669f2f7fba1..52916c295ded 100644 --- a/metricbeat/metricbeat.yml +++ b/metricbeat/metricbeat.yml @@ -93,9 +93,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/packetbeat/packetbeat.reference.yml b/packetbeat/packetbeat.reference.yml index 6474a5e37b88..09e21d901db9 100644 --- a/packetbeat/packetbeat.reference.yml +++ b/packetbeat/packetbeat.reference.yml @@ -726,11 +726,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "packetbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1377,6 +1372,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "packetbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/packetbeat/packetbeat.yml b/packetbeat/packetbeat.yml index 67b5c64d2298..d7b75fe695d7 100644 --- a/packetbeat/packetbeat.yml +++ b/packetbeat/packetbeat.yml @@ -175,9 +175,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/winlogbeat/winlogbeat.reference.yml b/winlogbeat/winlogbeat.reference.yml index 1e797e445821..ec534c84fcf0 100644 --- a/winlogbeat/winlogbeat.reference.yml +++ b/winlogbeat/winlogbeat.reference.yml @@ -275,11 +275,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "winlogbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -926,6 +921,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "winlogbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/winlogbeat/winlogbeat.yml b/winlogbeat/winlogbeat.yml index 29f419134854..f0cbb3092ed1 100644 --- a/winlogbeat/winlogbeat.yml +++ b/winlogbeat/winlogbeat.yml @@ -97,9 +97,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/x-pack/auditbeat/auditbeat.reference.yml b/x-pack/auditbeat/auditbeat.reference.yml index c359e2ad942d..239da5691a1c 100644 --- a/x-pack/auditbeat/auditbeat.reference.yml +++ b/x-pack/auditbeat/auditbeat.reference.yml @@ -393,11 +393,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "auditbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1044,6 +1039,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "auditbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/x-pack/auditbeat/auditbeat.yml b/x-pack/auditbeat/auditbeat.yml index 0088d6fe7f34..bd5296e0c5f4 100644 --- a/x-pack/auditbeat/auditbeat.yml +++ b/x-pack/auditbeat/auditbeat.yml @@ -143,9 +143,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/x-pack/filebeat/filebeat.reference.yml b/x-pack/filebeat/filebeat.reference.yml index 7400a56d3efc..56279565fb00 100644 --- a/x-pack/filebeat/filebeat.reference.yml +++ b/x-pack/filebeat/filebeat.reference.yml @@ -1123,11 +1123,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "filebeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1774,6 +1769,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "filebeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/x-pack/filebeat/filebeat.yml b/x-pack/filebeat/filebeat.yml index d163e79735d1..c06827965ffd 100644 --- a/x-pack/filebeat/filebeat.yml +++ b/x-pack/filebeat/filebeat.yml @@ -149,9 +149,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/x-pack/functionbeat/functionbeat.reference.yml b/x-pack/functionbeat/functionbeat.reference.yml index 832009f360a2..05feb66beecb 100644 --- a/x-pack/functionbeat/functionbeat.reference.yml +++ b/x-pack/functionbeat/functionbeat.reference.yml @@ -391,11 +391,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "functionbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1042,6 +1037,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "functionbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/x-pack/functionbeat/functionbeat.yml b/x-pack/functionbeat/functionbeat.yml index 07bc7c3b332b..73ab5b1cca33 100644 --- a/x-pack/functionbeat/functionbeat.yml +++ b/x-pack/functionbeat/functionbeat.yml @@ -219,9 +219,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" diff --git a/x-pack/metricbeat/metricbeat.reference.yml b/x-pack/metricbeat/metricbeat.reference.yml index 61534846e2f2..6eed891a52aa 100644 --- a/x-pack/metricbeat/metricbeat.reference.yml +++ b/x-pack/metricbeat/metricbeat.reference.yml @@ -974,11 +974,6 @@ output.elasticsearch: # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200 hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - #ilm.rollover_alias: "metricbeat" - #ilm.pattern: "{now/d}-000001" - # Set gzip compression level. #compression_level: 0 @@ -1625,6 +1620,25 @@ setup.template.settings: #_source: #enabled: false +#============================== Setup ILM ===================================== + +# Configure Index Lifecycle Management Index Lifecycle Management creates a +# write alias and adds additional settings to the template. +# The elasticsearch.output.index setting will be replaced with the write alias +# if ILM is enabled. + +# Enabled ILM support. Valid values are true, false, and auto. The beat will +# detect availabilty of Index Lifecycle Management in Elasticsearch and enable +# or disable ILM support. +#setup.ilm.enabled: auto + +# Configure the ILM write alias name. +#setup.ilm.rollover_alias: "metricbeat" + +# Configure rollover index pattern. +#setup.ilm.pattern: "{now/d}-000001" + + #============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. diff --git a/x-pack/metricbeat/metricbeat.yml b/x-pack/metricbeat/metricbeat.yml index b669f2f7fba1..52916c295ded 100644 --- a/x-pack/metricbeat/metricbeat.yml +++ b/x-pack/metricbeat/metricbeat.yml @@ -93,9 +93,6 @@ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] - # Enabled ilm (beta) to use index lifecycle management instead daily indices. - #ilm.enabled: false - # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" From b35c55bc66dfa502b66a5830069b32c8126edccf Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Thu, 31 Jan 2019 10:47:59 -0500 Subject: [PATCH 42/66] [docs]: Add beat_version_key attribute (#10416) --- libbeat/docs/config-file-format.asciidoc | 4 ++-- libbeat/docs/outputconfig.asciidoc | 18 +++++++++--------- libbeat/docs/shared-beats-attributes.asciidoc | 1 + libbeat/docs/shared-ilm.asciidoc | 4 ++-- libbeat/docs/shared-template-load.asciidoc | 2 +- libbeat/docs/template-config.asciidoc | 6 +++--- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/libbeat/docs/config-file-format.asciidoc b/libbeat/docs/config-file-format.asciidoc index 98faf676e163..f1062e58271a 100644 --- a/libbeat/docs/config-file-format.asciidoc +++ b/libbeat/docs/config-file-format.asciidoc @@ -77,11 +77,11 @@ For example this setting: output: elasticsearch: - index: 'beat-%{[agent.version]}-%{+yyyy.MM.dd}' + index: 'beat-%{[{beat_version_key}]}-%{+yyyy.MM.dd}' ------------------------------------------------------------------------------ -gets collapsed into `output.elasticsearch.index: 'beat-%{[agent.version]}-%{+yyyy.MM.dd}'`. The +gets collapsed into +output.elasticsearch.index: \'beat-%{[{beat_version_key}]}-%{+yyyy.MM.dd}\'+. The full name of a setting is based on all parent structures involved. Lists create numeric names starting with 0. diff --git a/libbeat/docs/outputconfig.asciidoc b/libbeat/docs/outputconfig.asciidoc index 57b9776342b1..eaf848f64137 100644 --- a/libbeat/docs/outputconfig.asciidoc +++ b/libbeat/docs/outputconfig.asciidoc @@ -60,7 +60,7 @@ Example configuration: output.elasticsearch: hosts: ["https://localhost:9200"] - index: "{beatname_lc}-%{[agent.version]}-%{+yyyy.MM.dd}" + index: "{beatname_lc}-%{[{beat_version_key}]}-%{+yyyy.MM.dd}" ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] ssl.certificate: "/etc/pki/client/cert.pem" ssl.key: "/etc/pki/client/cert.key" @@ -217,7 +217,7 @@ for more information about the environment variables. ifndef::apm-server[] The index name to write events to. The default is -+"{beatname_lc}-%\{[agent.version]\}-%\{+yyyy.MM.dd\}"+ (for example, ++"{beatname_lc}-%\{[{beat_version_key}]\}-%\{+yyyy.MM.dd\}"+ (for example, +"{beatname_lc}-{version}-{localdate}"+). If you change this setting, you also need to configure the `setup.template.name` and `setup.template.pattern` options (see <>). @@ -225,7 +225,7 @@ endif::apm-server[] ifdef::apm-server[] The index name to write events to. The default is -+"apm-%\{[agent.version]\}-{type\}-%\{+yyyy.MM.dd\}"+ (for example, ++"apm-%\{[{beat_version_key}]\}-{type\}-%\{+yyyy.MM.dd\}"+ (for example, +"apm-{version}-transaction-{localdate}"+). See <> for more information on default index configuration. @@ -235,7 +235,7 @@ you need to configure the `setup.template.name` and `setup.template.pattern` opt (see <>). You also must set the default index configuration in the `apm-server.yml` file. -NOTE: `agent.version` is a field managed by Beats that is added to every document. +NOTE: +{beat_version_key}+ is a field managed by Beats that is added to every document. It holds the current version of APM Server. endif::apm-server[] @@ -256,10 +256,10 @@ to set the index: ------------------------------------------------------------------------------ output.elasticsearch: hosts: ["http://localhost:9200"] - index: "%\{[fields.log_type]\}-%\{[agent.version]\}-%\{+yyyy.MM.dd}\" <1> + index: "%\{[fields.log_type]\}-%\{[{beat_version_key}]\}-%\{+yyyy.MM.dd}\" <1> ------------------------------------------------------------------------------ -<1> We recommend including `agent.version` in the name to avoid mapping issues +<1> We recommend including +{beat_version_key}+ in the name to avoid mapping issues when you upgrade. With this configuration, all events with `log_type: normal` are sent to an @@ -303,15 +303,15 @@ endif::no-processors[] The following example sets the index based on whether the `message` field contains the specified string: -["source","yaml"] +["source","yaml",subs="attributes"] ------------------------------------------------------------------------------ output.elasticsearch: hosts: ["http://localhost:9200"] indices: - - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}" + - index: "warning-%{[{beat_version_key}]}-%{+yyyy.MM.dd}" when.contains: message: "WARN" - - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}" + - index: "error-%{[{beat_version_key}]}-%{+yyyy.MM.dd}" when.contains: message: "ERR" ------------------------------------------------------------------------------ diff --git a/libbeat/docs/shared-beats-attributes.asciidoc b/libbeat/docs/shared-beats-attributes.asciidoc index 09f05b7b1c30..88f1d2d6abad 100644 --- a/libbeat/docs/shared-beats-attributes.asciidoc +++ b/libbeat/docs/shared-beats-attributes.asciidoc @@ -25,3 +25,4 @@ :beat_monitoring_user: beats_system :beat_monitoring_user_version: 6.3.0 :beat_monitoring_version: 6.2 +:beat_version_key: agent.version diff --git a/libbeat/docs/shared-ilm.asciidoc b/libbeat/docs/shared-ilm.asciidoc index 31c4001f27e5..acfc479266c0 100644 --- a/libbeat/docs/shared-ilm.asciidoc +++ b/libbeat/docs/shared-ilm.asciidoc @@ -32,9 +32,9 @@ template to use the correct settings for index lifecycle management. NOTE: If you've previously loaded the index template for this version into {es}, you must overwrite the template by setting `setup.template.overwrite: true`. -The rollover alias is set to +{beatname_lc}-\{agent.version\}+ by default. You +The rollover alias is set to +{beatname_lc}-\{{beat_version_key}\}+ by default. You can change the prefix used in the alias by setting `ilm.rollover_alias`, but you -can't remove `{agent.version}` from the rollover alias name. The default pattern +can't remove +{beat_version_key}+ from the rollover alias name. The default pattern used for the rollover index is `%{now/d}-000001`. You can change the pattern by setting `ilm.pattern`. For example: diff --git a/libbeat/docs/shared-template-load.asciidoc b/libbeat/docs/shared-template-load.asciidoc index 517bdfa89286..095ec5456181 100644 --- a/libbeat/docs/shared-template-load.asciidoc +++ b/libbeat/docs/shared-template-load.asciidoc @@ -75,7 +75,7 @@ date information. You also need to configure the `setup.template.name` and + ["source","sh",subs="attributes,callouts"] ----- -output.elasticsearch.index: "customname-%{[agent.version]}-%{+yyyy.MM.dd}" +output.elasticsearch.index: "customname-%{[{beat_version_key}]}-%{+yyyy.MM.dd}" setup.template.name: "customname" setup.template.pattern: "customname-*" ----- diff --git a/libbeat/docs/template-config.asciidoc b/libbeat/docs/template-config.asciidoc index 19e3084cb2b2..b465ba5c0866 100644 --- a/libbeat/docs/template-config.asciidoc +++ b/libbeat/docs/template-config.asciidoc @@ -24,18 +24,18 @@ you must <>. *`setup.template.name`*:: The name of the template. The default is +{beatname_lc}+. The {beatname_uc} version is always appended to the given -name, so the final name is +{beatname_lc}-%\{[agent.version]\}+. +name, so the final name is +{beatname_lc}-%\{[{beat_version_key}]\}+. // Maintainers: a backslash character is required to escape curly braces and // asterisks in inline code examples that contain asciidoc attributes. You'll // note that a backslash does not appear before the asterisk -// in +{beatname_lc}-%\{[agent.version]\}-*+. This is intentional and formats +// in +{beatname_lc}-%\{[{beat_version_key}]\}-*+. This is intentional and formats // the example as expected. *`setup.template.pattern`*:: The template pattern to apply to the default index settings. The default pattern is +{beat_default_index_prefix}-\*+. The {beatname_uc} version is always included in the pattern, so the final pattern is -+{beat_default_index_prefix}-%\{[agent.version]\}-*+. The wildcard character `-*` is used to ++{beat_default_index_prefix}-%\{[{beat_version_key}]\}-*+. The wildcard character `-*` is used to match all daily indices. + Example: From dfff2b12fa33553f44125a4e081972c1b719da90 Mon Sep 17 00:00:00 2001 From: Andrew Kroh Date: Thu, 31 Jan 2019 11:58:21 -0500 Subject: [PATCH 43/66] Move dashboard to kibana/7 dir (#10460) --- .../kibana/{6 => 7}/dashboard/filebeat-network-flows-top-n.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename x-pack/filebeat/input/netflow/_meta/kibana/{6 => 7}/dashboard/filebeat-network-flows-top-n.json (100%) diff --git a/x-pack/filebeat/input/netflow/_meta/kibana/6/dashboard/filebeat-network-flows-top-n.json b/x-pack/filebeat/input/netflow/_meta/kibana/7/dashboard/filebeat-network-flows-top-n.json similarity index 100% rename from x-pack/filebeat/input/netflow/_meta/kibana/6/dashboard/filebeat-network-flows-top-n.json rename to x-pack/filebeat/input/netflow/_meta/kibana/7/dashboard/filebeat-network-flows-top-n.json From 081cbed40befcf55d8f2ec60e2c314e1fadd7364 Mon Sep 17 00:00:00 2001 From: Andrew Kroh Date: Thu, 31 Jan 2019 12:15:12 -0500 Subject: [PATCH 44/66] Customize x-pack/metricbeat config for Windows (#10439) The load metricset wasn't being disabled on Windows like it is for the OSS metricbeat packages. I duplicated the customizePackaging code, but have plans to refactor all the build code to remove duplication. --- x-pack/metricbeat/magefile.go | 78 ++++++++++++++++++++- x-pack/metricbeat/metricbeat.docker.yml | 11 +++ x-pack/metricbeat/packages.yml | 90 ------------------------- 3 files changed, 87 insertions(+), 92 deletions(-) create mode 100644 x-pack/metricbeat/metricbeat.docker.yml delete mode 100644 x-pack/metricbeat/packages.yml diff --git a/x-pack/metricbeat/magefile.go b/x-pack/metricbeat/magefile.go index 1f4635fcc6a3..75aaaad5eeb2 100644 --- a/x-pack/metricbeat/magefile.go +++ b/x-pack/metricbeat/magefile.go @@ -16,6 +16,7 @@ import ( "time" "github.com/magefile/mage/mg" + "github.com/pkg/errors" "github.com/elastic/beats/dev-tools/mage" ) @@ -64,7 +65,9 @@ func Package() { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() - mage.LoadLocalNamedSpec("xpack") + mage.UseElasticBeatXPackPackaging() + customizePackaging() + mage.PackageKibanaDashboardsFromBuildDir() mg.Deps(Update, prepareModulePackaging) mg.Deps(CrossBuild, CrossBuildGoDaemon) @@ -97,7 +100,7 @@ func Dashboards() error { // Config generates both the short and reference configs. func Config() { - mg.Deps(shortConfig, referenceConfig, createDirModulesD) + mg.Deps(shortConfig, referenceConfig, dockerConfig, createDirModulesD) } // Update is an alias for running fields, dashboards, config. @@ -244,6 +247,15 @@ func referenceConfig() error { return nil } +func dockerConfig() error { + var configParts = []string{ + mage.OSSBeatDir("_meta/beat.docker.yml"), + mage.LibbeatDir("_meta/config.docker.yml"), + } + + return mage.FileConcat(mage.BeatName+".docker.yml", 0600, configParts...) +} + func createDirModulesD() error { if err := os.RemoveAll("modules.d"); err != nil { return err @@ -272,3 +284,65 @@ func createDirModulesD() error { } return nil } + +func customizePackaging() { + var ( + archiveModulesDir = "modules.d" + unixModulesDir = "/etc/{{.BeatName}}/modules.d" + + modulesDir = mage.PackageFile{ + Mode: 0644, + Source: dirModulesDGenerated, + Config: true, + Modules: true, + } + windowsModulesDir = mage.PackageFile{ + Mode: 0644, + Source: "{{.PackageDir}}/modules.d", + Config: true, + Modules: true, + Dep: func(spec mage.PackageSpec) error { + if err := mage.Copy(dirModulesDGenerated, spec.MustExpand("{{.PackageDir}}/modules.d")); err != nil { + return errors.Wrap(err, "failed to copy modules.d dir") + } + + return mage.FindReplace( + spec.MustExpand("{{.PackageDir}}/modules.d/system.yml"), + regexp.MustCompile(`- load`), `#- load`) + }, + } + windowsReferenceConfig = mage.PackageFile{ + Mode: 0644, + Source: "{{.PackageDir}}/metricbeat.reference.yml", + Dep: func(spec mage.PackageSpec) error { + err := mage.Copy("metricbeat.reference.yml", + spec.MustExpand("{{.PackageDir}}/metricbeat.reference.yml")) + if err != nil { + return errors.Wrap(err, "failed to copy reference config") + } + + return mage.FindReplace( + spec.MustExpand("{{.PackageDir}}/metricbeat.reference.yml"), + regexp.MustCompile(`- load`), `#- load`) + }, + } + ) + + for _, args := range mage.Packages { + switch args.OS { + case "windows": + args.Spec.Files[archiveModulesDir] = windowsModulesDir + args.Spec.ReplaceFile("{{.BeatName}}.reference.yml", windowsReferenceConfig) + default: + pkgType := args.Types[0] + switch pkgType { + case mage.TarGz, mage.Zip, mage.Docker: + args.Spec.Files[archiveModulesDir] = modulesDir + case mage.Deb, mage.RPM, mage.DMG: + args.Spec.Files[unixModulesDir] = modulesDir + default: + panic(errors.Errorf("unhandled package type: %v", pkgType)) + } + } + } +} diff --git a/x-pack/metricbeat/metricbeat.docker.yml b/x-pack/metricbeat/metricbeat.docker.yml new file mode 100644 index 000000000000..982018eefc7a --- /dev/null +++ b/x-pack/metricbeat/metricbeat.docker.yml @@ -0,0 +1,11 @@ +metricbeat.config.modules: + path: ${path.config}/modules.d/*.yml + reload.enabled: false + +processors: +- add_cloud_metadata: ~ + +output.elasticsearch: + hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}' + username: '${ELASTICSEARCH_USERNAME:}' + password: '${ELASTICSEARCH_PASSWORD:}' diff --git a/x-pack/metricbeat/packages.yml b/x-pack/metricbeat/packages.yml deleted file mode 100644 index a0cf52675333..000000000000 --- a/x-pack/metricbeat/packages.yml +++ /dev/null @@ -1,90 +0,0 @@ -specs: - xpack: - - os: windows - types: [zip] - spec: - <<: *windows_binary_spec - <<: *elastic_license_for_binaries - files: - modules.d: - mode: 0644 - source: build/package/modules.d - config: true - kibana: - source: build/kibana - mode: 0644 - - - os: darwin - types: [tgz] - spec: - <<: *binary_spec - <<: *elastic_license_for_binaries - files: - modules.d: - mode: 0644 - source: build/package/modules.d - config: true - kibana: - source: build/kibana - mode: 0644 - - - os: darwin - types: [dmg] - spec: - <<: *macos_beat_pkg_spec - <<: *elastic_license_for_macos_pkg - files: - /etc/{{.BeatName}}/modules.d: - mode: 0644 - source: build/package/modules.d - config: true - '/Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/kibana': - source: build/kibana - mode: 0644 - - - os: linux - types: [tgz] - spec: - <<: *binary_spec - <<: *elastic_license_for_binaries - files: - modules.d: - mode: 0644 - source: build/package/modules.d - config: true - kibana: - source: build/kibana - mode: 0644 - - - os: linux - types: [deb, rpm] - spec: - <<: *deb_rpm_spec - <<: *elastic_license_for_deb_rpm - files: - '/etc/{{.BeatName}}/modules.d': - mode: 0644 - source: build/package/modules.d - config: true - '/usr/share/{{.BeatName}}/kibana': - source: build/kibana - mode: 0644 - - - os: linux - types: [docker] - spec: - <<: *docker_spec - <<: *elastic_docker_spec - <<: *elastic_license_for_binaries - files: - '{{.BeatName}}.yml': - source: '../../metricbeat/metricbeat.docker.yml' - mode: 0600 - config: true - modules.d: - mode: 0644 - source: build/package/modules.d - config: true - kibana: - source: build/kibana - mode: 0644 From ec10e3af4fdb9441d34f1f80c45e1af95b7ced92 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Thu, 31 Jan 2019 12:58:50 -0500 Subject: [PATCH 45/66] [Docs] APM additions and code cleanup (#10187) --- libbeat/docs/command-reference.asciidoc | 69 ++++++++++++++-------- libbeat/docs/dashboardsconfig.asciidoc | 5 -- libbeat/docs/outputconfig.asciidoc | 19 +++++- libbeat/docs/shared-kibana-config.asciidoc | 13 ---- libbeat/docs/shared-template-load.asciidoc | 9 ++- 5 files changed, 63 insertions(+), 52 deletions(-) diff --git a/libbeat/docs/command-reference.asciidoc b/libbeat/docs/command-reference.asciidoc index 95291cab9e05..ecb5408a83ef 100644 --- a/libbeat/docs/command-reference.asciidoc +++ b/libbeat/docs/command-reference.asciidoc @@ -15,7 +15,15 @@ :global-flags: Also see <>. :deploy-command-short-desc: Deploys the specified function to your serverless environment + +ifndef::no_dashboards[] :export-command-short-desc: Exports the configuration, index template, or a dashboard to stdout +endif::no_dashboards[] + +ifdef::no_dashboards[] +:export-command-short-desc: Exports the configuration or index template to stdout +endif::no_dashboards[] + :help-command-short-desc: Shows help for any command :keystore-command-short-desc: Manages the <> :modules-command-short-desc: Manages configured modules @@ -23,22 +31,16 @@ :remove-command-short-desc: Removes the specified function from your serverless environment :run-command-short-desc: Runs {beatname_uc}. This command is used by default if you start {beatname_uc} without specifying a command -ifndef::deprecate_dashboard_loading[] - ifdef::has_ml_jobs[] :setup-command-short-desc: Sets up the initial environment, including the index template, {kib} dashboards (when available), and machine learning jobs (when available) endif::[] -ifndef::has_ml_jobs[] -:setup-command-short-desc: Sets up the initial environment, including the index template and {kib} dashboards (when available) -endif::[] - -endif::[] - -ifdef::deprecate_dashboard_loading[] - -:setup-command-short-desc: Sets up the initial environment, including the ES index template and {kib} dashboards (deprecated). +ifdef::no_dashboards[] +:setup-command-short-desc: Sets up the initial environment, including the ES index template +endif::no_dashboards[] +ifndef::has_ml_jobs,no_dashboards[] +:setup-command-short-desc: Sets up the initial environment, including the index template and {kib} dashboards (when available) endif::[] :update-command-short-desc: Updates the specified function @@ -53,15 +55,15 @@ endif::[] Command reference ++++ -ifndef::deprecate_dashboard_loading[] +ifndef::no_dashboards[] {beatname_uc} provides a command-line interface for starting {beatname_uc} and performing common tasks, like testing configuration files and loading dashboards. -endif::[] +endif::no_dashboards[] -ifdef::deprecate_dashboard_loading[] +ifdef::no_dashboards[] {beatname_uc} provides a command-line interface for starting {beatname_uc} and -performing common tasks, like testing configuration files and loading dashboards (deprecated). -endif::[] +performing common tasks, like testing configuration files. +endif::no_dashboards[] The command-line also supports <> for controlling global behaviors. @@ -140,9 +142,17 @@ endif::[] [[export-command]] ==== `export` command +ifndef::no_dashboards[] {export-command-short-desc}. You can use this command to quickly view your configuration, see the contents of the index template, or export a dashboard from {kib}. +endif::no_dashboards[] + +ifdef::no_dashboards[] +{export-command-short-desc}. You can use this +command to quickly view your configuration or see the contents of the index +template. +endif::no_dashboards[] *SYNOPSIS* @@ -157,6 +167,7 @@ template, or export a dashboard from {kib}. Exports the current configuration to stdout. If you use the `-c` flag, this command exports the configuration that's defined in the specified file. +ifndef::no_dashboards[] [[dashboard-subcommand]]*`dashboard`*:: Exports a dashboard. You can use this option to store a dashboard on disk in a module and load it automatically. For example, to export the dashboard to a JSON @@ -179,6 +190,7 @@ To load the dashboard, copy the generated `dashboard.json` file into the + If {kib} is not running on `localhost:5061`, you must also adjust the {beatname_uc} configuration under `setup.kibana`. +endif::no_dashboards[] [[template-subcommand]]*`template`*:: Exports the index template to stdout. You can specify the `--es.version` and @@ -202,20 +214,31 @@ When used with <>, sets the base name to use for the index template. If this flag is not specified, the default base name is +{beatname_lc}+. +ifndef::no_dashboards[] *`--id DASHBOARD_ID`*:: When used with <>, specifies the dashboard ID. +endif::no_dashboards[] {global-flags} *EXAMPLES* +ifndef::no_dashboards[] ["source","sh",subs="attributes"] ----- {beatname_lc} export config {beatname_lc} export template --es.version {stack-version} --index myindexname {beatname_lc} export dashboard --id="a7b35890-8baa-11e8-9676-ef67484126fb" > dashboard.json ----- +endif::no_dashboards[] +ifdef::no_dashboards[] +["source","sh",subs="attributes"] +----- +{beatname_lc} export config +{beatname_lc} export template --es.version {stack-version} --index myindexname +----- +endif::no_dashboards[] [[help-command]] ==== `help` command @@ -560,8 +583,10 @@ Or: * The index template ensures that fields are mapped correctly in Elasticsearch. +ifndef::no_dashboards[] * The {kib} dashboards make it easier for you to visualize {beatname_uc} data in {kib}. +endif::no_dashboards[] ifdef::has_ml_jobs[] * The machine learning jobs contain the configuration information and metadata @@ -581,21 +606,13 @@ Use this command if you want to set up the environment without actually running *FLAGS* -ifndef::deprecate_dashboard_loading[] +ifndef::no_dashboards[] *`--dashboards`*:: Sets up the {kib} dashboards (when available). This option loads the dashboards from the {beatname_uc} package. For more options, such as loading customized dashboards, see {beatsdevguide}/import-dashboards.html[Importing Existing Beat Dashboards] in the _Beats Developer Guide_. -endif::[] - -ifdef::deprecate_dashboard_loading[] -*`--dashboards`*:: - -deprecated[{deprecate_dashboard_loading}] -+ -Sets up the {kib} dashboards only. -endif::[] +endif::no_dashboards[] *`-h, --help`*:: Shows help for the `setup` command. diff --git a/libbeat/docs/dashboardsconfig.asciidoc b/libbeat/docs/dashboardsconfig.asciidoc index 83099f84d161..fbc9f1a202d7 100644 --- a/libbeat/docs/dashboardsconfig.asciidoc +++ b/libbeat/docs/dashboardsconfig.asciidoc @@ -11,11 +11,6 @@ [[configuration-dashboards]] == Load the Kibana dashboards -ifdef::deprecate_dashboard_loading[] - -deprecated[{deprecate_dashboard_loading}] - -endif::[] {beatname_uc} comes packaged with example Kibana dashboards, visualizations, and searches for visualizing {beatname_uc} data in Kibana. diff --git a/libbeat/docs/outputconfig.asciidoc b/libbeat/docs/outputconfig.asciidoc index eaf848f64137..ccfc3c254732 100644 --- a/libbeat/docs/outputconfig.asciidoc +++ b/libbeat/docs/outputconfig.asciidoc @@ -92,10 +92,12 @@ output.elasticsearch: For more information about securing {beatname_uc}, see <>. +ifndef::no_ilm[] If you are indexing large amounts of time-series data, you might also want to configure {beatname_uc} to use index lifecycle management. For more information about configuring and using index lifecycle management with {beatname_uc}, see <>. +endif::no_ilm[] ==== Compatibility @@ -243,9 +245,6 @@ ifndef::no_dashboards[] If you are using the pre-built Kibana dashboards, you also need to set the `setup.dashboards.index` option (see <>). -ifdef::deprecate_dashboard_loading[] -deprecated[{deprecate_dashboard_loading}] -endif::deprecate_dashboard_loading[] endif::no_dashboards[] You can set the index dynamically by using a format string to access any event @@ -342,6 +341,20 @@ This configuration results in indices named `sev1`, `sev2`, and `sev3`. The `mappings` setting simplifies the configuration, but is limited to string values. You cannot specify format strings within the mapping pairs. +<<<<<<< HEAD +======= +//TODO: MOVE ILM OPTIONS TO APPEAR LOGICALLY BASED ON LOCATION IN THE YAML FILE. + +ifndef::no_ilm[] +[[ilm-es]] +===== `ilm` + +Configuration options for index lifecycle management. + +See <> for more information. +endif::no_ilm[] + +>>>>>>> docs: add no_ilm attribute ifndef::no-pipeline[] [[pipeline-option-es]] ===== `pipeline` diff --git a/libbeat/docs/shared-kibana-config.asciidoc b/libbeat/docs/shared-kibana-config.asciidoc index 0f72529efb82..90dcdb012f46 100644 --- a/libbeat/docs/shared-kibana-config.asciidoc +++ b/libbeat/docs/shared-kibana-config.asciidoc @@ -11,22 +11,9 @@ [[setup-kibana-endpoint]] == Set up the Kibana endpoint -ifdef::deprecate_dashboard_loading[] -deprecated[{deprecate_dashboard_loading}] - -endif::[] - -ifeval::["{beatname_lc}" == "apm-server"] -The Kibana dashboards are loaded into Kibana via the Kibana API. -This requires a Kibana endpoint configuration. -endif::[] - -ifeval::["{beatname_lc}" != "apm-server"] Starting with {beatname_uc} 6.0.0, the Kibana dashboards are loaded into Kibana via the Kibana API. This requires a Kibana endpoint configuration. -endif::[] - You configure the endpoint in the `setup.kibana` section of the +{beatname_lc}.yml+ config file. diff --git a/libbeat/docs/shared-template-load.asciidoc b/libbeat/docs/shared-template-load.asciidoc index 095ec5456181..b746bdc42f88 100644 --- a/libbeat/docs/shared-template-load.asciidoc +++ b/libbeat/docs/shared-template-load.asciidoc @@ -79,7 +79,7 @@ output.elasticsearch.index: "customname-%{[{beat_version_key}]}-%{+yyyy.MM.dd}" setup.template.name: "customname" setup.template.pattern: "customname-*" ----- -ifndef::deprecate_dashboard_loading,no_dashboards[] +ifndef::no_dashboards[] + If you're using pre-built Kibana dashboards, also set the `setup.dashboards.index` option. For example: @@ -88,12 +88,11 @@ If you're using pre-built Kibana dashboards, also set the ---- setup.dashboards.index: "customname-*" ---- -endif::[] +endif::no_dashboards[] -ifdef::deprecate_dashboard_loading[] -+ +ifdef::no_dashboards[] Remember to change the index name when you load dashboards via the Kibana UI. -endif::[] +endif::no_dashboards[] See <> for the full list of configuration options. From f8ce1aa72892b8f3b2e89c807a288af8dd8be1bf Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Thu, 31 Jan 2019 13:46:45 -0500 Subject: [PATCH 46/66] docs: fix my mistake (#10468) --- libbeat/docs/outputconfig.asciidoc | 3 --- 1 file changed, 3 deletions(-) diff --git a/libbeat/docs/outputconfig.asciidoc b/libbeat/docs/outputconfig.asciidoc index ccfc3c254732..bfeff903112e 100644 --- a/libbeat/docs/outputconfig.asciidoc +++ b/libbeat/docs/outputconfig.asciidoc @@ -341,8 +341,6 @@ This configuration results in indices named `sev1`, `sev2`, and `sev3`. The `mappings` setting simplifies the configuration, but is limited to string values. You cannot specify format strings within the mapping pairs. -<<<<<<< HEAD -======= //TODO: MOVE ILM OPTIONS TO APPEAR LOGICALLY BASED ON LOCATION IN THE YAML FILE. ifndef::no_ilm[] @@ -354,7 +352,6 @@ Configuration options for index lifecycle management. See <> for more information. endif::no_ilm[] ->>>>>>> docs: add no_ilm attribute ifndef::no-pipeline[] [[pipeline-option-es]] ===== `pipeline` From cb1c6fea59840ad2630b454f9783d6c1c9e14779 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 31 Jan 2019 19:47:35 +0100 Subject: [PATCH 47/66] Support Kafka 2.1.0 (#10440) --- CHANGELOG.next.asciidoc | 1 + libbeat/common/kafka/version.go | 6 ++++-- libbeat/docs/outputconfig.asciidoc | 2 +- metricbeat/docker-compose.yml | 2 +- metricbeat/docs/modules/kafka.asciidoc | 2 +- metricbeat/module/kafka/_meta/Dockerfile | 2 +- metricbeat/module/kafka/_meta/docs.asciidoc | 2 +- testing/environments/docker/kafka/Dockerfile | 2 +- 8 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index c926bb66a052..96840f5c9ff4 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -196,6 +196,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add `add_fields` processor. {pull}10119[10119] - Add Kibana field formatter to bytes fields. {pull}10184[10184] - Document a few more `auditd.log.*` fields. {pull}10192[10192] +- Support Kafka 2.1.0. {pull}10440[10440] - Add ILM mode `auto` to setup.ilm.enabled setting. This new default value detects if ILM is available {pull}10347[10347] - Add support to read ILM policy from external JSON file. {pull}10347[10347] - Add `overwrite` and `check_exists` settings to ILM support. {pull}10347[10347] diff --git a/libbeat/common/kafka/version.go b/libbeat/common/kafka/version.go index 6cc8d9cb369a..1ca8472a97b7 100644 --- a/libbeat/common/kafka/version.go +++ b/libbeat/common/kafka/version.go @@ -75,8 +75,10 @@ var ( "1": v1_1_1, "2.0.0": sarama.V2_0_0_0, - "2.0": sarama.V2_0_0_0, - "2": sarama.V2_0_0_0, + "2.0.1": sarama.V2_0_1_0, + "2.0": sarama.V2_0_1_0, + "2.1": sarama.V2_1_0_0, + "2": sarama.V2_1_0_0, } ) diff --git a/libbeat/docs/outputconfig.asciidoc b/libbeat/docs/outputconfig.asciidoc index bfeff903112e..c62546254343 100644 --- a/libbeat/docs/outputconfig.asciidoc +++ b/libbeat/docs/outputconfig.asciidoc @@ -817,7 +817,7 @@ NOTE: Events bigger than <> will be [[kafka-compatibility]] ==== Compatibility -This output works with all Kafka versions in between 0.11 and 2.0.0. Older versions +This output works with all Kafka versions in between 0.11 and 2.1.0. Older versions might work as well, but are not supported. ==== Configuration options diff --git a/metricbeat/docker-compose.yml b/metricbeat/docker-compose.yml index 36a1c938eef1..f22db755f9d7 100644 --- a/metricbeat/docker-compose.yml +++ b/metricbeat/docker-compose.yml @@ -110,7 +110,7 @@ services: build: context: ./module/kafka/_meta args: - KAFKA_VERSION: 2.0.0 + KAFKA_VERSION: 2.1.0 kafka_1_1_0: build: diff --git a/metricbeat/docs/modules/kafka.asciidoc b/metricbeat/docs/modules/kafka.asciidoc index 054d8cdb2bef..3c8f205ebe7e 100644 --- a/metricbeat/docs/modules/kafka.asciidoc +++ b/metricbeat/docs/modules/kafka.asciidoc @@ -12,7 +12,7 @@ The default metricsets are `consumergroup` and `partition`. [float] === Compability -This module is tested with Kafka 0.10.2.1, 1.1.0 and 2.0.0. +This module is tested with Kafka 0.10.2.1, 1.1.0 and 2.1.0. [float] diff --git a/metricbeat/module/kafka/_meta/Dockerfile b/metricbeat/module/kafka/_meta/Dockerfile index 35d19a8bc5c4..3813e4c65d27 100644 --- a/metricbeat/module/kafka/_meta/Dockerfile +++ b/metricbeat/module/kafka/_meta/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stretch -ARG KAFKA_VERSION=2.0.0 +ARG KAFKA_VERSION=2.1.0 ENV KAFKA_HOME /kafka # The advertised host is kafka. This means it will not work if container is started locally and connected from localhost to it diff --git a/metricbeat/module/kafka/_meta/docs.asciidoc b/metricbeat/module/kafka/_meta/docs.asciidoc index aa228583dbc4..11961a724566 100644 --- a/metricbeat/module/kafka/_meta/docs.asciidoc +++ b/metricbeat/module/kafka/_meta/docs.asciidoc @@ -5,4 +5,4 @@ The default metricsets are `consumergroup` and `partition`. [float] === Compability -This module is tested with Kafka 0.10.2.1, 1.1.0 and 2.0.0. +This module is tested with Kafka 0.10.2.1, 1.1.0 and 2.1.0. diff --git a/testing/environments/docker/kafka/Dockerfile b/testing/environments/docker/kafka/Dockerfile index 581513efcbda..753102d50551 100644 --- a/testing/environments/docker/kafka/Dockerfile +++ b/testing/environments/docker/kafka/Dockerfile @@ -4,7 +4,7 @@ ENV KAFKA_HOME /kafka # The advertised host is kafka. This means it will not work if container is started locally and connected from localhost to it ENV KAFKA_ADVERTISED_HOST kafka ENV KAFKA_LOGS_DIR="/kafka-logs" -ENV KAFKA_VERSION 2.0.0 +ENV KAFKA_VERSION 2.1.0 ENV _JAVA_OPTIONS "-Djava.net.preferIPv4Stack=true" ENV TERM=linux From 98e38be9fbbe4b8b77e21ec29d811f887785954d Mon Sep 17 00:00:00 2001 From: Andrew Cholakian Date: Thu, 31 Jan 2019 13:54:55 -0600 Subject: [PATCH 48/66] [Heartbeat] Fix id/summary with multi-url configs (#10408) [Heartbeat] Fix id/summary with multi-url configs When using configurations that specify multiple URLs in the config there were two issues: 1. They would all share the same ID, when IDs are supposed to be unique to an URL 2. The Job summary would summarize all the URLs, instead of all the DNS entries per URL. This patch fixes this by introducing a new WrapAllSeparately wrapper that wraps top level jobs with a new JobWrapperFactory, that lets us create JobWrapper instances with separate scopes. --- heartbeat/monitors/active/http/http_test.go | 13 +- heartbeat/monitors/active/tcp/tcp_test.go | 9 +- heartbeat/monitors/jobs/job.go | 22 +- heartbeat/monitors/jobs/job_test.go | 3 +- heartbeat/monitors/monitor_test.go | 5 +- heartbeat/monitors/wrappers/monitors.go | 61 ++-- heartbeat/monitors/wrappers/monitors_test.go | 293 +++++++++++------- heartbeat/monitors/wrappers/util_test.go | 3 +- libbeat/common/mapval/is_defs.go | 28 ++ libbeat/common/mapval/is_defs_test.go | 56 ++++ .../mapval/testing.go} | 9 +- libbeat/testing/mapvaltest/mapvaltest_test.go | 37 --- 12 files changed, 341 insertions(+), 198 deletions(-) rename libbeat/{testing/mapvaltest/mapvaltest.go => common/mapval/testing.go} (79%) delete mode 100644 libbeat/testing/mapvaltest/mapvaltest_test.go diff --git a/heartbeat/monitors/active/http/http_test.go b/heartbeat/monitors/active/http/http_test.go index 4822dc0cb680..bd5bd1f5dd40 100644 --- a/heartbeat/monitors/active/http/http_test.go +++ b/heartbeat/monitors/active/http/http_test.go @@ -38,7 +38,6 @@ import ( "github.com/elastic/beats/libbeat/common/file" "github.com/elastic/beats/libbeat/common/mapval" btesting "github.com/elastic/beats/libbeat/testing" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) func testRequest(t *testing.T, testURL string) *beat.Event { @@ -192,7 +191,7 @@ func TestUpStatuses(t *testing.T) { t.Run(fmt.Sprintf("Test OK HTTP status %d", status), func(t *testing.T) { server, event := checkServer(t, hbtest.HelloWorldHandler(status)) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks("127.0.0.1", "up", "http"), @@ -212,7 +211,7 @@ func TestDownStatuses(t *testing.T) { t.Run(fmt.Sprintf("test down status %d", status), func(t *testing.T) { server, event := checkServer(t, hbtest.HelloWorldHandler(status)) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks("127.0.0.1", "down", "http"), @@ -249,7 +248,7 @@ func TestLargeResponse(t *testing.T) { _, err = job(event) require.NoError(t, err) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks("127.0.0.1", "up", "http"), @@ -282,7 +281,7 @@ func runHTTPSServerCheck( event := testTLSRequest(t, server.URL, mergedExtraConfig) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks("127.0.0.1", "up", "http"), @@ -348,7 +347,7 @@ func TestConnRefusedJob(t *testing.T) { event := testRequest(t, url) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks(ip, "down", "http"), @@ -370,7 +369,7 @@ func TestUnreachableJob(t *testing.T) { event := testRequest(t, url) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks(ip, "down", "http"), diff --git a/heartbeat/monitors/active/tcp/tcp_test.go b/heartbeat/monitors/active/tcp/tcp_test.go index 36c6c79f3de4..fc857a298b5f 100644 --- a/heartbeat/monitors/active/tcp/tcp_test.go +++ b/heartbeat/monitors/active/tcp/tcp_test.go @@ -35,7 +35,6 @@ import ( "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/mapval" btesting "github.com/elastic/beats/libbeat/testing" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) func testTCPCheck(t *testing.T, host string, port uint16) *beat.Event { @@ -102,7 +101,7 @@ func TestUpEndpointJob(t *testing.T) { event := testTCPCheck(t, "localhost", port) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.BaseChecks("127.0.0.1", "up", "tcp"), @@ -145,7 +144,7 @@ func TestTLSConnection(t *testing.T) { defer os.Remove(certFile.Name()) event := testTLSTCPCheck(t, ip, port, certFile.Name()) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( hbtest.TLSChecks(0, 0, cert), @@ -166,7 +165,7 @@ func TestConnectionRefusedEndpointJob(t *testing.T) { event := testTCPCheck(t, ip, port) dialErr := fmt.Sprintf("dial tcp %s:%d", ip, port) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( tcpMonitorChecks(ip, ip, port, "down"), @@ -184,7 +183,7 @@ func TestUnreachableEndpointJob(t *testing.T) { event := testTCPCheck(t, ip, port) dialErr := fmt.Sprintf("dial tcp %s:%d", ip, port) - mapvaltest.Test( + mapval.Test( t, mapval.Strict(mapval.Compose( tcpMonitorChecks(ip, ip, port, "down"), diff --git a/heartbeat/monitors/jobs/job.go b/heartbeat/monitors/jobs/job.go index 4c9b9db43f59..efa387394018 100644 --- a/heartbeat/monitors/jobs/job.go +++ b/heartbeat/monitors/jobs/job.go @@ -17,7 +17,9 @@ package jobs -import "github.com/elastic/beats/libbeat/beat" +import ( + "github.com/elastic/beats/libbeat/beat" +) // A Job represents a unit of execution, and may return multiple continuation jobs. type Job func(event *beat.Event) ([]Job, error) @@ -46,6 +48,24 @@ func WrapAll(jobs []Job, wrappers ...JobWrapper) []Job { return wrapped } +// JobWrapperFactory can be used to created new instances of JobWrappers. +type JobWrapperFactory func() JobWrapper + +// WrapAllSeparately wraps the given jobs using the given JobWrapperFactory instances. +// This enables us to use a different JobWrapper for the jobs passed in, but recursively apply +// the same wrapper to their children. +func WrapAllSeparately(jobs []Job, factories ...JobWrapperFactory) []Job { + var wrapped []Job + for _, j := range jobs { + for _, factory := range factories { + wrapper := factory() + j = Wrap(j, wrapper) + } + wrapped = append(wrapped, j) + } + return wrapped +} + // Wrap wraps the given Job and also any continuations with the given JobWrapper. func Wrap(job Job, wrapper JobWrapper) Job { return func(event *beat.Event) ([]Job, error) { diff --git a/heartbeat/monitors/jobs/job_test.go b/heartbeat/monitors/jobs/job_test.go index c26077ba28d8..6a3e06223a09 100644 --- a/heartbeat/monitors/jobs/job_test.go +++ b/heartbeat/monitors/jobs/job_test.go @@ -26,7 +26,6 @@ import ( "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/mapval" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) func TestWrapAll(t *testing.T) { @@ -117,7 +116,7 @@ func TestWrapAll(t *testing.T) { fr := results[idx].Fields validator := mapval.Strict(mapval.MustCompile(rf)) - mapvaltest.Test(t, validator, fr) + mapval.Test(t, validator, fr) } }) } diff --git a/heartbeat/monitors/monitor_test.go b/heartbeat/monitors/monitor_test.go index bc459278e716..ce86bb16371e 100644 --- a/heartbeat/monitors/monitor_test.go +++ b/heartbeat/monitors/monitor_test.go @@ -21,11 +21,12 @@ import ( "testing" "time" + "github.com/elastic/beats/libbeat/common/mapval" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/elastic/beats/heartbeat/scheduler" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) func TestMonitor(t *testing.T) { @@ -58,7 +59,7 @@ func TestMonitor(t *testing.T) { pcClient.Close() for _, event := range pcClient.Publishes() { - mapvaltest.Test(t, mockEventMonitorValidator(""), event.Fields) + mapval.Test(t, mockEventMonitorValidator(""), event.Fields) } } else { // Let's yield this goroutine so we don't spin diff --git a/heartbeat/monitors/wrappers/monitors.go b/heartbeat/monitors/wrappers/monitors.go index 3d67f36808b7..ad05d22c5e98 100644 --- a/heartbeat/monitors/wrappers/monitors.go +++ b/heartbeat/monitors/wrappers/monitors.go @@ -23,38 +23,61 @@ import ( "time" "github.com/gofrs/uuid" + "github.com/mitchellh/hashstructure" + "github.com/pkg/errors" "github.com/elastic/beats/heartbeat/eventext" "github.com/elastic/beats/heartbeat/look" "github.com/elastic/beats/heartbeat/monitors/jobs" "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/logp" ) // WrapCommon applies the common wrappers that all monitor jobs get. func WrapCommon(js []jobs.Job, id string, name string, typ string) []jobs.Job { - return jobs.WrapAll( - js, - addMonitorStatus, - addMonitorDuration, - addMonitorMeta(id, name, typ), - makeAddSummary(id, uint16(len(js))), - ) + return jobs.WrapAllSeparately( + jobs.WrapAll( + js, + addMonitorStatus, + addMonitorDuration, + ), func() jobs.JobWrapper { + return addMonitorMeta(id, name, typ, len(js) > 1) + }, func() jobs.JobWrapper { + return makeAddSummary() + }) } // addMonitorMeta adds the id, name, and type fields to the monitor. -func addMonitorMeta(id string, name string, typ string) jobs.JobWrapper { +func addMonitorMeta(id string, name string, typ string, isMulti bool) jobs.JobWrapper { return func(job jobs.Job) jobs.Job { - return WithFields( - common.MapStr{ - "monitor": common.MapStr{ - "id": id, - "name": name, - "type": typ, + return func(event *beat.Event) ([]jobs.Job, error) { + cont, e := job(event) + thisID := id + + if isMulti { + url, err := event.GetValue("url.full") + if err != nil { + logp.Error(errors.Wrap(err, "Mandatory url.full key missing!")) + url = "n/a" + } + urlHash, _ := hashstructure.Hash(url, nil) + thisID = fmt.Sprintf("%s-%x", id, urlHash) + } + + eventext.MergeEventFields( + event, + common.MapStr{ + "monitor": common.MapStr{ + "id": thisID, + "name": name, + "type": typ, + }, }, - }, - job, - ) + ) + + return cont, e + } } } @@ -99,7 +122,7 @@ func addMonitorDuration(job jobs.Job) jobs.Job { } // makeAddSummary summarizes the job, adding the `summary` field to the last event emitted. -func makeAddSummary(id string, numJobs uint16) jobs.JobWrapper { +func makeAddSummary() jobs.JobWrapper { // This is a tricky method. The way this works is that we track the state across jobs in the // state struct here. state := struct { @@ -114,7 +137,7 @@ func makeAddSummary(id string, numJobs uint16) jobs.JobWrapper { } // Note this is not threadsafe, must be called from a mutex resetState := func() { - state.remaining = numJobs + state.remaining = 1 state.up = 0 state.down = 0 state.generation++ diff --git a/heartbeat/monitors/wrappers/monitors_test.go b/heartbeat/monitors/wrappers/monitors_test.go index b6a150d2103d..00755b4c6e22 100644 --- a/heartbeat/monitors/wrappers/monitors_test.go +++ b/heartbeat/monitors/wrappers/monitors_test.go @@ -19,152 +19,213 @@ package wrappers import ( "fmt" + "net/url" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/elastic/beats/heartbeat/eventext" "github.com/elastic/beats/heartbeat/monitors/jobs" "github.com/elastic/beats/libbeat/beat" "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/mapval" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) -func TestWrapCommon(t *testing.T) { - var simpleJob jobs.Job = func(event *beat.Event) ([]jobs.Job, error) { - eventext.MergeEventFields(event, common.MapStr{"simple": "job"}) - return nil, nil - } +type fields struct { + id string + name string + typ string +} - var errorJob jobs.Job = func(event *beat.Event) ([]jobs.Job, error) { - return nil, fmt.Errorf("myerror") - } +type testDef struct { + name string + fields fields + jobs []jobs.Job + want []mapval.Validator +} - var contJob jobs.Job = func(event *beat.Event) ([]jobs.Job, error) { - eventext.MergeEventFields(event, common.MapStr{"cont": "1st"}) - return []jobs.Job{ - func(event *beat.Event) ([]jobs.Job, error) { - eventext.MergeEventFields(event, common.MapStr{"cont": "2nd"}) - return nil, nil - }, - }, nil - } +func testCommonWrap(t *testing.T, tt testDef) { + t.Run(tt.name, func(t *testing.T) { + wrapped := WrapCommon(tt.jobs, tt.fields.id, tt.fields.name, tt.fields.typ) + + results, err := jobs.ExecJobsAndConts(t, wrapped) + assert.NoError(t, err) - type fields struct { - id string - name string - typ string + for idx, r := range results { + t.Run(fmt.Sprintf("result at index %d", idx), func(t *testing.T) { + mapval.Test(t, mapval.Strict(tt.want[idx]), r.Fields) + }) + } + }) +} + +func TestSimpleJob(t *testing.T) { + fields := fields{"myid", "myname", "mytyp"} + testCommonWrap(t, testDef{ + "simple", + fields, + []jobs.Job{makeURLJob(t, "tcp://foo.com:80")}, + []mapval.Validator{ + mapval.Compose( + urlValidator(t, "tcp://foo.com:80"), + mapval.MustCompile(mapval.Map{ + "monitor": mapval.Map{ + "duration.us": mapval.IsDuration, + "id": fields.id, + "name": fields.name, + "type": fields.typ, + "status": "up", + "check_group": mapval.IsString, + }, + }), + summaryValidator(1, 0), + )}, + }) +} + +func TestErrorJob(t *testing.T) { + fields := fields{"myid", "myname", "mytyp"} + + errorJob := func(event *beat.Event) ([]jobs.Job, error) { + return nil, fmt.Errorf("myerror") } - testFields := fields{"myid", "myname", "mytyp"} - commonFieldsValidator := func(f fields, status string) mapval.Validator { - return mapval.MustCompile(mapval.Map{ + errorJobValidator := mapval.Compose( + mapval.MustCompile(mapval.Map{"error": mapval.Map{"message": "myerror", "type": "io"}}), + mapval.MustCompile(mapval.Map{ "monitor": mapval.Map{ "duration.us": mapval.IsDuration, - "id": f.id, - "name": f.name, - "type": f.typ, - "status": status, + "id": fields.id, + "name": fields.name, + "type": fields.typ, + "status": "down", "check_group": mapval.IsString, }, - }) - } + }), + ) - // This duplicates hbtest.SummaryChecks to avoid an import cycle. - // It could be refactored out, but it just isn't worth it. - summaryValidator := func(up int, down int) mapval.Validator { - return mapval.MustCompile(mapval.Map{ - "summary": mapval.Map{ - "up": uint16(up), - "down": uint16(down), - }, - }) + testCommonWrap(t, testDef{ + "job error", + fields, + []jobs.Job{errorJob}, + []mapval.Validator{ + mapval.Compose( + errorJobValidator, + summaryValidator(0, 1), + )}, + }) +} + +func TestMultiJobNoConts(t *testing.T) { + fields := fields{"myid", "myname", "mytyp"} + + uniqScope := mapval.ScopedIsUnique() + + validator := func(u string) mapval.Validator { + return mapval.Compose( + urlValidator(t, u), + mapval.MustCompile(mapval.Map{ + "monitor": mapval.Map{ + "duration.us": mapval.IsDuration, + "id": uniqScope.IsUniqueTo("id"), + "name": fields.name, + "type": fields.typ, + "status": "up", + "check_group": uniqScope.IsUniqueTo("check_group"), + }, + }), + summaryValidator(1, 0), + ) } - simpleJobValidator := mapval.Compose( - mapval.MustCompile(mapval.Map{"simple": "job"}), - commonFieldsValidator(testFields, "up"), - ) + testCommonWrap(t, testDef{ + "multi-job", + fields, + []jobs.Job{makeURLJob(t, "http://foo.com"), makeURLJob(t, "http://bar.com")}, + []mapval.Validator{validator("http://foo.com"), validator("http://bar.com")}, + }) +} - errorJobValidator := mapval.Compose( - mapval.MustCompile(mapval.Map{"error": mapval.Map{"message": "myerror", "type": "io"}}), - commonFieldsValidator(testFields, "down"), - ) +func TestMultiJobConts(t *testing.T) { + fields := fields{"myid", "myname", "mytyp"} + + uniqScope := mapval.ScopedIsUnique() + + makeContJob := func(t *testing.T, u string) jobs.Job { + return func(event *beat.Event) ([]jobs.Job, error) { + eventext.MergeEventFields(event, common.MapStr{"cont": "1st"}) + u, err := url.Parse(u) + require.NoError(t, err) + eventext.MergeEventFields(event, common.MapStr{"url": URLFields(u)}) + return []jobs.Job{ + func(event *beat.Event) ([]jobs.Job, error) { + eventext.MergeEventFields(event, common.MapStr{"cont": "2nd"}) + eventext.MergeEventFields(event, common.MapStr{"url": URLFields(u)}) + return nil, nil + }, + }, nil + } + } - contJobValidator := func(msg string) mapval.Validator { + contJobValidator := func(u string, msg string) mapval.Validator { return mapval.Compose( + urlValidator(t, u), mapval.MustCompile(mapval.Map{"cont": msg}), - commonFieldsValidator(testFields, "up"), + mapval.MustCompile(mapval.Map{ + "monitor": mapval.Map{ + "duration.us": mapval.IsDuration, + "id": uniqScope.IsUniqueTo(u), + "name": fields.name, + "type": fields.typ, + "status": "up", + "check_group": uniqScope.IsUniqueTo(u), + }, + }), ) } - tests := []struct { - name string - fields fields - jobs []jobs.Job - want []mapval.Validator - }{ - { - "simple", - testFields, - []jobs.Job{simpleJob}, - []mapval.Validator{ - mapval.Compose( - simpleJobValidator, - summaryValidator(1, 0), - )}, - }, - { - "job error", - testFields, - []jobs.Job{errorJob}, - []mapval.Validator{ - mapval.Compose( - errorJobValidator, - summaryValidator(0, 1), - )}, - }, - { - "multi-job", - testFields, - []jobs.Job{simpleJob, simpleJob}, - []mapval.Validator{ - simpleJobValidator, - mapval.Compose( - simpleJobValidator, - summaryValidator(2, 0), - ), - }, + testCommonWrap(t, testDef{ + "multi-job-continuations", + fields, + []jobs.Job{makeContJob(t, "http://foo.com"), makeContJob(t, "http://bar.com")}, + []mapval.Validator{ + contJobValidator("http://foo.com", "1st"), + mapval.Compose( + contJobValidator("http://foo.com", "2nd"), + summaryValidator(2, 0), + ), + contJobValidator("http://bar.com", "1st"), + mapval.Compose( + contJobValidator("http://bar.com", "2nd"), + summaryValidator(2, 0), + ), }, - { - "multi-job-continuations", - testFields, - []jobs.Job{contJob, contJob}, - []mapval.Validator{ - contJobValidator("1st"), - contJobValidator("2nd"), - contJobValidator("1st"), - mapval.Compose( - contJobValidator("2nd"), - commonFieldsValidator(testFields, "up"), - summaryValidator(4, 0), - ), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - wrapped := WrapCommon(tt.jobs, tt.fields.id, tt.fields.name, tt.fields.typ) - - results, err := jobs.ExecJobsAndConts(t, wrapped) - assert.NoError(t, err) - - for idx, r := range results { - t.Run(fmt.Sprintf("result at index %d", idx), func(t *testing.T) { - mapvaltest.Test(t, mapval.Strict(tt.want[idx]), r.Fields) - }) - } - }) + }) +} + +func makeURLJob(t *testing.T, u string) jobs.Job { + parsed, err := url.Parse(u) + require.NoError(t, err) + return func(event *beat.Event) (i []jobs.Job, e error) { + eventext.MergeEventFields(event, common.MapStr{"url": URLFields(parsed)}) + return nil, nil } } + +func urlValidator(t *testing.T, u string) mapval.Validator { + parsed, err := url.Parse(u) + require.NoError(t, err) + return mapval.MustCompile(mapval.Map{"url": mapval.Map(URLFields(parsed))}) +} + +// This duplicates hbtest.SummaryChecks to avoid an import cycle. +// It could be refactored out, but it just isn't worth it. +func summaryValidator(up int, down int) mapval.Validator { + return mapval.MustCompile(mapval.Map{ + "summary": mapval.Map{ + "up": uint16(up), + "down": uint16(down), + }, + }) +} diff --git a/heartbeat/monitors/wrappers/util_test.go b/heartbeat/monitors/wrappers/util_test.go index 573ab1dfebe8..ecb1bbeffff4 100644 --- a/heartbeat/monitors/wrappers/util_test.go +++ b/heartbeat/monitors/wrappers/util_test.go @@ -25,7 +25,6 @@ import ( "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/common/mapval" - "github.com/elastic/beats/libbeat/testing/mapvaltest" ) func TestURLFields(t *testing.T) { @@ -82,7 +81,7 @@ func TestURLFields(t *testing.T) { require.NoError(t, err) got := URLFields(parsed) - mapvaltest.Test(t, mapval.MustCompile(mapval.Map(tt.want)), got) + mapval.Test(t, mapval.MustCompile(mapval.Map(tt.want)), got) }) } } diff --git a/libbeat/common/mapval/is_defs.go b/libbeat/common/mapval/is_defs.go index d85369d4c95a..457e85343dcf 100644 --- a/libbeat/common/mapval/is_defs.go +++ b/libbeat/common/mapval/is_defs.go @@ -177,6 +177,34 @@ func IsAny(of ...IsDef) IsDef { }) } +// IsUnique instances are used in multiple spots, flagging a value as being in error if it's seen across invocations. +// To use it, assign IsUnique to a variable, then use that variable multiple times in a Map. +func IsUnique() IsDef { + return ScopedIsUnique().IsUniqueTo("") +} + +// UniqScopeTracker is represents the tracking data for invoking IsUniqueTo. +type UniqScopeTracker map[interface{}]string + +// IsUniqueTo validates that the given value is only ever seen within a single namespace. +func (ust UniqScopeTracker) IsUniqueTo(namespace string) IsDef { + return Is("unique", func(path path, v interface{}) *Results { + for trackerK, trackerNs := range ust { + hasNamespace := len(namespace) > 0 + if reflect.DeepEqual(trackerK, v) && (!hasNamespace || namespace != trackerNs) { + return SimpleResult(path, false, "Value '%v' is repeated", v) + } + } + + ust[v] = namespace + return ValidResult(path) + }) +} + +func ScopedIsUnique() UniqScopeTracker { + return UniqScopeTracker{} +} + // isStrCheck is a helper for IsDefs that must assert that the value is a string first. func isStrCheck(path path, v interface{}) (str string, errorResults *Results) { strV, ok := v.(string) diff --git a/libbeat/common/mapval/is_defs_test.go b/libbeat/common/mapval/is_defs_test.go index a6f0e6dcaafc..f50250595fdc 100644 --- a/libbeat/common/mapval/is_defs_test.go +++ b/libbeat/common/mapval/is_defs_test.go @@ -23,6 +23,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/elastic/beats/libbeat/common" ) @@ -152,3 +153,58 @@ func TestIsNil(t *testing.T) { assertIsDefValid(t, IsNil, nil) assertIsDefInvalid(t, IsNil, "foo") } + +func TestIsUnique(t *testing.T) { + tests := []struct { + name string + validator func() Validator + data common.MapStr + isValid bool + }{ + { + "IsUnique find dupes", + func() Validator { + v := IsUnique() + return MustCompile(Map{"a": v, "b": v}) + }, + common.MapStr{"a": 1, "b": 1}, + false, + }, + { + "IsUnique separate instances don't care about dupes", + func() Validator { return MustCompile(Map{"a": IsUnique(), "b": IsUnique()}) }, + common.MapStr{"a": 1, "b": 1}, + true, + }, + { + "IsUniqueTo duplicates across namespaces fail", + func() Validator { + s := ScopedIsUnique() + return MustCompile(Map{"a": s.IsUniqueTo("test"), "b": s.IsUniqueTo("test2")}) + }, + common.MapStr{"a": 1, "b": 1}, + false, + }, + + { + "IsUniqueTo duplicates within a namespace succeeds", + func() Validator { + s := ScopedIsUnique() + return MustCompile(Map{"a": s.IsUniqueTo("test"), "b": s.IsUniqueTo("test")}) + }, + common.MapStr{"a": 1, "b": 1}, + true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + + if tt.isValid { + Test(t, tt.validator(), tt.data) + } else { + result := tt.validator()(tt.data) + require.False(t, result.Valid) + } + }) + } +} diff --git a/libbeat/testing/mapvaltest/mapvaltest.go b/libbeat/common/mapval/testing.go similarity index 79% rename from libbeat/testing/mapvaltest/mapvaltest.go rename to libbeat/common/mapval/testing.go index 0701d4c61d59..e318b5d5c8ac 100644 --- a/libbeat/testing/mapvaltest/mapvaltest.go +++ b/libbeat/common/mapval/testing.go @@ -15,11 +15,7 @@ // specific language governing permissions and limitations // under the License. -package mapvaltest - -// skimatest is a separate package from skima since we don't want to import "testing" -// into skima, since there is a good chance we'll use skima for running user-defined -// tests in heartbeat at runtime. +package mapval import ( "testing" @@ -28,12 +24,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/mapval" ) // Test takes the output from a Validator invocation and runs test assertions on the result. // If you are using this library for testing you will probably want to run Test(t, Compile(Map{...}), actual) as a pattern. -func Test(t *testing.T, v mapval.Validator, m common.MapStr) *mapval.Results { +func Test(t *testing.T, v Validator, m common.MapStr) *Results { r := v(m) if !r.Valid { diff --git a/libbeat/testing/mapvaltest/mapvaltest_test.go b/libbeat/testing/mapvaltest/mapvaltest_test.go deleted file mode 100644 index 9f22e28f3ddf..000000000000 --- a/libbeat/testing/mapvaltest/mapvaltest_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Licensed to Elasticsearch B.V. under one or more contributor -// license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright -// ownership. Elasticsearch B.V. licenses this file to you under -// the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package mapvaltest - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/mapval" -) - -func TestTest(t *testing.T) { - // Should pass - Test(t, mapval.MustCompile(mapval.Map{}), common.MapStr{}) - - fakeT := new(testing.T) - Test(fakeT, mapval.MustCompile(mapval.Map{"foo": "bar"}), common.MapStr{}) - - assert.True(t, fakeT.Failed()) -} From 0e4f93842d32efb2483485e0f5f49dc2d8073369 Mon Sep 17 00:00:00 2001 From: Nicolas Ruflin Date: Fri, 1 Feb 2019 08:56:47 +0100 Subject: [PATCH 49/66] [Metricbeat] Release munin as GA. (#10311) Add integration tests and add data.json file. --- CHANGELOG.next.asciidoc | 1 + metricbeat/docs/modules/munin.asciidoc | 2 - metricbeat/docs/modules/munin/node.asciidoc | 8 +- metricbeat/docs/modules_list.asciidoc | 4 +- metricbeat/module/munin/_meta/fields.yml | 2 +- metricbeat/module/munin/fields.go | 2 +- metricbeat/module/munin/node/_meta/data.json | 35 ++++++++ metricbeat/module/munin/node/_meta/fields.yml | 2 +- metricbeat/module/munin/node/node.go | 2 - .../munin/node/node_integration_test.go | 88 +++++++++++++++++++ 10 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 metricbeat/module/munin/node/_meta/data.json create mode 100644 metricbeat/module/munin/node/node_integration_test.go diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 96840f5c9ff4..26bd7efceac7 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -269,6 +269,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Release kvm module as beta. {pull}10279[10279] - Release http.server metricset as GA. {pull}10240[10240] - Release Nats module as GA. {pull}10281[10281] +- Release munin module as GA. {pull}10311[10311] - Release use of xpack.enabled: true flag in Elasticsearch and Kibana modules as GA. {pull}10222[10222] - Add support for MySQL 8.0 and tests also for Percona and MariaDB. {pull}10261[10261] - Rename 'db' Metricset to 'transaction_log' in MSSQL Metricbeat module {pull}10109[10109] diff --git a/metricbeat/docs/modules/munin.asciidoc b/metricbeat/docs/modules/munin.asciidoc index c0b5bb8460a4..19d2fb1a2c11 100644 --- a/metricbeat/docs/modules/munin.asciidoc +++ b/metricbeat/docs/modules/munin.asciidoc @@ -5,8 +5,6 @@ This file is generated! See scripts/docs_collector.py [[metricbeat-module-munin]] == Munin module -beta[] - This is the munin module. The default metricset is `node`. diff --git a/metricbeat/docs/modules/munin/node.asciidoc b/metricbeat/docs/modules/munin/node.asciidoc index a485a6a730ef..d995cc42f373 100644 --- a/metricbeat/docs/modules/munin/node.asciidoc +++ b/metricbeat/docs/modules/munin/node.asciidoc @@ -5,8 +5,6 @@ This file is generated! See scripts/docs_collector.py [[metricbeat-metricset-munin-node]] === Munin node metricset -beta[] - include::../../../module/munin/node/_meta/docs.asciidoc[] @@ -15,3 +13,9 @@ include::../../../module/munin/node/_meta/docs.asciidoc[] For a description of each field in the metricset, see the <> section. +Here is an example document generated by this metricset: + +[source,json] +---- +include::../../../module/munin/node/_meta/data.json[] +---- diff --git a/metricbeat/docs/modules_list.asciidoc b/metricbeat/docs/modules_list.asciidoc index b08a39c0b244..69984a9da131 100644 --- a/metricbeat/docs/modules_list.asciidoc +++ b/metricbeat/docs/modules_list.asciidoc @@ -103,8 +103,8 @@ This file is generated! See scripts/docs_collector.py |<> beta[] |image:./images/icon-yes.png[Prebuilt dashboards are available] | .2+| .2+| |<> experimental[] |<> experimental[] -|<> beta[] |image:./images/icon-no.png[No prebuilt dashboards] | -.1+| .1+| |<> beta[] +|<> |image:./images/icon-no.png[No prebuilt dashboards] | +.1+| .1+| |<> |<> |image:./images/icon-yes.png[Prebuilt dashboards are available] | .2+| .2+| |<> beta[] |<> diff --git a/metricbeat/module/munin/_meta/fields.yml b/metricbeat/module/munin/_meta/fields.yml index d36f9fd50bd8..1516f1c775f5 100644 --- a/metricbeat/module/munin/_meta/fields.yml +++ b/metricbeat/module/munin/_meta/fields.yml @@ -2,7 +2,7 @@ title: "Munin" description: > Munin node metrics exporter - release: beta + release: ga fields: - name: munin.metrics.* type: object diff --git a/metricbeat/module/munin/fields.go b/metricbeat/module/munin/fields.go index bb04054e8b30..3d879b85f9ed 100644 --- a/metricbeat/module/munin/fields.go +++ b/metricbeat/module/munin/fields.go @@ -32,5 +32,5 @@ func init() { // AssetMunin returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/munin. func AssetMunin() string { - return "eJx8kU1qwzAUhPc+xZBNIBAfQIveoL1CkK2Jq0Z/SM+0vn2xpZaYmi7fzBvm09MVDy4Kfg42dIBYcVQ4va7zqQMMy5htEhuDwksHAJuHEA3hKdmOBfxKMQtzB2Q66kKFgaI74G7pTFFb8oqgPVtb38L9ZfMAWRIV4vDBUZpUh1t1TJwHx7/OzeuUbJja2vlybjsH7Bv/E3ShwbBAI7l5sgHxDl3x6gP1xCD9AXzd71dph//g8hmz+Z/gTXuuVfLOn+IxOsdRbJhWtfye9qB71zflOKemPJ+6pvaf8R0AAP//7IiXDQ==" + return "eJx8kUFuwyAURPc+xSibSJHiA7DoDdorRNhMKA0GBN9qffvKhlaOanX5Z/5oHp8rHlwUpjm40AHixFPh9LrOpw4wLGN2SVwMCi8dAGweQjTERMluLOBXilmYOyDTUxcqWN0Bd0dvitpyVwQ9sXX1LdpfNg+QJVEhDh8cpUl1uFXHxHnw/OvcJp2SC7atnS/ntnNAvtHvkAsNhgUayc/WBcQ7dMWrz9OWQfoD+Lrfr9IT/oPLZ8zmf4I3PXGtknf+FI/Re47igl3V8nvYg+6nPpvjnJqyP3VN7b/iOwAA//84wJVl" } diff --git a/metricbeat/module/munin/node/_meta/data.json b/metricbeat/module/munin/node/_meta/data.json new file mode 100644 index 000000000000..790c54a5f3b9 --- /dev/null +++ b/metricbeat/module/munin/node/_meta/data.json @@ -0,0 +1,35 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "agent": { + "hostname": "host.example.com", + "name": "host.example.com" + }, + "event": { + "dataset": "munin.node", + "duration": 115000, + "module": "munin" + }, + "metricset": { + "name": "node" + }, + "munin": { + "metrics": { + "guest": 0, + "idle": 6999219, + "iowait": 5441, + "irq": 0, + "nice": 0, + "softirq": 6419, + "steal": 0, + "system": 374903, + "user": 486780 + }, + "plugin": { + "name": "cpu" + } + }, + "service": { + "address": "127.0.0.1:4949", + "type": "cpu" + } +} \ No newline at end of file diff --git a/metricbeat/module/munin/node/_meta/fields.yml b/metricbeat/module/munin/node/_meta/fields.yml index 8033a27f5ac5..a927f3fc9f84 100644 --- a/metricbeat/module/munin/node/_meta/fields.yml +++ b/metricbeat/module/munin/node/_meta/fields.yml @@ -1 +1 @@ -- release: beta +- release: ga diff --git a/metricbeat/module/munin/node/node.go b/metricbeat/module/munin/node/node.go index 604d7553fb09..7bc9cde23424 100644 --- a/metricbeat/module/munin/node/node.go +++ b/metricbeat/module/munin/node/node.go @@ -21,7 +21,6 @@ import ( "time" "github.com/elastic/beats/libbeat/common" - "github.com/elastic/beats/libbeat/common/cfgwarn" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/metricbeat/mb" "github.com/elastic/beats/metricbeat/module/munin" @@ -52,7 +51,6 @@ type MetricSet struct { // New creates a new instance of the MetricSet. New is responsible for unpacking // any MetricSet specific configuration options if there are any. func New(base mb.BaseMetricSet) (mb.MetricSet, error) { - cfgwarn.Beta("The munin node metricset is beta.") config := defaultConfig if err := base.Module().UnpackConfig(&config); err != nil { diff --git a/metricbeat/module/munin/node/node_integration_test.go b/metricbeat/module/munin/node/node_integration_test.go new file mode 100644 index 000000000000..1e8fbbe2fd6f --- /dev/null +++ b/metricbeat/module/munin/node/node_integration_test.go @@ -0,0 +1,88 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +// +build integration + +package node + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/tests/compose" + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestFetch(t *testing.T) { + compose.EnsureUp(t, "munin") + + f := mbtest.NewReportingMetricSetV2(t, getConfig()) + events, errs := mbtest.ReportingFetchV2(f) + + assert.Empty(t, errs) + if !assert.NotEmpty(t, events) { + t.FailNow() + } + + t.Logf("%s/%s event: %+v", f.Module().Name(), f.Name(), + events[0].BeatEvent("munin", "node").Fields.StringToPrint()) +} + +func TestData(t *testing.T) { + compose.EnsureUp(t, "munin") + + config := getConfig() + f := mbtest.NewReportingMetricSetV2(t, config) + err := mbtest.WriteEventsReporterV2(f, t, ".") + if err != nil { + t.Fatal("write", err) + } +} + +func getConfig() map[string]interface{} { + return map[string]interface{}{ + "module": "munin", + "metricsets": []string{"node"}, + "hosts": []string{GetEnvHost() + ":" + GetEnvPort()}, + } +} + +// GetEnvHost returns the hostname of the Mongodb server to use for testing. +// It reads the value from the MONGODB_HOST environment variable and returns +// 127.0.0.1 if it is not set. +func GetEnvHost() string { + host := os.Getenv("MUNIN_HOST") + + if len(host) == 0 { + host = "127.0.0.1" + } + return host +} + +// GetEnvPort returns the port of the Mongodb server to use for testing. +// It reads the value from the MONGODB_PORT environment variable and returns +// 27017 if it is not set. +func GetEnvPort() string { + port := os.Getenv("MUNIN_PORT") + + if len(port) == 0 { + port = "4949" + } + return port +} From 61d87daeb021b144f4133449d0c414b32adf8cc5 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Fri, 1 Feb 2019 04:30:13 -0800 Subject: [PATCH 50/66] Skipping more CM system tests for now (#10481) --- x-pack/libbeat/tests/system/test_management.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/x-pack/libbeat/tests/system/test_management.py b/x-pack/libbeat/tests/system/test_management.py index dc8d87698cd7..edab65dfe641 100644 --- a/x-pack/libbeat/tests/system/test_management.py +++ b/x-pack/libbeat/tests/system/test_management.py @@ -26,8 +26,9 @@ def setUp(self): self.es_pass = "changeme" self.es = Elasticsearch([self.get_elasticsearch_url()], verify_certs=True) - @unittest.skipIf(not INTEGRATION_TESTS, - "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + # @unittest.skipIf(not INTEGRATION_TESTS, + # "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + @unittest.skip("Skipping because snapshot is not ready yet. see #10481") def test_enroll(self): """ Enroll the beat in Kibana Central Management @@ -60,8 +61,9 @@ def test_enroll(self): backup_content = open(config_path + ".bak", 'r').read() assert config_content == backup_content - @unittest.skipIf(not INTEGRATION_TESTS, - "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + # @unittest.skipIf(not INTEGRATION_TESTS, + # "integration tests are disabled, run with INTEGRATION_TESTS=1 to enable them.") + @unittest.skip("Skipping because snapshot is not ready yet. see #10481") def test_enroll_bad_pw(self): """ Try to enroll the beat in Kibana Central Management with a bad password From 19d8016bc1f55625e7e4b34cb9a74f64c675ad50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillaume=20Dor=C3=A9?= Date: Fri, 1 Feb 2019 13:32:57 +0100 Subject: [PATCH 51/66] Add supervisorctlbeat to the list of Community Beats (#10479) --- libbeat/docs/communitybeats.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/libbeat/docs/communitybeats.asciidoc b/libbeat/docs/communitybeats.asciidoc index 8114b083629e..b5254947a305 100644 --- a/libbeat/docs/communitybeats.asciidoc +++ b/libbeat/docs/communitybeats.asciidoc @@ -97,6 +97,7 @@ https://github.com/Corwind/servicebeat[servicebeat]:: Send services status to El https://github.com/consulthys/springbeat[springbeat]:: Collects health and metrics data from Spring Boot applications running with the actuator module. https://github.com/philkra/springboot2beat[springboot2beat]:: Query and accumulate all metrics endpoints of a Spring Boot 2 web app via the web channel, leveraging the http://micrometer.io/[mircometer.io] metrics facade. https://github.com/sentient/statsdbeat[statsdbeat]:: Receives UDP https://github.com/etsy/statsd/wiki[statsd] events from a statsd client. +https://github.com/Corwind/supervisorctlbeat.git[supervisorctlbeat]:: This beat aims to parse the supervisorctl status command output and send it to elasticsearch for indexation https://github.com/live-wire/terminalbeat[terminalbeat]:: Runs an external command and forwards the https://www.computerhope.com/jargon/s/stdout.htm[stdout] for the same to Elasticsearch/Logstash. https://github.com/berfinsari/tracebeat[tracebeat]:: Reads traceroute output and indexes them into Elasticsearch. https://github.com/buehler/go-elastic-twitterbeat[twitterbeat]:: Reads tweets for specified screen names. From c86f937feaf0f5d4699c258d3ec08b63f16db677 Mon Sep 17 00:00:00 2001 From: Mario Castro Date: Fri, 1 Feb 2019 13:48:59 +0100 Subject: [PATCH 52/66] Move dissect tokenizing from Beat to ES in Traefik Filebeat Access Fileset (#10442) Traefik access Metricset were parsing incoming log lines by using a mixed of dissect processing on the Beat and a Grok processing on ES. This PR moves all parsing to ES --- CHANGELOG.next.asciidoc | 1 + filebeat/module/traefik/access/config/traefik-access.yml | 9 --------- filebeat/module/traefik/access/ingest/pipeline.json | 6 ++++++ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 26bd7efceac7..2e3aa7f784c2 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -72,6 +72,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Migrate Elasticsearch audit logs fields to ECS {pull}10352[10352] - Several text fields in the Logstash module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10417[10417] - Several text fields in the Elasticsearch module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10414[10414] +- Move dissect pattern for traefik.access fileset from Filbeat to Elasticsearch. {pull}10442[10442] *Heartbeat* diff --git a/filebeat/module/traefik/access/config/traefik-access.yml b/filebeat/module/traefik/access/config/traefik-access.yml index 8b640efa575c..0afd17317d4f 100644 --- a/filebeat/module/traefik/access/config/traefik-access.yml +++ b/filebeat/module/traefik/access/config/traefik-access.yml @@ -4,12 +4,3 @@ paths: - {{$path}} {{ end }} exclude_files: [".gz$"] - -processors: -- dissect: - tokenizer: '%{source.address} %{traefik.access.user_identifier} %{user.name} [%{traefik.access.time}] - "%{http.request.method} %{url.original} HTTP/%{http.version}" - %{http.response.status_code} %{traefik.access.message}' - - field: "message" - target_prefix: "" diff --git a/filebeat/module/traefik/access/ingest/pipeline.json b/filebeat/module/traefik/access/ingest/pipeline.json index ff88d43ea31c..5c9a30602391 100644 --- a/filebeat/module/traefik/access/ingest/pipeline.json +++ b/filebeat/module/traefik/access/ingest/pipeline.json @@ -1,6 +1,12 @@ { "description": "Pipeline for parsing Traefik access logs. Requires the geoip and user_agent plugins.", "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{source.address} %{traefik.access.user_identifier} %{user.name} [%{traefik.access.time}] \"%{http.request.method} %{url.original} HTTP/%{http.version}\" %{http.response.status_code} %{traefik.access.message}" + } + }, { "grok": { "field": "traefik.access.message", From c36054fb811cf7915fe6b18df0f3e2e308df8e2a Mon Sep 17 00:00:00 2001 From: Christoph Wurm Date: Fri, 1 Feb 2019 12:55:55 +0000 Subject: [PATCH 53/66] [Auditbeat] Auditd: Check all fields are in fields.yml in unit test (#10457) Similar to how Python system tests in Metricbeat and Auditbeat call an `assert_fields_are_documented` function to check if all produced fields are in fields.yml this does the same in Go code for the auditd module where we don't have a Python system test. --- auditbeat/magefile.go | 2 + auditbeat/module/auditd/audit_linux_test.go | 41 +++++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/auditbeat/magefile.go b/auditbeat/magefile.go index 0eb532f1e722..6eb32fd91dfa 100644 --- a/auditbeat/magefile.go +++ b/auditbeat/magefile.go @@ -175,6 +175,7 @@ func UnitTest() { // Use TEST_COVERAGE=true to enable code coverage profiling. // Use RACE_DETECTOR=true to enable the race detector. func GoUnitTest(ctx context.Context) error { + mg.Deps(Fields) return mage.GoTest(ctx, mage.DefaultGoTestUnitArgs()) } @@ -182,6 +183,7 @@ func GoUnitTest(ctx context.Context) error { // Use TEST_COVERAGE=true to enable code coverage profiling. // Use RACE_DETECTOR=true to enable the race detector. func GoIntegTest(ctx context.Context) error { + mg.Deps(Fields) return mage.RunIntegTest("goIntegTest", func() error { return mage.GoTest(ctx, mage.DefaultGoTestIntegrationArgs()) }) diff --git a/auditbeat/module/auditd/audit_linux_test.go b/auditbeat/module/auditd/audit_linux_test.go index 65b3aaf189f8..3b01c1c51226 100644 --- a/auditbeat/module/auditd/audit_linux_test.go +++ b/auditbeat/module/auditd/audit_linux_test.go @@ -24,6 +24,7 @@ import ( "io/ioutil" "os" "os/exec" + "strings" "testing" "time" @@ -32,6 +33,7 @@ import ( "github.com/prometheus/procfs" "github.com/elastic/beats/auditbeat/core" + "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/libbeat/logp" "github.com/elastic/beats/metricbeat/mb" mbtest "github.com/elastic/beats/metricbeat/mb/testing" @@ -76,7 +78,9 @@ func TestData(t *testing.T) { // Send expected ACKs for initialization returnACK().returnACK().returnACK().returnACK().returnACK(). // Send a single audit message from the kernel. - returnMessage(userLoginMsg) + returnMessage(userLoginMsg). + returnMessage(execveMsgs...). + returnMessage(acceptMsgs...) // Replace the default AuditClient with a mock. ms := mbtest.NewPushMetricSetV2(t, getConfig()) @@ -84,16 +88,45 @@ func TestData(t *testing.T) { auditMetricSet.client.Close() auditMetricSet.client = &libaudit.AuditClient{Netlink: mock} - events := mbtest.RunPushMetricSetV2(10*time.Second, 1, ms) - if len(events) == 0 { - t.Fatal("received no events") + events := mbtest.RunPushMetricSetV2(10*time.Second, 3, ms) + if len(events) != 3 { + t.Fatalf("expected 3 events, but received %d", len(events)) } assertNoErrors(t, events) + assertFieldsAreDocumented(t, events) + beatEvent := mbtest.StandardizeEvent(ms, events[0], core.AddDatasetToEvent) mbtest.WriteEventToDataJSON(t, beatEvent, "") } +// assertFieldsAreDocumented mimics assert_fields_are_documented in Python system tests. +func assertFieldsAreDocumented(t *testing.T, events []mb.Event) { + fieldsYml, err := common.LoadFieldsYaml("../../fields.yml") + if err != nil { + t.Fatal(err) + } + documentedFields := fieldsYml.GetKeys() + + for _, e := range events { + beatEvent := e.BeatEvent(moduleName, metricsetName, core.AddDatasetToEvent) + for eventFieldName := range beatEvent.Fields.Flatten() { + found := false + for _, documentedFieldName := range documentedFields { + // Have to use HasPrefix and not "==" since fields in auditd.paths.* get flattened + // to auditd.paths which does not exist in fields.yml. + if strings.HasPrefix(documentedFieldName, eventFieldName) { + found = true + break + } + } + if !found { + assert.Fail(t, "Field not documented", "Key '%v' found in event is not documented.", eventFieldName) + } + } + } +} + func getConfig() map[string]interface{} { return map[string]interface{}{ "module": "auditd", From f2b783d7f23ff7c31adda77143d23980c690dbcb Mon Sep 17 00:00:00 2001 From: Mathieu Martin Date: Fri, 1 Feb 2019 08:20:42 -0500 Subject: [PATCH 54/66] Remove field `url.hostname`. (#10469) This field was defined temporarily, at the very beginning of the ECS transition and is no longer used. `url.domain` should be used in its place. --- auditbeat/docs/fields.asciidoc | 10 ---------- auditbeat/include/fields.go | 2 +- filebeat/docs/fields.asciidoc | 10 ---------- filebeat/include/fields.go | 2 +- heartbeat/docs/fields.asciidoc | 10 ---------- heartbeat/include/fields.go | 2 +- journalbeat/docs/fields.asciidoc | 10 ---------- journalbeat/include/fields.go | 2 +- libbeat/_meta/fields.ecs.yml | 7 ------- metricbeat/docs/fields.asciidoc | 10 ---------- metricbeat/include/fields/fields.go | 2 +- packetbeat/docs/fields.asciidoc | 10 ---------- packetbeat/include/fields.go | 2 +- winlogbeat/docs/fields.asciidoc | 10 ---------- winlogbeat/include/fields.go | 2 +- x-pack/functionbeat/docs/fields.asciidoc | 10 ---------- x-pack/functionbeat/include/fields.go | 2 +- 17 files changed, 8 insertions(+), 95 deletions(-) diff --git a/auditbeat/docs/fields.asciidoc b/auditbeat/docs/fields.asciidoc index c11aa32565f6..f0ab83d1d024 100644 --- a/auditbeat/docs/fields.asciidoc +++ b/auditbeat/docs/fields.asciidoc @@ -5888,16 +5888,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-file_integrity]] diff --git a/auditbeat/include/fields.go b/auditbeat/include/fields.go index 57d21664a6ac..29e748dd976c 100644 --- a/auditbeat/include/fields.go +++ b/auditbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 7cbc3127d9dc..aea98291493c 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4312,16 +4312,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-elasticsearch]] diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 7721c5ac1d0d..19af3e1adc45 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/heartbeat/docs/fields.asciidoc b/heartbeat/docs/fields.asciidoc index 106fb60dc202..34e4f9231fbc 100644 --- a/heartbeat/docs/fields.asciidoc +++ b/heartbeat/docs/fields.asciidoc @@ -3435,16 +3435,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-host-processor]] diff --git a/heartbeat/include/fields.go b/heartbeat/include/fields.go index 1e3305075865..f92d0afbe476 100644 --- a/heartbeat/include/fields.go +++ b/heartbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/journalbeat/docs/fields.asciidoc b/journalbeat/docs/fields.asciidoc index 368e6eb58062..395ca8bc0b74 100644 --- a/journalbeat/docs/fields.asciidoc +++ b/journalbeat/docs/fields.asciidoc @@ -3702,16 +3702,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-host-processor]] diff --git a/journalbeat/include/fields.go b/journalbeat/include/fields.go index 05a31c8f5157..6198a3e40242 100644 --- a/journalbeat/include/fields.go +++ b/journalbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/libbeat/_meta/fields.ecs.yml b/libbeat/_meta/fields.ecs.yml index f12e29ce7dfd..dc69656e1c34 100644 --- a/libbeat/_meta/fields.ecs.yml +++ b/libbeat/_meta/fields.ecs.yml @@ -2273,10 +2273,3 @@ type: long description: > Minor version of the operating system. - - # url.hostname was removed from ECS. - # TODO: Update Suricata module to use url.domain. - - name: url.hostname - type: keyword - description: > - Hostname of the request, such as "elastic.co". diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index a699a282fd50..c96e3cc1c9c1 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -7099,16 +7099,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-elasticsearch]] diff --git a/metricbeat/include/fields/fields.go b/metricbeat/include/fields/fields.go index 49d53046bb62..c9eefd5f361c 100644 --- a/metricbeat/include/fields/fields.go +++ b/metricbeat/include/fields/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLibbeatFieldsYml returns asset data. // This is the base64 encoded gzipped contents of ../libbeat/fields.yml. func AssetLibbeatFieldsYml() string { - return "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" + return "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" } diff --git a/packetbeat/docs/fields.asciidoc b/packetbeat/docs/fields.asciidoc index 9bed1b8e59af..4f93ecbaa39c 100644 --- a/packetbeat/docs/fields.asciidoc +++ b/packetbeat/docs/fields.asciidoc @@ -5337,16 +5337,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-flows_event]] diff --git a/packetbeat/include/fields.go b/packetbeat/include/fields.go index 3dfb472191f4..bc5760d8e0bb 100644 --- a/packetbeat/include/fields.go +++ b/packetbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/winlogbeat/docs/fields.asciidoc b/winlogbeat/docs/fields.asciidoc index ca76cfc10a8f..01813db07aa0 100644 --- a/winlogbeat/docs/fields.asciidoc +++ b/winlogbeat/docs/fields.asciidoc @@ -3333,16 +3333,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-eventlog]] diff --git a/winlogbeat/include/fields.go b/winlogbeat/include/fields.go index 1544ba81beed..22cc86a23174 100644 --- a/winlogbeat/include/fields.go +++ b/winlogbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "eJzsvX9zHDdyAPq/PwWKrnqWkuVwSVE/zNS9hCfJNuskmRHlcy65HBc7g92FOQOMAQxX6yTf/RW6AQwwM0vuklydk0dd1VmanWk0gEajf/c+uWKrE8Jy/RUhhpuSnZC3ry++IqRgOle8NlyKE/L/fkUIsT+QGWdlobOviPvbyVfw0z4RtGInZO9fDK+YNrSq9+AHQsyqZiekoIa5ByW7ZuUJyaXyTxT7teGKFSfEqMY/ZJ9pVVt89o7Ghy/2x8/3j559Gr86GT8/eXacvXr+7N/9CAOo2j9vqGEHFh2yXDBBzIIRds2EIVLxORfUsCL7Krz9nVSklHN8RROz4JpwDV8V6wAtqSZzJpiysEaEiiKAE9Lg2xxfU4zGo310M8ZVJDOpCC1LN3iWrqmhc7126XB1r9hqKVXRW7n/+OterWTR5HZt/ro3In/dY+L66K97/3nL2r3j2hA584A1aTQriJEWGcJovkBUO5iWdMrK23CV019Ybrqo/hcT1yekRXZEaF2XPKeI2UzK/SlV/3Mz1n9iq4NrWjaM1JQrHa33ayrIlIVZ0KIgFTOUcDGTqoJB7HO3/uRiIZuygE3MpTCUCyKYNqzdX5yFzshpWRIYUxOqGNFG2m2l2i9dhMRbP9lJIfMrpiaWYsjk6pWeuKXrrGfFtKbz9ecGF9Swz73l3PuBlaUkP0tVFrdsdY/wmR/XEadbAfzJvul+jmZ2Jog0C6bsApOcajYIJ92DXIqcGiZaxkBIwWczpuzRcku6XPB8AQtr7GGaKcbKFdGMqnxBpyXLyNmMVE1peF22YNy4mrDPXJuR/Xblh89lNeWCFYQLI4kUrDMdv/Z0zoRfVscYT6NHcyWb+oQc3by2nxYMATluGajJsRVK6FQ2Bv6p5cws7UyZMNysRoTPCBUriz21ZFiWluBGpGAG/yIVkVPN1LWdKG6eFISShbRzlooYesU0qRjVjWJV+kLmqVETLvKyKRj5I6NA0HN4s6IrQkstiWqE/cwNpXQG9wDMKvsHPy+9sOxrykgt66a07JAsuVlYZCkvtWUlJqyFaoTgYm6h2ocWnWgyyvJN3HDHZhe0rpndMjsnIKswI+Ctdp4ic4s+k9IIaVi8DX6qJ5ZQLQRLohYnmDJw31LO9ajFMbNEYPn/jJdsyqjJ4Jycnr8fWY6OF0OAn07LbS+t6wM7IZ6zLCKEmOMUkmlkMgsq5ozwWXsSLHFwTbT9xiyUbOYL8mvDGjuCXmnDKk1KfsXIn+jsio7IR1ZwJIpayZxpHb0YoOrGniZN3sm5NlQvCM6JXMDCZwlbAQr3ixrf9fEpsQTBpQjPh7gUWXNN3XBu7J8/I+iEdCKWEzG7F9k4G++r/KiPn/3/XSD3wZLHWszswUfxgQIG7ggjA5rzawaXDRXuU3zb/bxgZT1rypgWkKyVnzAxS0m+c3RJuNCGitxdP52jpe3g9nwlsKaNsVygqagAucQyUqJZTRWSJddEMFbYAyccB+4NlwD0xJrLyg4+U7LqrMfZjAhJ/KGCJcDT5h/JmWGClGxmCKtqs8qGNnomZX+L7e7tYos/repbttgfaQucaENXmtByaf8T1t5e8BqFibD101XEC+1tmKVLJQJ7Cqvevr8EWG6YKWtfAV7NZ5Y4EnDrCSUhkormCy7Y8LI7EP2158UuVv4nwX9tGOGFvQlnnCncBnucYA2e8Blc3HC766edfQlSlmXYyODh26XfBWDnvBic6it6PHs+Hhf9qbJ6wSqmaHk5NGn22TBRsOJ+E3/rx7jr3JHtWMFVVbQsV+5i0YTmSmqrhWhDlRUeLA+YIFnzYhJuopsWZfZVKiHlJe+JSK/jZ5vJSKcOkOUCBZuBbEbxCHHBDadGwiJQIphZSnVlhSjBQEtAtoiyj2Jzqgq49eztJ4UeRW/i1TjlBVf4gJZkVsolUSy3Cg7e759enztwyJ1azHro2Af29QgZ4PKaiQJfv/jLB1LT/IqZJ/opwkchuVbSyFyWvUFQl7T71hlOgYrMrHLhxQu/GEZRoSkgkJELWbEgHVhZ3L5pmKrInld6pdqzl49iM6aS4UVnOhqlFvezk/NwD6csCHaR/ArDEouKmPsdbIHHOKPu6IjFg7ZcqdENTL+VIrmwKP3SCFxiECqdmOhMEWQATruQVrpqoVlywS3Zh4ObKtz2j4N14AdRrFbMCmFwNeItbbVHzSoqDM9BomefjbvQ2Wc8cSN3b3IdLnQjyTW38+O/sVb+t/NjCnQCzU1D3cqfzchKNipAn9Gy1LiMIEkYNpdqNbIv+ftFG16WhAkrGjtSlI3K8Q4qmDZ29+0a2gWa8bK056yulawVp4aVqzuIf7QoFNN6V/wQyBl1AEdIbkB3iQV2UU35vJGNLldItM48w8sygadlxcA+RUqujd2vs/MRoaSQld0AqQgljeCfibb6uckI+Uu7vnjnpvCssg97qejS4+aJfZK5BxNcv774AMahVjooGjR4oHo8yXg9sShNMkRvYlW/monCyXdAYAlIey+AcpIN3NT1hjd18uINe3N2HibsuCFuUWeazvBiUZMqaOrk7Pz62D44O79+0W7qAN61VGZDzEsp5pvhfi6VWYt1ML7QfBfCzfvT17cunEcBN34XWDg2hwNEI39N3jOjeK57uExXhg0c9E12AhXePoggYBy+Ot4M7T9aCKgTWyUjvmKMxFvIabJ9QgK2f8cZtJgebUhhONrdUJ2zWIR3ktX3ycOOaHULNt8zGQxQ1KoXSq1i8xMlumY5n/GclBJNrkSx0rMie69dt2Id/pHK4pmaM5ji1/aWtfMF5uo5X3d548uFDF0wkU3ZIZQMPrx1ATqTl7XkHYRvWB9C3kkx56Yp8LYsqYF/pIpZIIJv/ovslVLsnZD9l8+yF4fHr56NR2SvpGbvhBw/z56Pn397+Ir8zzdD87E3OhdMmMuObeK2WfXP9y1zim0UYdQ1U/oglVmQ04opntNhtBth1GrnSL/GcWDUNbi+poIWg0gqNudS7BzHjzDMTSj+a8OmLB9cR26+wCJyc+MKvpfCKEbLmzaaa3mZy+KLbPbZxY/EjrVuw09v2Owvgafb8FvR3P/X10OYrtvuASH5zij+pJna9/Jw9CZqzp6JjogzJqH2I2dkrqhoSqosxTg3iWJ4LXQkOdgulFSD4Q65C1d4meRMGKacVjsrpVRENNWUKfBlgBHD64+6AxpRLEm9WGlu/+KdILknZd1D54ME05t9vVyhW4kLQhsjK7i55kz6ea/ZsanURor9Iu8aNmRTdO0a7aPNzBrf4X0bXaMoAcgG/BhczBTVRjW5aWJnR7swdh8Sgyo+vsW/MXMCHJr8dGwQpoK8fX2E7hZ7y82YyRdM497Bnc2j4dGL1OJsL/rUFZj4r7gOJsQUiQBQNcL5nxSrpAkmRyIbo3nBorGGsaPEuVNikLHHBT521Jd6LhFsCwq8SG742JHjBkgX7na92H8eZE0lr3nB1EZ6caBGlh/dT6hPLnyYsUckePtiVzXLj0ZknrMRkSplNHzODS1lzqgYEE/pNeUlnfLSXmW/STFgfb9pmo3eZ1Sb/cP8frM9jdAgv4Hu670VQI5A5+1GDkwEb5CNsF+HX39WmyHvbpRtMfY2/OyeNuiANt8/PHp2/PzFy1ffjuk0L9hsvKH67zAhZ288yQH6wY+wHvdhn9zDWIwCWtH1dBti/pdhR9JdVtUcZRUreFNtaBLwnCjyON2CM81BTnswOnjx4sXLly9fvXr17bffbob0p5ZbIy7gwldzKvhvzo1YhFgP585YtQEe6YVsL3sOoQiEopFo3zBBhSFMXHMlRdW3LLWX3unPFwEJXozI91LOS4Z3Nvnx4/fkrMBoCQxRAe9SAqr1tnSCQNwFEji5lwY6jzeTCMJXqcXbmaV74UiRZd0r5110CNp5nXvCmXvlLAYD9lDN/JALVtZWLEaxBG/EKdURsYQxtNfjV5YhGd5qE1sYiN2XuzruHxE8qaigc3tbAx8NUxj0ZmHs1Rf2ZQaUCC+GeGNF57tljLFsAKMFswCitaSaTBteGhB41iBo6HxX+LWHw2FHh+6/Xa5QiwFqzr3Bk+jGTYZPIh1JCBq8vMu9BosyGCQYuXZSLvWm98NmfCr6bgO3X+xZAl0TDa0HLj70BqBbOPyQs7Wxx+T36qZK/GyPvqrfra8q2qf/bQ6rYdS/vNfqZjx257qKOcn/Bf9VzDK8Zwj43e/UibUNvo+erEdPVn9Wj56sR0/Wpov46Ml69GQ9erLu6sliQRBKcjvJxrrge2bofnwzhuvVSAvs75AyMpgsegtVvX194cfF3XNBhRJmpomRGZmwXGfupQnmbqg0S9NeqFWjDQZfwxZ1czb9n5+txvRrw9QKgmEx+jooE1wUPGea7O87839FVx4Zu7C65POFKVfpoQm5cdFsAAbMCFEsrbzGhWFz5QJWafGLRRkltVQjzBesomFd3P06OB0w9jYKM/Pc+1yTQ0i8mTJDj8igrS16oUOYSsmOUfVt9Gjj7LrWsplDMosL1kX4oKpQsSJXXBSZZSx2hhUGjeMLZhF5KDHPzG5JydD/aDfPp9ZB5DXmNnYT1LjRrJy17kYrZlr4YRU3dx1+qYyKmculS/Fcl3p6GzJRCuotmMAuD2SQtpd2sZNsHhzXQvecG83F6QoE8rzuZTa8vb5L8ifSx5C930d2D5v8Szkn6BRQPE+oLCOn8GuaLeEVG0+DdnJR7iUYkxY4Y9omVGbkXZv4C5zN54JC3gCvmL1lvYfSPrUg2q9DCqmcxSnEHgj1qYgEsk58GIILLWjzOVCrJVOGyRte2aTe7mcVt1jtHKH1ayAdZMrMkjE7ho8XF4WLG2DKDeDSKjCdNC+ltjM59Ut9+7J6y5BUzAoFoGeUAAuj8uGfSdKtRWJ4QYczWZN1jUmgXdqKVVKtiGV3EO/vABWdDODrphRMoZOct7nA7jWdU2EnCvnA21/kO2VVZ2/stge7c+C1W2ZtWc7fx/JhzL72fFv4yc05lJA159fg2+we9KU9i97pm1Qi8NASWP56GYFR3AJwJyYSybyGjFdWjFfrME2AWp40gTcmIzLRhhpm/0JLqqpJRn6myhI9JE7PGghVCpKHnFlJZESWqVhRlxQMQy72xArErpgEzXNWG8g2dWEoeAt56WVE6pJRDUwyAQlOgJw2XQE4EADgPXCZuDyZnVwoyBfcCEPbHsSBBZ8vXL7RMLdfs2Nn6f5zjUwHkpvsdi+ocHuXYQLYZOQN+poJ7bKAWsWCpuTkUG/xDPIp9QlgG2x/ulHsAbY/gdho1tn+of1vrM4ITmDgpUPxEmZHaeqQBoy3T05rA9zVZfiuZQhBd3R5fi1NcJESQNj09pAvaGpBdBTgt3MSXR9wuIGX79OisOfaXcj7cCGzYpJu32TGS7afK2avxwm6p7CeCtdtTqm/H90suR2rAoV58GzC3tRUa7um+5ge198g2Zhc7s65a2fihriJXZ9FP0W7RIXb4lFErjqNhmyhp0YQewR9emZ7r+PLbod0k+fge4NyMDPKy0axlPkmMNcz4m1OXwpyLSPe4PQ5/L9cav5HBhIdCtJuNZqOQmH/nOMs6LWEWKQQINIWXbLECSafIRVIFk258+oROIqzKd1aRwETvGOGkbwdQdTBjoQ58FKFqh+Dx7Ra6V/LAT8eNVSzTT2ad14FN8yQ2UEKS7ho/Zu49ybkiWVVmhly4CRkzcxTuxrprK0Mnxo9mqn9ygrWuEzAZZOTHC9vyOJ11o+OTcZVe+KiRQIrx4CpKDxye2yJFbHOuibtRJIZOEmaXTPFzaaSzDrP397Lvc325sKN17mqPBodQeXnhTPGDof3ha/ctV8xcN0Jy8GikMCgvYUiUnZvvtGkqYmRHa6a3DuW41X0ihHQhdxw3LHXXArNtQFtEO1wPRNXuIQwR768M7V/TX6yxGMaARnVztboQq851vrRC7kUGIOXm3JFVsxYMv1vUkisGifVVQLSygSWb2uyZEmQyNfkTJP/5+vDo+N/8jGAabq63ab/hgp0Ul1ZROAkgfWhtWMlADFgk+dXepA69y5YTQ6/JeNXJ0cvTg7HGKb6+u13J2PE44Lljd1q/FeyZ3bXrGSBYprCNw4z9+HheDz4zVKqyl8ws8aKH9rIumaF/wz/q1X+h8NxZv932IFQaPOHo+wwO8qOdG3+cHj07GjDQ0DIR7oE21aoZCZnYM9XgfR/chGuBauk0EZRg8YbtMFy09UMHAvHG8hRBBcF+8zQvlzI/DKK0S+4tltfIJeiwr4+ZR2IWA6NFVjVg4dKQ8oyIBb82JNLtKdM4q2FsU/IjJaJ4N2i4X/rHZYF1Yt7iWstVbUx6EN/O/3j6zcb79gPVC/Ik5qpBa01VPWCOlczLuZM1YoL89RuoqJLtwdG2qUCuajDZMhGmxouykZ1vft3CDEZgMJF3ZhL/4KgQmqWS1HozZbkjYOYsGzLUyJIfSkYqRu0BCBL/DcTBVDllbAsDJgbqgdtYFjXyeC5e84CewcsBJI7joDBxX3xkVds4/ySOykF4SS2E4gK2CXFPr/RJJQ2bQu3OXtcejk5tFNlv1SMFivyhGXzzKpQtCkNuVhpS1cBsH6KV14CTwLytMT49SXXXTH3tBXtw9g4MjCRE0ItR5ACLJNnbxwOe28bJWt2cFppw1RBq72nqTZIp1PFrtFU6j+5+LT3FKyvgvzww0lVtbc3p6V/a3/8/GQ83ns6ZN5H3XLDQ1LEtSFv3EqnAyP0XpraYOFW9/KQgN1utBXKuTZc5M4o/S/Rb64aS/TID9wTVpzeDZereznzlTcBTY1l3VpK8Ex8WKRy5XU6yCCXKrlAAbQzaY5VaONScgnM6SqqJqYY0jd4jHJaZmTSznOCzoK4mGX4Ld2Wz0bR3PgbKMZw1NmzgGyYAvdVc9P9cQXLcgx0rWsrZknwIdgLGm0wVh9CJ93A5vR4VPvKAL6xk8IO0HLDLuZ9gryBznyVN1i7dOPt2od1H8UzaLkUlo3rqwmWnW7BLrc9YMiubz1ezrpkGcXg4tDc8GurENj1mXGljS/+OTQptpUJf9sp2Zvo1gnBUPF0whRS8yfVpKQ3z0ZxfXWpO+zuJiY4KyXd0Ln6kesrArCxDiiXPWXN8Wjt5HSiZQmWHf00PWc/aYYVqLCs1zc6KEfuyren68bpXQqpqi02bot5fgBTJP+NFTDeLVMeBW9XCQL82PKLw/F4TcnOinKBUThYhhNqbFmVtMIAeirABejKnaF9T2s+73D9FjENlcEBzJJi+RfNGKHOogrTwDV1+iktS1/EreOXnvHAszs+aOel/q59Yd36nQKUrqOTOKtI6oYCX7EmUyu2eXbn/K/2OcTBeG8imDYA6wzQ8CWy/UVGtZY5b0sDg+roi+0lleFwwQ6cucS7PoFwR8QspGauUDgaoWGwMy+ak/dScCPhCviP787e/6cvKg4mMJfgDfX4IMoDLbneXNpPb6GzGcMLwb7enYOJaso7e8/GjtQ2ptu0etS6QzIs3SZbfE4tQtKlv5ft4WzryKs5M5cPNd4nAAfog0ihV1XJxZXujQvAk5Cve4waMwLYwQA9Oc5wmEMyTCmXhFG9sutiGJDGdOWIy38eGTyCYlqLeW8RY5P2PeYBuIPvFyyZI1JwBefKLePT3jIWLKl9cI+x3wCkNbmja8mHizg05x7Dn1lAraXKx+EgVxLh746XdNFoorCDB6IjK1OCI8DqRj+dvXmKnMLdkFHQ1JML+LFdJCKXIirhFeyIyzhH975UAtC+Acu2SlITQ5bFwyzJueIVVSvkWbAW33em2x85yX54sLHj5P3Bcau7k2I43OMXx+NhZN5b+ox3mQsic0PLjnm1h5bmv22KVmL/GU4w6lOChW+Rgfcs43BGRGkFFloUXhmZ2DEmhKcSCXh3J33GUiUZ2jejnUjXCYLvrNwLEU6wZC6kAUTiShb2/BS9kfNdjFwxQzGIG1zNRUeEiknWJyRFjzYP7UNSjUL7KuakuzYMFd7RTkhUlumV7JqKXjhuEtp0zxCsh7GNrY8YxXn72uHApA/qkhpLxF84ZTv2IAJanb2OKt+7rf6hfbJpdWpflSWRll2BYZLLqm4MhhW68iYQng0hdVF3jAHrYtweo5U3sRmGiGIE0x4YWMhC3B5DaGcKa9oGDS6oKpZUsRG55so0tPQFRvSIvIGqCFH1B1Ra/tRMmRLMgLmzYHdJvrYzGiaC+7uQf3Cw46opXUOLiaqhez1/6R2WE4/dxG5lZaesmGkUlqraoBDLrmb24dZZQf6js8DBfKK5RHP4CXLEUZt0+SxN2XFj/9rQEji0zy63UHyUrUXERR+1QT9WFsH4IG3Pcad+FMt5EZr3oGprpP1mKNl7l1GkeHa7trdTHYjSu+BcQwWsDTMCdd954QLvtuydi/msSfP0uUA7ya2Fak6SLIrGuxMn0I4Ati3rL85DZ8IDV+C1z+X+cgnkP7hjdMPIu27kMXCMvpPKlQnyldJcswhns0jqxFkw0HFnEuo7TTqtO2bkuhr5IjRRillgq6PY+h4VJYrMLgnEluhuIbQQ6KjyBTcMqgreeTFbz+znVy8uXxxv6H39sWaKmrbvUILMULhFLJ+6C7qFcQEwoje2yxS3h+3Hi27freH4W9lBPN5VxRpwwZ8k0I2sL92adl3ndvlqsBmln+yHBledx73+PPvAXi/jDmTkLgnnXipLgO8gY7O3735g8gQaTuVMGKlHpJk2wjQjsuSikMuuxbkt0ETVkosdpp+25P2e5pZI/m3vHpPFu9KH5FtycoGZ2dAU7OW7iym8l7/Qa3b/eaCs6G0yITfQpU51KiNF06IV7wgV951Ywaacim1mdOHQcGQHXTeLBTUjgrBG0D9wqouYBAcm089Qvf9sDsfZ4XF2eJ8N8psBCoiiS6KNSstERnkvVmp/WEI7zo6z8f7h4dG+S0C4z1wQvw2m9FhJZGB3HyuJPFYSSXF9rCTyWEnksZJIB8XHSiIPV0lkYUzHav7Dp0/n7sldK+JbECGS5i7VZbEpXlYxs5A7M4X/YEzthyI41ECeCjpj0NgF0XFTFgd4GElKuWQKgr5mUoXiIBm5YOlJ2HsXXnxNa24sBNixPe8e3TvzuQ9WpHr7+mKPEI0p8INh+3NmRqSGpPC6GciO9Os4lcUqc56bXa3mJ2eBBIoKywojD6GOfcyXUpUD2d0eb2hmqDast3+nfDOE36bJAeX64YfwtrPTJwcH01LOM/c0y2V1MDQLXUuhWaYNNY3ucu7bZrJ5FUlHyDgawdF6zDvM4Hh8fAOufw9ScYjfjVbWlh16QCYRFP8B5A6zw03KVIajOFyuclMqWFey8qbVloaWHRezk5T9KX1ilx60gQWjBVOpCaed6vGzl7cwmS8/vYubJraWpF69GpyJPwS/r01y5+OeuxQf8N/NNt129MM+tSryPBVX3oUHN4sn6LSiScq9jKrb3EFMgVXrr+L9PRvv5LyVWn3s/FBeO1aoTsoC/Hz68cNkRCZvP360/zn78N2Pk8Glffvx4w4yJdenFILQC4679ys7odjMtHG22trl61wwGPILPgAf3mzX0Kf70W5wOFxH0RsJuCmbYamGkhuMCTCkgdSMUFmjpqpXXO0M/biKhjJtZOLAu3Lcjihjjy/0GvbJCnUa9U9icnCQ4soFncIFbuKj3uQ6zi10OS/oNQvZTNrSFYb35L7eXF2XnBXoKWMil1gDXBHBlqnCxwXT0AvqGuXjvGRUQLJvivpQnPa2+ZNES5cY+U0vgdJK4uDa9uZ7kOFvzaFM2I2LX05Zzofk4eaRRT4Yut8QPZdV1Qi31hh6K6+Z8kzLRY+oNJzaxY64ft7upzsFp3iwIX+jGw/traJ3YJI7jxOa82tm7xXn7YPqf9KrTbpV2/0CDTGr70Fa+JnP+JdzX5+hzvfjxRkEJpZ4kJex3cERGnlHV0xlhNfXxyP7/y/s/2uWj0jNqxFhJv/d6a03qa12HgMBI1TQS7Sh7IpeCDk7/XBKzl2ffvIBRiNPvFK3XC4zi0Ym1fwAkz+g0tuB7+y/j/j1H2SfF6YqO55PQi4MFQVVBSy5r9jiv4WDyzWhJZ8LLAKAp+0DM9+Vcmn5Xgeehufe0gI5hsgiGpdyNjS/wT14MUDoigq9RZuD7XppQPUMHU5htNsuvV1ow2hbzoWRPyH82PqWgAz4ktKeD/KkKeoRMXmNZ2Sf51UNhyN7+rs7HjeeD5PXAwEgNXbm2KGue4pLjQwVfWHRqI5afdaPmnKjqOLlyqVJYdmedIcWXMw1igwVz5X0aTq45bTUss30jF/WV6uajQjPf01Tl2c0Z1Mpr0bELLkxGKsWc01vGdXcNE5waYu6XjNRdDBsU4dCXi7LZWEFC+dqDgmjKCAcFPamODvH6H2domeJUUP0z5Irn6v9+7Mp3kR7lFd92vMcaye6zstwzflh0J1D2OcMLEQjUgKf+IXmduPDqfev/+9aYDC491a44IrtrJTdGw/c6w9e3jOKzmY87yzgR2bFUUyNbUXuk85V9A+Ei6lselfUPxDZmOEfuDBMpcol/mDZ1+APjYCSFAM1uCta11EVZ1dY1srJ+9D3jlRtuqAryTsKgjCIWiljwcph/qxbON9oAo51u2jXnC2HKoEPY+GXVypSM8UrZphaj1WHg0QYdrFK0LH/hbjBkMjuhxqWudxm9ShvJtWSqoIVl7sJSo16NIUka5eVFv3klPVayc/DhqDDb4+yw+wwOxoqLQ3Kk1ld7i5t4hTK4mDJZcAddNKoY87ZOdYDdlcAdfIcDfPqMlDSevFS9S8L5gtKjJTlPp0LqQ3PiXbSZNx5M6XiUi67Voh3jCqBOc7UBPfFnJtFMwXHhd1iqEt/EBZynxf7umb54E58c3iy+PEf9YfjH/7x/ffP3//l4NXiTP3b+a/58b//62/jP3yziTV8B02bbjWuouURrg/w+sDaT6VViD1/HCiYM3E9kOBrV8kx7pDln/vqOSMy8SKu+wlJmyuim2pwQZ+9eDVw5d6nI9Sta+Gg33k13PcD69H+MrAi4cdb1+ToOLXDdEJsfVBx+nTDzB8RoPWT5WuWc1p6njoK2aKYNNEKwy5rNzTCLZhhuRl5yPA6JtbfDmvf63PuFolqDHqZ24u3lOSNNrIKKT8IBzojQ1aHm1cnw1+KGZ9DBVsjiWrEFvPUcmbsQFGRU592NOOKLWlZ6pG92VWjcV0MUs9BrWA+AMSnqfi7KroGNRNaKj0iSzZNRo7AQ8RFKbUmQ0Dtep2ev3dzd+Ywv8WxPYyW5Q3mMCcbIViI4qBiNcKlxFnpsL/aFzLAPdbtpX/DUnYLCpD3zhr9a8MaBEnefnoHuWdSACn4K8KVGUrbVjgaCTV9oCBiwaAMvJs9NILcqJ1Ll/98uX6Dvej5L9guMlBJb/Avmd22HouexvpgOAQWiEMkraUH0Lhfa5+bcktaPDo+9rZEquK03LFlMKCBo7lYrj4yO8tlWqRt4sP2+CK6t5UPZsrlvFkW6e80b3Fsoa1qprO+2zABNvEqgZqMyMSzYft3Xmj4T61dzfHPK/iLLEt8GZm5/VvLkIe9jx7sY/bQY/bQY/bQY/bQphN7zB56zB56zB56zB56zB56zB56iEV8zB56zB56zB66a/aQVHMqnEPUfeg1tv4vmwfKxWD9dcyE4vkClw/sdutarlU1FSt76eLCBMCxJt2Jb8vSlrMLVtZQ1pUqRcXcN3gxrqVQ1B2GCgxShPAz1z/ShYSGcePJ3CXKeJcBdPEudcX4v2ctsnjNspTiOo2v11gGNqe1+1oD+paAtVaAIQvAoP7f0/4HdP8tKGhA439YKnoATX+tnv9gx+Bm/X6b6W2i26/R7B8A7b5Ovz3uW+nza7X5+0ymr8ffNIv76fAPmSp2o+6+zUZsruT2tPb7YH2jvr4N/hvp6lEAGXQSdFgi6z5PHt6lNfxahh06VGdrvqSiveWhZRcE3XiPWtIpDuLfQ8drXhwknMiF/MRpDXiv+JacWc2LCZEzwwTRhq60jxvzjamxx7xVpqOYpFzWHE0KUAOzlFNaRu0NPcqRwLbNfbBxbb7N4wrOw/qkXN11v9OLLyvYeHR6pknMmYLWG8SKwwxKxM0VrZycrojmFS/pcBjV4ETqwQV9gMReP4uaQm1BPtR3gqr5Npl8d1pFquZN1emtZ/+8pyur5KBsjORaK2lYbsCtzw2/ZsOexWhJ/2NP68XeiOztl/b/raBj/+u7vr3Y+8/+pNlnljfQGWlXUz+dQgcNhsk47hx6JtAOPzijg0argykXB4PUAtxv1zsGgwwExtoZwG8jzPHCg2B88x2qwxwxBvc1FRimHXcsSj1YUeFDQslUyaUGP6pPlXPI+DVcsimpoaOP77xpRWsx2FMFGgsW2X1OV5v2fnS8sY8Q2imdvXn4RjztPXw0PnyxP36+f/Ts0/jVyfj5ybPj7NXzZ/++4XX8ybVmSsjStecZQHsp1RUX80uM7RrsnH4XaeJgISt2QMu4f8GtaDtcSMDFW17DlZ2IDs66nooOH5OHm4oObVc4hg24fWHvGc15yY0VAWp+LYFwqZKNKOzNzxl2UMB2wh4c+NDhN93tr+IyCTRj0Pi7omJlVaKchXAc8ikeNMDEho/g40dFuBoRyPELgdh4iLiTAHQtBUjxLm2yFW0nbtmyyPt+Cj13FTMsbl3aBsUwPYoSUqeMNKJgClTREPikRi4AdhRHv45IXnLoyONfsuKMj/qLI4wzcoaNd9y0aFlC6KyRLcq8noxQMKMgKQm3LrAo1KWnnJ0To/g1p2W5GhEhSUWNgYxJiIQwMABV0DxzFeL740FOaDbN8qyY3KU++0Bo0toDtGl40mkZ8r3tkgD5SF8cNkr+jgJjehGRF3eIh3QfDaSlOgqDOrZRXHsuhXAJBcD8MSJNsTlVBYb0aei8MorexLSYKQ/RpVaexWS2XKpCY9e8T6/PQ6sg7EvsMUN0csbtv90qccGhPeHFXz64iNYnOvS1sKDa4RE81uQN+XfdMVzx93LVn3wna0Jo3/od2IALRSQ0N403sWIHOKYqshcg7WEXgZmL6/Ejiw6y2lfghp+dyuLtwQPpu74qb46MS3eAx7i77rYXCWgKbdYR8zY4kkPg6C+NyFs9CI+5+24ITLuEQpoImKUT3KJ9NKj3ejW/RtAHHvG0JQeqbLSwvLuiwvDc5094t+tnbAsxalt7WwVv1pT2hWtup8d/Y5EVWJCcKdAf22Qxz55UgD6jZalDS8icGjaXaoX8yWVYa8PLkjABTarhtTU5AnaBZhx0DlrXStaKQzvpOzAgx7J3JUZigBj2/MPtCHcEpt97PlFN+byRjS5XSLOuPSLvhLPooHNBSBp4vEeE+rL0wNcbKGgvLY1khPylXV+s4Z7CM9Ll9Cm6bJNIkNYnmXsw8U71rgwi7AXR5scXDQbpogYzsReQRWmSIXoTe9fZ2woKHrgWDQlIaAprRYoh8/nuo1h99Gjy2mu8wzteCXJ2fn1sH5ydX79oN3UA7y0SgbdQaKUya7H+8qHHa1HAjd8FFo5l4gDZ3ylXps2qenW8Gdp/hOQZ6H3TJsS6mFLU6/BqGCKk+2SytJhuqLydu8yWO6H6GE70GE7Un9VjONFjONGmi/gYTvQYTvQYTnTXcCJXiqNv0mgfbh7Y4et6dPVnE/8mFQT32Huz7byGMUY09saVJURurAsUmnFRuKJy3pcIxXnQYuXv+MjOh8PbLzp5T/dsEvhgHbaioBxfrLERAq07gPxgl+3Ca1XYcKsMXVZXSIX+W3y9oldMW8Wpllrz1JlDoHJcuppRYizunIiKOQ6jFXp0ebOjYhCGozgTOfgntG6YRuuGhadYYSfimv6Bnp8AtGKciwXznbR54Vt/h4xMUbT7jxYBLubQcNQ1E/xqSMYtnr1kz9l0xsaUvciPv315VEzZt7Px4ctjevji2cvp9NXR8cvZQOmme2Uqtk4JVlJteI7m1n03mw09ErHQ4+m7TVxz52dN7lrM08LHkM3mGvxBF18w/IaaWaVcauBuS5mA80vcKnnQ6M6fONUSsm91aX93zcBSAkSuLBLfFwYNum55E090Atu8JZ+fllib0KFqSaHg2ig+bSwIXwoJ6UM1YOsNavpCaqOJSafWHge0T3o7nZ8wlhhx0xrwfLuKc1DMRs7I23i346WH6bikcx9jgXpTo00nUQ3dhN9JRf7IqNF9MFzb1SrYjDalgVoXdfD4hPWzpDlJ4DqPxowISTyc0K3woZvMrTkB2/jiotzNrakfPvY+F1dQALuxDlwpCRO095bskK0f3kK9gRsCsE4WeYppSiCjzm6FmlvJCJNkASfDHlSzkxTa164DIwzQ2YttgsG2ppln2VG2aSu9P/tQu5RUYqnjNnppuR+UsZJXVrSkLjKZGWwanQoebYTfjNAhYhlYH1YvWMUULXdYVeetH6MnbrSyAnnCZ3Azs89cm05uXit3tL1gwQ2gCc2V1JooBl5xV3EukDAvJqSQ0P12uM7/K3o8ez4ezzoCKhj2O/Jp/Gwz8RQ/2cSzE9r3U2dHO0jqsHZBbe7Jif0Szp2zvQT6Bb0QzqPy6IX4/XohsDTQ/zYvRBfrv4MXYh0KO/RC4HH6P+GFwKk4035ciup36orYAt9Hf8SjP6I/q0d/xKM/YtNFfPRHPPojHv0R2/gjEn2vUWWq7P308d3Nqt1PH9/5G7ZW8poXDOu71iUzzP6KiYNE51b1HbnoWqgcS83iDjrY+o49D5Wki31gWNG20mkUVLb1Ac5mkappnQ36II2Li+NioALkKC54VsACVphXQrFzjV20BCDE+FLQtGgOke+lnDtqs59z7fKtfmm0aQMJfZFPXOi+FSH0nglx4eHTAJqCv2JJdUB4FHa3KxWtMy2k6xv3nnDGsyyXJ8fHzw7QiPbPv/4hMap9bWRtwa/5eQcpqDepgbOwR6iT88qqbG79IJKy0WhyHiFbaRXekEafQJw0qswszMnIbjRE7JpkexTLpdBGNWAjk4r4TUJSTE94QpYDm3Gn5R+wasJx3pkhBKB3mtuNQouCPZjE3sCxO8FUxJOJb6lU00j1BajrV2VzhfRhZvnGmWHWzTLdou50zwRmNFlSs6fc8xEXbi2dHuLqtkIDAYxFL1dtLndqHHV2IXRxgPME+l84Uk4qmwNNz2Xo8+VsNn21JyxxOptNLR/rkwyEYfPEN7OhAaS3zsfHz4b7hh4/G9KozWJX9HAObbDWUYM7nnsDajNke+wKK3ugYADHkIIgA3jiL5gD3cU9ARPm0WEvXbKG8/vPcH7ZZ6i7HDUEiEeD0HUke98GLgEkpIUDlBtKhUbzgM/DbxTGnDYmvJVibzqLgLb5tldYVZsWL5gCvpH6+BBCx/GVeFrJlJklc10DzFLi6R6qTaDovNphy1p7YiK/DQhAM+PyOCZfTyLCNLIe3MSvB5mwR3xgTo1mapc50j85+B06HbSbad2B+8AnHeEPYxKvR0ca11vmOtmNgFiCrutluOYLvIqSK/Q3Z9c0IjEjSSv6Zr7PaOilCD4r0Gpjy7d9whkmmrS3DQy0oBr7NJgFFWjNL0atFiGgHNHKS9LAC8AVSOSsxWmxYWUao5rbCtNgmHTyKDJXJs975WoGStqkvrO/d5jTjx2PRNMNewrmebs3A2fiYUJuaDllyT1/kxS4sNe2r1JQynkrLK3B0YrRXRvTPdJ9TwFZ8hZatSVy4C1c5huNWoIrPjMj9JryEvPne0izivLdabP2oMEIXnYbwGBB9c6EGhde5w/8Ig1zi9kQuvDhRag0JsWqgu5V9pXOBfOTZrOmtCs7AVKAkiPK/QOCk0IgDzSDACqnZcr2Oh2bcirsZeWu5iHvRMd27/0TncfbF+jG2JfIpT2gkMM7LngKgrocd3YSeF8JvJPvYQ0XupkqbqKMW2ZPbqyKhuviw9Yg6fPAl9rKhtHuWRx3iHjsZgBUB+7vtIRZe4uT+Pl2dzmC9OTSxoFYZdBV5/FFKbxcYb9doY0ogNMLuXRdnZdsGqJPIEwqKryPlQqostJqExAPVY/iRfydmO8cstdp5FG7coPK3t57+RsvS3rwPBuTJ/x8IQX7J/L6/CeCfyc/XpDDo8tDbNfoC6o9Jad1XbKf2fRP3By8GD/PDrPD5+TJn3749P7dCN/9nuVX8qkPhDo4PMrG5L2c8pIdHD5/e3j8ilzQGVX84MUYqmttePHe5T7DgTZbx5i4233folXGw2znn/u72MUk8VRn4wErDgvRmQ+zjkgS26+jQ2TgUDy2gHhsARGt2mMLiMcWEI8tINZu0P/vWkB8HVpkWg0lbnH2Nfn045sfT4b6XDoz6wHL9QFm/RwcvnyVSKh4k3Zafw0twZo5dRt7uZvZYXbBriHWuS+0LhloMJUMQVO9Cf1UF1ZBnPGSTRk1B5zrA+f8pHkuofCOryTSF7izmpoQLbrFhM7tZ0OiYyx0DAxXcRHalm0x3Hv72V2Go7/caTj72R2GQ7ll+/Fi2SfEN3ghaM1YUg/MLopM3GZqw9LMmkF7O7jBoEPb1x/U0XWjynDUwKO+0QG4aBTPqaGkkkWDVQUbDQb5zEezkjSA4wHPc98Llfoj9y3YE2IP6FdBcP0j/mtgiNfOTwP9f6WA74LZw1vIwPhTuoJJroHbV2nfxhCjy6jJDK/Yb604jrOlJQ/prDU1ixNnE+m8XPG5oogh2IcT6DhiAlZOf2G5l0TxH5dbLG+YP5w536UUJu1TEhIMmFIdmoxl3jWDvLUfdaR9KJNVFNzVIbOyPyRJuMQ4GCfkQ6zrkNnJOLtL+gugFuVpJRvZI9n+JlrKjt+7cf8A6OBZ6AMevAi70B2156VsipbcX9t/eq8FpJfRgho6fALeu1/xzOfJp9puUZtrSYviEl649CB9wUip4gORzBk+yGolLWm2dUSD7OJ+2f+8BePGTyy9fC/lvGQ448DWTu1iYnpyWcSHJiQWMEOzgBhM9ZbdGHz5xr2OxvDpoW0a183DhBTl8P7WI21AYJ2xNqXhaDSXsXsZHcObB3MfZNEHm47lmDEvuVldbsBcb/5q01EdpW26cT0q33QcjJ/daIzk1TX8oJD5FVCpYwhv/L8HDhf+Bimb3bxH95s92nohlbnE+6E1q1CRL6Ty4+0HZrDmcgxokRsNtP7Ix1H6lAvwqfS4fbxM0VINfzK4HWuGqui8f7fcOpr9qmvW22LUzpebDXr34Uo6ZaVuBbwf5NJKcxWtLZ/V7J97uCTiBrlZ5CC3xC3atSKIQuYp19nbHN3+gP8aAHJm5YWIWp17xn7uCwlkEYHa50PkSf7rf/zIV83U6r2YH+XG/1P8bACL9vdwyaY3ZguUxKPffJraj249UQnS252qWhbD5LbVJkYrUMsCjYCDQzUDZ/euI53Lgvx09mbYL6Frmj/cpFqI/cFk0Tvq9xzMm/H6g+Exuf04bjaQO/cVHQijBZczlmJ9qOEikMNj3sIA77qeAeyaRb2N299/XITrOEzbgaXXfWUArm8jEBhLkGOHGEGnu8vGXIB93vS+8aXhB/s+rNNLQKluJ7z3GrXsn7ko5dxqQ3ubqeX30MgjWVOxXxuuWJGEXt3g2kbopZyT0/MzLBHiQyShPYEriC0VFqUKNZR8pfi4q/vekguAV8r5XrivfkZTN3kLI71zI0lF9vy7cy7a91uN2r9vf7bfRIZmi0nvd7DuFEzzuXDXpR/aVUM9Go+fBRDRz0fj8bhnQNIQi+1f+TPXho6iFBSHdgDHxUxRzBZolDc0eWQy8mMHFIRWUSjv5McNoNz4oxtWj2uMlomozCciYXrSV+1pNiw32pUdgz1GU5ZdH7vDdsZhSjr7KpiX/O60pP020ApSxC103WrcNEyDdUCso2iaG35tFZqOVpKyq5bYYyfo2gL02N+oXPWj8HyFLfdvDLJ2nUMCLnAAAjhXjj5EBtXNtOR64Vo9YhB/NAC8EmdFxJdAGKFjVpBV3Rim+pruumXY7MyLJFEXx8CJYF11SMOOzv3PCyZIoy2luH1MV4G41gsuy4qjSAEhqhhm3Ya0TBLz0KRrebPQLp0dh2xt/9uKHALz2w+56NB5o5uk1bha+xAWr/k1g/0NYCD2DVCeZHH1t5zWplHt4YLDIIU3W1tZmcvWE2/kEKupqaIVM0xBEtqkXZ4JjGEXrSATeOtw0obO45OjCSb8aUmkGJEpy6k99+0JjKBDQReB8KKIS0ZVaYk3IC1nHs3Bnesc1siUf7drqT0/ePnAnROV6Mp9IkxbwKaNlE4RdJSiH4qbWHQ8TFcPB2/NvKRa89kqVDHoIFLK+S7Pc7u9SbVJl8+mCncz0cIRul/S9l4UARYoBtHZxU2218TE66VchtTMYFiPqkyESbPr4A1+kKUP+cRRZPwnSCvB7gfX7hUg2ZhVYxpIgGWvcTvsRQNOzhEo3S5AZ0R+pkoAUwMT+oicNgU37bv2dMGjAO47ystGde3srmPfZd+xcF/+hZZ9Oy+Zw3VV2B0vWbjZLYo4IeNjKhw2sK8t/1lADGKvKZIlmUtMqn5AgnWkiHD7lBvLmzOuILkWaVdxEwdTRrVC4MOWyh3oQ9wkbMjiWsAg64TfoygEzX5tMFq5XPkkpQ4wxWi+cLJBRT/zqqnc8Xly9LdnR38LsLzk25dQLTJHf3tx/LebpeOno2RjBPtsOrgseVmSKSPj4TZWl78H+cnjYLcpLSNllUclS+BF0OZmxhQ29sscfWAtGHdwMe0RWjRByotlZ63gHclY2lUHmETTn8S3SLpYso4KOTzIgUSIoWJYnLSekU9UXyE54luWDjv1BKJKnFFFW9ZWyXEQaY1FvCCAH/k8czXCXFGySLtFHtdvlQpunst583ckkeC/gx8R0YT0h25Qp6VvJG1suG8tyAEMsdNhXzwebJYFgshDX/AD4k3EKMmTLklIFZV8pKZDCRFre9pB31B99ZDnwcL7fZ4GQM/3WcLhnD27z7WfSEFqxVIJvRWYuoaDp/YeclcVCqheoeiuNnSAfEg6DhC7ZIw/bErFQaf5gmoYuZ8aFulGA5PJWj60NXm3cfz7h/vP948O9589Pz48fjb+9ujV/tH4+eHLw8Ojw/H+4bNvD5+9On724tv9w/H48PZpe3LSLG+gHk7ELJ9cnL0JPeZoDkWSCNVa5lgZOpk8EJjfx/D0bBZbh1yalWJaltd4Ni7O3oAE5SJv4X4FOb9N5xqlem5bI9IeXHyEVXp9hKETS2RlqT9KIe/kRjlFueA6l9dMxYi2WEIQ/tkbPSKKXXO29EKqlZ1aUQKtkBqFDFdtqFZyWrLKFXgZooekxMSDELGr4mA8Dms2LdoszICvmBOCh9DsRR3clx+7+tG3I9fBJg1Jvguj+hSFcw8I/t+4rpB8QHv8XKW6o2GfzV1XQNEl+bf37zp9/9KrVU7BteHI1xs8gCO1Mr7nTFAHuTXaW1jdC4Hopq6lChpY14iW2nafvOe5klrOTMdkjM1Ol0w97XJHIds73qVsF0k5dFGQqtGQZcmExRN+9s2TJ+6by8+VS9luCyhAZHSi2hNZt4mj9g4u+DUvGlq2gknMhuyi37bgaM6eNSWqRUo205LphZSJXbxuVC01c20rfXdFqG6A3Ecxu8o4t5T12YnnsqpprPL52pgRIIsoFIegcyF1YCQ6++r/CwAA//9hWodu" + return "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" } diff --git a/x-pack/functionbeat/docs/fields.asciidoc b/x-pack/functionbeat/docs/fields.asciidoc index 2deda0fda83a..c623b9401718 100644 --- a/x-pack/functionbeat/docs/fields.asciidoc +++ b/x-pack/functionbeat/docs/fields.asciidoc @@ -3314,16 +3314,6 @@ type: long Minor version of the operating system. --- - -*`url.hostname`*:: -+ --- -type: keyword - -Hostname of the request, such as "elastic.co". - - -- [[exported-fields-functionbeat]] diff --git a/x-pack/functionbeat/include/fields.go b/x-pack/functionbeat/include/fields.go index 62113755e71a..00716b05f16d 100644 --- a/x-pack/functionbeat/include/fields.go +++ b/x-pack/functionbeat/include/fields.go @@ -19,5 +19,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } From d07670c1f4dd96d0ea6d608bc3bd4144e8ed0cb7 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Fri, 1 Feb 2019 14:41:07 +0100 Subject: [PATCH 55/66] Fix camel-cased fields in kubernetes pod metricset (#10470) --- metricbeat/docs/fields.asciidoc | 6 +++--- metricbeat/module/kubernetes/fields.go | 2 +- metricbeat/module/kubernetes/pod/_meta/fields.yml | 6 +++--- metricbeat/module/kubernetes/pod/data.go | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index c96e3cc1c9c1..ce8d06b76041 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -12461,7 +12461,7 @@ Total memory available -- -*`kubernetes.pod.memory.workingSet.bytes`*:: +*`kubernetes.pod.memory.working_set.bytes`*:: + -- type: long @@ -12486,7 +12486,7 @@ Total resident set size memory -- -*`kubernetes.pod.memory.pageFaults`*:: +*`kubernetes.pod.memory.page_faults`*:: + -- type: long @@ -12496,7 +12496,7 @@ Total page faults -- -*`kubernetes.pod.memory.majorPageFaults`*:: +*`kubernetes.pod.memory.major_page_faults`*:: + -- type: long diff --git a/metricbeat/module/kubernetes/fields.go b/metricbeat/module/kubernetes/fields.go index 3c6284e88839..558c3154dd5b 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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" } diff --git a/metricbeat/module/kubernetes/pod/_meta/fields.yml b/metricbeat/module/kubernetes/pod/_meta/fields.yml index f449f367045c..1e52a5939ede 100644 --- a/metricbeat/module/kubernetes/pod/_meta/fields.yml +++ b/metricbeat/module/kubernetes/pod/_meta/fields.yml @@ -86,7 +86,7 @@ format: bytes description: > Total memory available - - name: workingSet + - name: working_set type: group fields: - name: bytes @@ -102,11 +102,11 @@ format: bytes description: > Total resident set size memory - - name: pageFaults + - name: page_faults type: long description: > Total page faults - - name: majorPageFaults + - name: major_page_faults type: long description: > Total major page faults diff --git a/metricbeat/module/kubernetes/pod/data.go b/metricbeat/module/kubernetes/pod/data.go index c1370487474d..75b43d743284 100644 --- a/metricbeat/module/kubernetes/pod/data.go +++ b/metricbeat/module/kubernetes/pod/data.go @@ -79,14 +79,14 @@ func eventMapping(content []byte, perfMetrics *util.PerfMetricsCache) ([]common. "available": common.MapStr{ "bytes": availMem, }, - "workingSet": common.MapStr{ + "working_set": common.MapStr{ "bytes": workingSet, }, "rss": common.MapStr{ "bytes": rss, }, - "pageFaults": pageFaults, - "majorPageFaults": majorPageFaults, + "page_faults": pageFaults, + "major_page_faults": majorPageFaults, }, "network": common.MapStr{ From 6b1e84da2ca366b039b44845abae1e026c276294 Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Fri, 1 Feb 2019 06:56:57 -0700 Subject: [PATCH 56/66] Change diskio.read.ops to diskio.read.count and add status metrics (#10334) * Change diskio.read.ops to diskio.read.count and add status metrics * Move instance metrics under aws.ec.* * Update fields.yml * Update fields.asciidoc * Run mage fmt update * Change type from keyword to ip --- metricbeat/docs/fields.asciidoc | 90 +++++++++++++++++++ metricbeat/docs/modules/aws.asciidoc | 4 +- .../metricbeat/module/aws/_meta/docs.asciidoc | 4 +- .../metricbeat/module/aws/ec2/_meta/data.json | 55 ++++++++---- .../module/aws/ec2/_meta/fields.yml | 36 ++++++++ x-pack/metricbeat/module/aws/ec2/data.go | 40 +++++++-- x-pack/metricbeat/module/aws/ec2/ec2.go | 46 ++++++++-- .../module/aws/ec2/ec2_integration_test.go | 8 +- x-pack/metricbeat/module/aws/fields.go | 2 +- 9 files changed, 244 insertions(+), 41 deletions(-) diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index ce8d06b76041..4c17d121b433 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -992,6 +992,96 @@ type: long Reports whether the instance has passed the instance status check in the last minute. +-- + +*`aws.ec2.instance.core.count`*:: ++ +-- +type: integer + +The number of CPU cores for the instance. + + +-- + +*`aws.ec2.instance.image.id`*:: ++ +-- +type: keyword + +The ID of the image used to launch the instance. + + +-- + +*`aws.ec2.instance.monitoring.state`*:: ++ +-- +type: keyword + +Indicates whether detailed monitoring is enabled. + + +-- + +*`aws.ec2.instance.private.dns_name`*:: ++ +-- +type: keyword + +The private DNS name of the network interface. + + +-- + +*`aws.ec2.instance.private.ip`*:: ++ +-- +type: ip + +The private IPv4 address associated with the network interface. + + +-- + +*`aws.ec2.instance.public.dns_name`*:: ++ +-- +type: keyword + +The public DNS name of the instance. + + +-- + +*`aws.ec2.instance.public.ip`*:: ++ +-- +type: ip + +The address of the Elastic IP address (IPv4) bound to the network interface. + + +-- + +*`aws.ec2.instance.state.code`*:: ++ +-- +type: integer + +The state of the instance, as a 16-bit unsigned integer. + + +-- + +*`aws.ec2.instance.threads_per_core`*:: ++ +-- +type: integer + +The state of the instance (pending | running | shutting-down | terminated | stopping | stopped). + + -- [[exported-fields-beat]] diff --git a/metricbeat/docs/modules/aws.asciidoc b/metricbeat/docs/modules/aws.asciidoc index eb6148f0cebe..b2b31db599e5 100644 --- a/metricbeat/docs/modules/aws.asciidoc +++ b/metricbeat/docs/modules/aws.asciidoc @@ -32,8 +32,8 @@ see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html[Te aws> sts get-session-token --serial-number arn:aws:iam::1234:mfa/your-email@example.com --token-code 456789 --duration-seconds 129600 ---- -Specific permissions needs to be added into the IAM user's policy to allow Metricbeat collecting AWS monitoring metrics. Please -see documentation under each metric set for required permissions. +Specific permissions needs to be added into the IAM user's policy to authorize Metricbeat to collect AWS monitoring metrics. Please +see documentation under each metricset for required permissions. By default, Amazon EC2 sends metric data to CloudWatch every 5 minutes. With this basic monitoring, `period` in aws module configuration should be larger or equal than `300s`. If `period` is set to be less than `300s`, the same cloudwatch metrics diff --git a/x-pack/metricbeat/module/aws/_meta/docs.asciidoc b/x-pack/metricbeat/module/aws/_meta/docs.asciidoc index 735254f1a8af..a510dfd570ca 100644 --- a/x-pack/metricbeat/module/aws/_meta/docs.asciidoc +++ b/x-pack/metricbeat/module/aws/_meta/docs.asciidoc @@ -25,8 +25,8 @@ see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html[Te aws> sts get-session-token --serial-number arn:aws:iam::1234:mfa/your-email@example.com --token-code 456789 --duration-seconds 129600 ---- -Specific permissions needs to be added into the IAM user's policy to allow Metricbeat collecting AWS monitoring metrics. Please -see documentation under each metric set for required permissions. +Specific permissions needs to be added into the IAM user's policy to authorize Metricbeat to collect AWS monitoring metrics. Please +see documentation under each metricset for required permissions. By default, Amazon EC2 sends metric data to CloudWatch every 5 minutes. With this basic monitoring, `period` in aws module configuration should be larger or equal than `300s`. If `period` is set to be less than `300s`, the same cloudwatch metrics diff --git a/x-pack/metricbeat/module/aws/ec2/_meta/data.json b/x-pack/metricbeat/module/aws/ec2/_meta/data.json index 0a12fc202837..d753f58ef135 100644 --- a/x-pack/metricbeat/module/aws/ec2/_meta/data.json +++ b/x-pack/metricbeat/module/aws/ec2/_meta/data.json @@ -7,28 +7,56 @@ "aws": { "ec2": { "cpu": { + "credit_balance": 169.089216, + "credit_usage": 0.002926, + "surplus_credit_balance": 0, + "surplus_credits_charged": 0, "total": { - "pct": 3.34375 + "pct": 0.033333333333322 } }, "diskio": { "read": { "bytes": 0, - "ops": 0 + "count": 0 }, "write": { - "bytes": 14036172.8, - "ops": 1320.4 + "bytes": 0, + "count": 0 } }, + "instance": { + "core": { + "count": 1 + }, + "image": { + "id": "ami-01e24be29428c15b2" + }, + "monitoring": { + "state": "disabled" + }, + "private": { + "dns_name": "ip-172-31-26-12.us-west-2.compute.internal", + "ip": "172.31.26.12" + }, + "public": { + "dns_name": "ec2-34-217-213-210.us-west-2.compute.amazonaws.com", + "ip": "34.217.213.210" + }, + "state": { + "code": 16, + "name": "running" + }, + "threads_per_core": 1 + }, "network": { "in": { - "bytes": 112.8, - "packets": 2 + "bytes": 296.6, + "packets": 3 }, "out": { - "bytes": 84.8, - "packets": 2 + "bytes": 269, + "packets": 3.6 } }, "status": { @@ -39,18 +67,15 @@ } }, "cloud": { - "availability_zone": "eu-central-1b", - "image": { - "id": "ami-556ef13a" - }, + "availability_zone": "us-west-2a", "instance": { - "id": "i-08027f3dcddb9a976" + "id": "i-077bdaf7e5d81bba3" }, "machine": { - "type": "i3.4xlarge" + "type": "t2.micro" }, "provider": "ec2", - "region": "eu-central-1" + "region": "us-west-2" }, "event": { "dataset": "aws.ec2", diff --git a/x-pack/metricbeat/module/aws/ec2/_meta/fields.yml b/x-pack/metricbeat/module/aws/ec2/_meta/fields.yml index e3e86cf883ce..1aaefab58f71 100644 --- a/x-pack/metricbeat/module/aws/ec2/_meta/fields.yml +++ b/x-pack/metricbeat/module/aws/ec2/_meta/fields.yml @@ -68,3 +68,39 @@ type: long description: > Reports whether the instance has passed the instance status check in the last minute. + - name: instance.core.count + type: integer + description: > + The number of CPU cores for the instance. + - name: instance.image.id + type: keyword + description: > + The ID of the image used to launch the instance. + - name: instance.monitoring.state + type: keyword + description: > + Indicates whether detailed monitoring is enabled. + - name: instance.private.dns_name + type: keyword + description: > + The private DNS name of the network interface. + - name: instance.private.ip + type: ip + description: > + The private IPv4 address associated with the network interface. + - name: instance.public.dns_name + type: keyword + description: > + The public DNS name of the instance. + - name: instance.public.ip + type: ip + description: > + The address of the Elastic IP address (IPv4) bound to the network interface. + - name: instance.state.code + type: integer + description: > + The state of the instance, as a 16-bit unsigned integer. + - name: instance.threads_per_core + type: integer + description: > + The state of the instance (pending | running | shutting-down | terminated | stopping | stopped). diff --git a/x-pack/metricbeat/module/aws/ec2/data.go b/x-pack/metricbeat/module/aws/ec2/data.go index 20cf12ce9bad..e73e8309c1f1 100644 --- a/x-pack/metricbeat/module/aws/ec2/data.go +++ b/x-pack/metricbeat/module/aws/ec2/data.go @@ -24,11 +24,11 @@ var ( "diskio": s.Object{ "read": s.Object{ "bytes": c.Float("diskio.read.bytes", s.Optional), - "ops": c.Float("diskio.read.ops", s.Optional), + "count": c.Float("diskio.read.count", s.Optional), }, "write": s.Object{ "bytes": c.Float("diskio.write.bytes", s.Optional), - "ops": c.Float("diskio.write.ops", s.Optional), + "count": c.Float("diskio.write.count", s.Optional), }, }, "network": s.Object{ @@ -46,6 +46,30 @@ var ( "check_failed_instance": c.Int("status.check_failed_instance", s.Optional), "check_failed_system": c.Int("status.check_failed_system", s.Optional), }, + "instance": s.Object{ + "image": s.Object{ + "id": c.Str("instance.image.id", s.Optional), + }, + "state": s.Object{ + "name": c.Str("instance.state.name", s.Optional), + "code": c.Int("instance.state.code", s.Optional), + }, + "monitoring": s.Object{ + "state": c.Str("instance.monitoring.state", s.Optional), + }, + "core": s.Object{ + "count": c.Int("instance.core.count", s.Optional), + }, + "threads_per_core": c.Int("instance.threads_per_core", s.Optional), + "public": s.Object{ + "ip": c.Str("instance.public.ip", s.Optional), + "dns_name": c.Str("instance.public.dns_name", s.Optional), + }, + "private": s.Object{ + "ip": c.Str("instance.private.ip", s.Optional), + "dns_name": c.Str("instance.private.dns_name", s.Optional), + }, + }, } ) @@ -55,18 +79,16 @@ var ( "name": c.Str("service.name", s.Optional), }, "cloud": s.Object{ - "provider": c.Str("cloud.provider", s.Optional), + "provider": c.Str("cloud.provider", s.Optional), + "availability_zone": c.Str("cloud.availability_zone", s.Optional), + "region": c.Str("cloud.region", s.Optional), "instance": s.Object{ - "id": c.Str("cloud.instance.id", s.Optional), + "id": c.Str("cloud.instance.id", s.Optional), + "name": c.Str("cloud.instance.name", s.Optional), }, "machine": s.Object{ "type": c.Str("cloud.machine.type", s.Optional), }, - "availability_zone": c.Str("cloud.availability_zone", s.Optional), - "image": s.Object{ - "id": c.Str("cloud.image.id", s.Optional), - }, - "region": c.Str("cloud.region", s.Optional), }, } ) diff --git a/x-pack/metricbeat/module/aws/ec2/ec2.go b/x-pack/metricbeat/module/aws/ec2/ec2.go index f45274ee939f..53157b85c0bb 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2.go @@ -63,8 +63,8 @@ var metricIDNameMap = map[string][]string{ "network4": {"network.out.bytes", "NetworkOut"}, "disk1": {"diskio.read.bytes", "DiskReadBytes"}, "disk2": {"diskio.write.bytes", "DiskWriteBytes"}, - "disk3": {"diskio.read.ops", "DiskReadOps"}, - "disk4": {"diskio.write.ops", "DiskWriteOps"}, + "disk3": {"diskio.read.count", "DiskReadOps"}, + "disk4": {"diskio.write.count", "DiskWriteOps"}, "status1": {"status.check_failed", "StatusCheckFailed"}, "status2": {"status.check_failed_system", "StatusCheckFailed_System"}, "status3": {"status.check_failed_instance", "StatusCheckFailed_Instance"}, @@ -206,19 +206,18 @@ func createCloudWatchEvents(getMetricDataOutput *cloudwatch.GetMetricDataOutput, event.RootFields = common.MapStr{} mapOfRootFieldsResults := make(map[string]interface{}) mapOfRootFieldsResults["service.name"] = metricsetName + + // Cloud fields in ECS mapOfRootFieldsResults["cloud.provider"] = metricsetName + mapOfRootFieldsResults["cloud.availability_zone"] = *instanceOutput.Placement.AvailabilityZone + mapOfRootFieldsResults["cloud.region"] = regionName mapOfRootFieldsResults["cloud.instance.id"] = instanceID - machineType, err := instanceOutput.InstanceType.MarshalValue() if err != nil { err = errors.Wrap(err, "instance.InstanceType.MarshalValue failed") return } - mapOfRootFieldsResults["cloud.machine.type"] = machineType - mapOfRootFieldsResults["cloud.availability_zone"] = *instanceOutput.Placement.AvailabilityZone - mapOfRootFieldsResults["cloud.image.id"] = *instanceOutput.ImageId - mapOfRootFieldsResults["cloud.region"] = regionName resultRootFields, err := eventMapping(mapOfRootFieldsResults, schemaRootFields) if err != nil { @@ -227,7 +226,38 @@ func createCloudWatchEvents(getMetricDataOutput *cloudwatch.GetMetricDataOutput, } event.RootFields = resultRootFields + // AWS EC2 Metrics mapOfMetricSetFieldResults := make(map[string]interface{}) + mapOfMetricSetFieldResults["instance.image.id"] = *instanceOutput.ImageId + instanceStateName, err := instanceOutput.State.Name.MarshalValue() + if err != nil { + err = errors.Wrap(err, "instance.State.Name.MarshalValue failed") + return + } + + monitoringState, err := instanceOutput.Monitoring.State.MarshalValue() + if err != nil { + err = errors.Wrap(err, "instance.Monitoring.State.MarshalValue failed") + return + } + + mapOfMetricSetFieldResults["instance.state.name"] = instanceStateName + mapOfMetricSetFieldResults["instance.state.code"] = fmt.Sprint(*instanceOutput.State.Code) + mapOfMetricSetFieldResults["instance.monitoring.state"] = monitoringState + mapOfMetricSetFieldResults["instance.core.count"] = fmt.Sprint(*instanceOutput.CpuOptions.CoreCount) + mapOfMetricSetFieldResults["instance.threads_per_core"] = fmt.Sprint(*instanceOutput.CpuOptions.ThreadsPerCore) + publicIP := instanceOutput.PublicIpAddress + if publicIP != nil { + mapOfMetricSetFieldResults["instance.public.ip"] = *publicIP + } + + mapOfMetricSetFieldResults["instance.public.dns_name"] = *instanceOutput.PublicDnsName + mapOfMetricSetFieldResults["instance.private.dns_name"] = *instanceOutput.PrivateDnsName + privateIP := instanceOutput.PrivateIpAddress + if privateIP != nil { + mapOfMetricSetFieldResults["instance.private.ip"] = *privateIP + } + for _, output := range getMetricDataOutput.MetricDataResults { if len(output.Values) == 0 { continue @@ -236,7 +266,7 @@ func createCloudWatchEvents(getMetricDataOutput *cloudwatch.GetMetricDataOutput, mapOfMetricSetFieldResults[metricKey[0]] = fmt.Sprint(output.Values[0]) } - if len(mapOfMetricSetFieldResults) <= 3 { + if len(mapOfMetricSetFieldResults) <= 11 { info = "Missing Cloudwatch data for instance " + instanceID + ". This is expected for a new instance during the " + "first data collection. If this shows up multiple times, please recheck the period setting in config." return diff --git a/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go b/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go index c45d73bb58d1..1c75f450886e 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2_integration_test.go @@ -40,8 +40,8 @@ func TestFetch(t *testing.T) { tempCreds["session_token"] = sessionToken } - awsMetricSet := mbtest.NewReportingMetricSetV2(t, tempCreds) - events, errs := mbtest.ReportingFetchV2(awsMetricSet) + ec2MetricSet := mbtest.NewReportingMetricSetV2(t, tempCreds) + events, errs := mbtest.ReportingFetchV2(ec2MetricSet) if errs != nil { t.Skip("Skipping TestFetch: failed to make api calls. Please check $AWS_ACCESS_KEY_ID, " + "$AWS_SECRET_ACCESS_KEY and $AWS_SESSION_TOKEN in config.yml") @@ -51,7 +51,7 @@ func TestFetch(t *testing.T) { if !assert.NotEmpty(t, events) { t.FailNow() } - t.Logf("Module: %s Metricset: %s", awsMetricSet.Module().Name(), awsMetricSet.Name()) + t.Logf("Module: %s Metricset: %s", ec2MetricSet.Module().Name(), ec2MetricSet.Name()) for _, event := range events { // RootField @@ -82,7 +82,7 @@ func TestFetch(t *testing.T) { checkEventField("status.check_failed_instance", "int", event, t) } - err := mbtest.WriteEventsReporterV2(awsMetricSet, t, "/") + err := mbtest.WriteEventsReporterV2(ec2MetricSet, t, "/") if err != nil { t.Fatal("write", err) } diff --git a/x-pack/metricbeat/module/aws/fields.go b/x-pack/metricbeat/module/aws/fields.go index b5db704d62d7..36cc75e590f1 100644 --- a/x-pack/metricbeat/module/aws/fields.go +++ b/x-pack/metricbeat/module/aws/fields.go @@ -19,5 +19,5 @@ func init() { // AssetAws returns asset data. // This is the base64 encoded gzipped contents of module/aws. func AssetAws() string { - return "eJzElsFuIzcMQO/5CmLP3Tnk6EOBrtH7ou1ijw4t0R7CGlIQKQ+8X19obCd26mzTIJPqONKQ75Ezkj7Djg4LwNHuAJw90QI+4Wif7gAiWSicnVUW8OsdAMADjvYAg8aaCIKmRMENfvv+Jwwq7FpYtjCQFw4Gm6LDNLdMWuOIHvruDqBQIjRawBbvADZMKdpiiv4ZBAc607Thh9wWFq359OQG1HWQy0AU7h+f3Qr2YsDjeKBw/wBBxZHFwHt6dPMeHUYqBBYKZorPbL83Wxh7Dv1TgBs1MhKH9WF68fflfXeR/7pO5/Fc9VI35Nq5OqYuB79acZa3gIniapMUny/4SR3a+KsnyFQCieOWQDeAKWlAp9jAIeiQqxNUYT+VBwtBqKWQeDoAC1QjUJnqyGKOEqh7USQUiuyrarilGVykDmsqzWP59RsckxlYPvXjkhE2WqZV1TnxD2xh/5V7jam9Oys5YRGKVwLHwssTe48GGEKpFMG4PWGHEQ0SVgk9RdAC5lic4stSVktO1VYfKHdKeW3W455gTSRPnUKBKokHbl/io/bYk0B7bfn123KK8OXIDHtMlYANflDR1xrbKvRYthTnVZ6cboq3f0nUISNHiDpKU/9n/38BlHjadryvBiyhllYjjJEbBSY4qtxWF/JRy65j6TKGHbnNanzKAYUC8b59jNL2lTMGsDiVDQay5z/lz/G1+ofyT9u4Vn8vfpZufXCaF37KMEvpP4r9vcoe2XasXSGMs7B/OVUaT9eExvq4VZlrIdhrqgMZ4B454ToRuL6efCzsNCN6i+8kjend2aeqa35v8KUOOVE7FKa6a6Yyndz29ha0Owy2XTrwhim2+xBrbJ+j8/CaBs1pOWW41Hxjr94iaY5erQs9hd1qg5xeOCiTyva/+f1BWYtbO8+9p3JN2u42Gc0owlq9v548MsHENJ2KbdYO5jRcz/HxRprQHAaW6q+XXB3jfbDrHCLnPP+Dyu2O3ZL5OwAA//+GdF+p" + return "eJzEl0FvGzkPhu/5FURPLdAM8BUf9pDDAtu0h1wWwXaLHh1aoj1ENNJApDxw0R+/oDx2bNdpnKydnYNhjDTU876SKPES7ml5BTjIBYCyBrqCNzjImwsAT+Iy98opXsHvFwAAdzjIHXTJl0DgUgjkVOCPb1+gS5E1ZY5z6EgzO4FZTl1tuw6p+AHVtc0FQKZAKHQFc7wAmDEFL1c1+iVE7GhNY48ue+uYU+nHNwegdoNsByL3YfPuULBHA66eO3If7sClqMhRQFvaaNMWFQbKBOIy9uT31H4ztTC07NqHAAc8EooK02X98PP1h2Zr/F2f1s++1G25ri+NJsXQ9E53eqzFi8NAfjILCfc7/MIHe/5uCXrKjqLinCDNAENIDpW8gYNLXV+UoETW0R7MBK7kTFHDEjhCEYIUq48cRTE6ah4V4jJ51kkRnNMZtMTSTSmbjuvbr7AaTED6cT62GWGWcu1VlAN/Rwv7JPcUg317VnLCHMnvCFgZHx/YWxRA53IhD8L2hhUGFAhYomvJQ8ogilnJPy5KSu5DkckrihuH3FXW4oJgShQfZgojlBi4Y1uJG9lDSxHss+vbr9c1wscVMywwFAIW+E45HatYJq7FPCd/XslV00HhtpdiUuiRPfg0RJP+8/y/B4x+TDvaFgGOrmTzCL1no8AAKymHpUfSIeX7hmPTo7snlbMqHseATI54YYsxWl5ZYwBHpTxDR7K/KX+Nn4q+Kn9N46noqfg5NtOl0nnh6whnsf612E9lu2e559RkQn8W9o+j0zheE4x1k6pEUyZYpFA6EsAFcsBpINB0PPmQWemM6BZfKRrTydmr66k/Nfh16vpAdihU31NPuZ7c8vIpsDsMWpZ2PGPydh/i5G05KnfHTNA5VdYRtmW+cK5eIlIUtUjjWnL3kxlyeOSgDCnOn6fvL+pTVrHzXFvKu6R2t+lRhDxMk7a7jSsmqEz1VLRWWYpSt9vGqxtpQFHoOBY9XuRkFe+VtZ5DyHqc/0DK4Rk7VswmxbiU7afEw5WPHQlzyv+6UEiZpBYET+e3TSt3OKeGD++Je1oOKe+3HQF286luSsOw+FZdedvMq4v9c/ge6tLG5uDwIngR5030bDXiw0rwpHXFbRfDLEDRctEjFcgGtM+8QKXGR5lY02kNHaPDpz+/1IHX9v50qziSkvvDK3H/9TPQbm4X/7erfCYRQJHkuFbgA4/p79msZRrYncvQGvwnP49clSPaCV1cGzdyfLbkwg5ubjctb83gdzBNJfr1wfhcS+sWalzyh918cSKqcfc9fA9W38P/frucskKJwvNY6+A6yBOk2trVSCY95Ykltlfghbc9RW+b/gfkEuPqn7RFleP8sla2P0Apdxzryv5h95a+H/vZX/Lvmot/AgAA//+h+RBa" } From 51dbb582910fdd06a07ca40d3ff67e47e2e61bd1 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Fri, 1 Feb 2019 15:16:18 +0100 Subject: [PATCH 57/66] Add documentation about namespace option in kubernetes (#10473) --- libbeat/docs/processors-using.asciidoc | 3 +++ libbeat/docs/shared-autodiscover.asciidoc | 3 +++ 2 files changed, 6 insertions(+) diff --git a/libbeat/docs/processors-using.asciidoc b/libbeat/docs/processors-using.asciidoc index 53baa0a25982..c8fe56fdbe9e 100644 --- a/libbeat/docs/processors-using.asciidoc +++ b/libbeat/docs/processors-using.asciidoc @@ -805,6 +805,9 @@ by default. `host`:: (Optional) Identify the node where {beatname_lc} is running in case it cannot be accurately detected, as when running {beatname_lc} in host network mode. +`namespace`:: (Optional) Select the namespace from which to collect the +metadata. If it is not set, the processor collects metadata from all namespaces. +It is unset by default. `kube_config`:: (Optional) Use given config file as configuration for Kubernetes client. `default_indexers.enabled`:: (Optional) Enable/Disable default pod indexers, in diff --git a/libbeat/docs/shared-autodiscover.asciidoc b/libbeat/docs/shared-autodiscover.asciidoc index 25b65323e69a..ca7947f301b6 100644 --- a/libbeat/docs/shared-autodiscover.asciidoc +++ b/libbeat/docs/shared-autodiscover.asciidoc @@ -180,6 +180,9 @@ The `kubernetes` autodiscover provider has the following configuration settings: `host`:: (Optional) Identify the node where {beatname_lc} is running in case it cannot be accurately detected, as when running {beatname_lc} in host network mode. +`namespace`:: (Optional) Select the namespace from which to collect the + metadata. If it is not set, the processor collects metadata from all + namespaces. It is unset by default. `kube_config`:: (Optional) Use given config file as configuration for Kubernetes client. From 99d09ea09711ff0ce302d298d1ffd6f1c456eab4 Mon Sep 17 00:00:00 2001 From: Tudor Golubenco Date: Fri, 1 Feb 2019 15:47:37 +0100 Subject: [PATCH 58/66] Add rpm packaging rebase (#10429) * Add RPM packages support to the package dataset --- .travis.yml | 1 + auditbeat/Dockerfile | 1 + x-pack/auditbeat/magefile.go | 86 +++++ .../module/system/package/_meta/docs.asciidoc | 4 +- .../module/system/package/package.go | 8 +- .../module/system/package/package_windows.go | 2 +- .../module/system/package/rpm_common_test.go | 69 ++++ .../module/system/package/rpm_linux.go | 302 ++++++++++++++++++ .../module/system/package/rpm_linux_test.go | 38 +++ .../module/system/package/rpm_others.go | 14 + .../auditbeat/tests/system/test_metricsets.py | 4 +- 11 files changed, 521 insertions(+), 8 deletions(-) create mode 100644 x-pack/auditbeat/module/system/package/rpm_common_test.go create mode 100644 x-pack/auditbeat/module/system/package/rpm_linux.go create mode 100644 x-pack/auditbeat/module/system/package/rpm_linux_test.go create mode 100644 x-pack/auditbeat/module/system/package/rpm_others.go diff --git a/.travis.yml b/.travis.yml index 7ea410b0bfe6..3bd86777f5ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -183,6 +183,7 @@ addons: - xsltproc - libxml2-utils - libsystemd-journal-dev + - librpm-dev before_install: - python --version diff --git a/auditbeat/Dockerfile b/auditbeat/Dockerfile index 25d13f15e115..905e23748d16 100644 --- a/auditbeat/Dockerfile +++ b/auditbeat/Dockerfile @@ -5,6 +5,7 @@ RUN \ && apt-get install -y --no-install-recommends \ python-pip \ virtualenv \ + librpm-dev \ && rm -rf /var/lib/apt/lists/* RUN pip install --upgrade pip diff --git a/x-pack/auditbeat/magefile.go b/x-pack/auditbeat/magefile.go index b2c8ac9e8b72..af8e08f1957a 100644 --- a/x-pack/auditbeat/magefile.go +++ b/x-pack/auditbeat/magefile.go @@ -12,6 +12,8 @@ import ( "time" "github.com/magefile/mage/mg" + "github.com/magefile/mage/sh" + "github.com/pkg/errors" auditbeat "github.com/elastic/beats/auditbeat/scripts/mage" "github.com/elastic/beats/dev-tools/mage" @@ -20,6 +22,7 @@ import ( func init() { mage.BeatDescription = "Audit the activities of users and processes on your system." mage.BeatLicense = "Elastic License" + mage.Platforms = mage.Platforms.Filter("!linux/ppc64 !linux/mips64") } // Aliases provides compatibility with CI while we transition all Beats @@ -36,6 +39,9 @@ func Build() error { // GolangCrossBuild build the Beat binary inside of the golang-builder. // Do not use directly, use crossBuild instead. func GolangCrossBuild() error { + if d, ok := deps[mage.Platform.Name]; ok { + mg.Deps(d) + } return mage.GolangCrossBuild(mage.DefaultGolangCrossBuildArgs()) } @@ -173,3 +179,83 @@ func PythonIntegTest(ctx context.Context) error { return mage.PythonNoseTest(mage.DefaultPythonTestIntegrationArgs()) }) } + +// ----------------------------------------------------------------------------- +// - Install the librpm-dev package +var ( + deps = map[string]func() error{ + "linux/386": installLinux386, + "linux/amd64": installLinuxAMD64, + "linux/arm64": installLinuxARM64, + "linux/armv5": installLinuxARMLE, + "linux/armv6": installLinuxARMLE, + "linux/armv7": installLinuxARMHF, + "linux/mips": installLinuxMIPS, + "linux/mipsle": installLinuxMIPSLE, + "linux/mips64le": installLinuxMIPS64LE, + "linux/ppc64le": installLinuxPPC64LE, + "linux/s390x": installLinuxS390X, + + //"linux/ppc64": installLinuxPpc64, + //"linux/mips64": installLinuxMips64, + } +) + +const ( + librpmDevPkgName = "librpm-dev" +) + +func installLinuxAMD64() error { + return installDependencies(librpmDevPkgName, "") +} + +func installLinuxARM64() error { + return installDependencies(librpmDevPkgName+":arm64", "arm64") +} + +func installLinuxARMHF() error { + return installDependencies(librpmDevPkgName+":armhf", "armhf") +} + +func installLinuxARMLE() error { + return installDependencies(librpmDevPkgName+":armel", "armel") +} + +func installLinux386() error { + return installDependencies(librpmDevPkgName+":i386", "i386") +} + +func installLinuxMIPS() error { + return installDependencies(librpmDevPkgName+":mips", "mips") +} + +func installLinuxMIPS64LE() error { + return installDependencies(librpmDevPkgName+":mips64el", "mips64el") +} + +func installLinuxMIPSLE() error { + return installDependencies(librpmDevPkgName+":mipsel", "mipsel") +} + +func installLinuxPPC64LE() error { + return installDependencies(librpmDevPkgName+":ppc64el", "ppc64el") +} + +func installLinuxS390X() error { + return installDependencies(librpmDevPkgName+":s390x", "s390x") +} + +func installDependencies(pkg, arch string) error { + if arch != "" { + err := sh.Run("dpkg", "--add-architecture", arch) + if err != nil { + return errors.Wrap(err, "error while adding architecture") + } + } + + if err := sh.Run("apt-get", "update"); err != nil { + return err + } + + return sh.Run("apt-get", "install", "-y", "--no-install-recommends", pkg) +} diff --git a/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc b/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc index 13e2be806a70..b1504e3aeb39 100644 --- a/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc +++ b/x-pack/auditbeat/module/system/package/_meta/docs.asciidoc @@ -4,5 +4,5 @@ experimental[] This is the `package` dataset of the system module. -It is implemented for Linux distributions using dpkg as their package manager, -and for Homebrew on macOS (Darwin). +It is implemented for Linux distributions using dpkg or rpm as their package +manager, and for Homebrew on macOS (Darwin). diff --git a/x-pack/auditbeat/module/system/package/package.go b/x-pack/auditbeat/module/system/package/package.go index 5030c521d1a7..b77e30854cb0 100644 --- a/x-pack/auditbeat/module/system/package/package.go +++ b/x-pack/auditbeat/module/system/package/package.go @@ -190,7 +190,7 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { ms.osFamily = osInfo.Family switch osInfo.Family { case redhat: - return nil, fmt.Errorf("RPM support is not yet implemented") + // ok case debian: if _, err := os.Stat(dpkgStatusFile); err != nil { return nil, errors.Wrapf(err, "error looking up %s", dpkgStatusFile) @@ -412,8 +412,10 @@ func (ms *MetricSet) savePackagesToDisk(packages []*Package) error { func getPackages(osFamily string) (packages []*Package, err error) { switch osFamily { case redhat: - // TODO: Implement RPM - err = errors.New("RPM not yet supported") + packages, err = listRPMPackages() + if err != nil { + err = errors.Wrap(err, "error getting RPM packages") + } case debian: packages, err = listDebPackages() if err != nil { diff --git a/x-pack/auditbeat/module/system/package/package_windows.go b/x-pack/auditbeat/module/system/package/package_windows.go index 6811cb41c601..498eea611111 100644 --- a/x-pack/auditbeat/module/system/package/package_windows.go +++ b/x-pack/auditbeat/module/system/package/package_windows.go @@ -4,7 +4,7 @@ // +build windows -package socket +package pkg import ( "fmt" diff --git a/x-pack/auditbeat/module/system/package/rpm_common_test.go b/x-pack/auditbeat/module/system/package/rpm_common_test.go new file mode 100644 index 000000000000..2e75d475811f --- /dev/null +++ b/x-pack/auditbeat/module/system/package/rpm_common_test.go @@ -0,0 +1,69 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !windows + +package pkg + +import ( + "fmt" + "os/exec" + "strconv" + "strings" + "time" +) + +func rpmPackagesByExec() ([]*Package, error) { + format := "%{NAME}|%{VERSION}|%{RELEASE}|%{ARCH}|%{LICENSE}|%{INSTALLTIME}|%{SIZE}|%{URL}|%{SUMMARY}\\n" + out, err := exec.Command("/usr/bin/rpm", "--qf", format, "-qa").Output() + if err != nil { + return nil, fmt.Errorf("Error running rpm -qa command: %v", err) + } + + lines := strings.Split(string(out), "\n") + var packages []*Package + for _, line := range lines { + if len(strings.TrimSpace(line)) == 0 { + continue + } + words := strings.SplitN(line, "|", 9) + if len(words) < 9 { + return nil, fmt.Errorf("line '%s' doesn't have enough elements", line) + } + pkg := Package{ + Name: words[0], + Version: words[1], + Release: words[2], + Arch: words[3], + License: words[4], + // install time - 5 + // size - 6 + URL: words[7], + Summary: words[8], + } + ts, err := strconv.ParseInt(words[5], 10, 64) + if err != nil { + return nil, fmt.Errorf("error converting %s to string: %v", words[5], err) + } + pkg.InstallTime = time.Unix(ts, 0) + + pkg.Size, err = strconv.ParseUint(words[6], 10, 64) + if err != nil { + return nil, fmt.Errorf("error converting %s to string: %v", words[6], err) + } + + // Avoid "(none)" in favor of empty strings + if pkg.URL == "(none)" { + pkg.URL = "" + } + if pkg.Arch == "(none)" { + pkg.Arch = "" + } + + packages = append(packages, &pkg) + + } + + return packages, nil +} diff --git a/x-pack/auditbeat/module/system/package/rpm_linux.go b/x-pack/auditbeat/module/system/package/rpm_linux.go new file mode 100644 index 000000000000..a1d395f54b1f --- /dev/null +++ b/x-pack/auditbeat/module/system/package/rpm_linux.go @@ -0,0 +1,302 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux,cgo + +package pkg + +import ( + "fmt" + "time" + "unsafe" + + "github.com/coreos/pkg/dlopen" +) + +/* +#include +#include + +#include +#include +#include +#include + +rpmts +my_rpmtsCreate(void *f) { + rpmts (*rpmtsCreate)(); + rpmtsCreate = (rpmts (*)())f; + + return rpmtsCreate(); +} + +int +my_rpmReadConfigFiles(void *f) { + int (*rpmReadConfigFiles)(const char*, const char*); + rpmReadConfigFiles = (int (*)(const char*, const char*))f; + return rpmReadConfigFiles(NULL, NULL); +} + +rpmdbMatchIterator +my_rpmtsInitIterator(void *f, rpmts ts) { + rpmdbMatchIterator (*rpmtsInitIterator)(const rpmts, rpmTag, const void*, size_t); + rpmtsInitIterator = (rpmdbMatchIterator (*)(const rpmts, rpmTag, const void*, size_t))f; + + return rpmtsInitIterator(ts, RPMDBI_PACKAGES, NULL, 0); +} + +Header +my_rpmdbNextIterator(void *f, rpmdbMatchIterator mi) { + Header (*rpmdbNextIterator)(rpmdbMatchIterator); + rpmdbNextIterator = (Header (*)(rpmdbMatchIterator))f; + + return rpmdbNextIterator(mi); +} + +Header +my_headerLink(void *f, Header h) { + Header (*headerLink)(Header); + headerLink = (Header (*)(Header))f; + + return headerLink(h); +} + +int +my_headerGetEntry(void *f, Header h, rpm_tag_t tag, char **p) { + int (*headerGetEntry)(Header, rpm_tag_t, rpm_tagtype_t*, rpm_data_t*, rpm_count_t*); + headerGetEntry = (int (*)(Header, rpm_tag_t, rpm_tagtype_t*, rpm_data_t*, rpm_count_t*))f; + + return headerGetEntry(h, tag, NULL, (void**)p, NULL); +} + +int +my_headerGetEntryInt(void *f, Header h, rpm_tag_t tag, int **p) { + int (*headerGetEntry)(Header, rpm_tag_t, rpm_tagtype_t*, rpm_data_t*, rpm_count_t*); + headerGetEntry = (int (*)(Header, rpm_tag_t, rpm_tagtype_t*, rpm_data_t*, rpm_count_t*))f; + + return headerGetEntry(h, tag, NULL, (void**)p, NULL); +} + +void +my_headerFree(void *f, Header h) { + Header (*headerFree)(Header); + headerFree = (Header (*)(Header))f; + + headerFree(h); +} + +void +my_rpmdbFreeIterator(void *f, rpmdbMatchIterator mi) { + rpmdbMatchIterator (*rpmdbFreeIterator)(rpmdbMatchIterator); + rpmdbFreeIterator = (rpmdbMatchIterator (*)(rpmdbMatchIterator))f; + + rpmdbFreeIterator(mi); +} + +void +my_rpmtsFree(void *f, rpmts ts) { + rpmts (*rpmtsFree)(rpmts); + rpmtsFree = (rpmts (*)(rpmts))f; + + rpmtsFree(ts); +}*/ +import "C" + +// Constants in sync with /usr/include/rpm/rpmtag.h +const ( + RPMTAG_NAME = 1000 + RPMTAG_VERSION = 1001 + RPMTAG_RELEASE = 1002 + RPMTAG_SUMMARY = 1004 + RPMTAG_LICENSE = 1014 + RPMTAG_URL = 1020 + RPMTAG_ARCH = 1022 + RPMTAG_SIZE = 1009 + RPMTAG_INSTALLTIME = 1008 +) + +type cFunctions struct { + rpmtsCreate unsafe.Pointer + rpmReadConfigFiles unsafe.Pointer + rpmtsInitIterator unsafe.Pointer + rpmdbNextIterator unsafe.Pointer + headerLink unsafe.Pointer + headerGetEntry unsafe.Pointer + headerFree unsafe.Pointer + rpmdbFreeIterator unsafe.Pointer + rpmtsFree unsafe.Pointer +} + +var cFun *cFunctions + +func dlopenCFunctions() (*cFunctions, error) { + var librpmNames = []string{ + "/usr/lib64/librpm.so", + } + var cFun cFunctions + + librpm, err := dlopen.GetHandle(librpmNames) + if err != nil { + return nil, err + } + + cFun.rpmtsCreate, err = librpm.GetSymbolPointer("rpmtsCreate") + if err != nil { + return nil, err + } + + cFun.rpmReadConfigFiles, err = librpm.GetSymbolPointer("rpmReadConfigFiles") + if err != nil { + return nil, err + } + + cFun.rpmtsInitIterator, err = librpm.GetSymbolPointer("rpmtsInitIterator") + if err != nil { + return nil, err + } + + cFun.rpmdbNextIterator, err = librpm.GetSymbolPointer("rpmdbNextIterator") + if err != nil { + return nil, err + } + + cFun.headerLink, err = librpm.GetSymbolPointer("headerLink") + if err != nil { + return nil, err + } + + cFun.headerGetEntry, err = librpm.GetSymbolPointer("headerGetEntry") + if err != nil { + return nil, err + } + + cFun.headerFree, err = librpm.GetSymbolPointer("headerFree") + if err != nil { + return nil, err + } + + cFun.rpmdbFreeIterator, err = librpm.GetSymbolPointer("rpmdbFreeIterator") + if err != nil { + return nil, err + } + + cFun.rpmtsFree, err = librpm.GetSymbolPointer("rpmtsFree") + if err != nil { + return nil, err + } + + return &cFun, nil +} + +func listRPMPackages() ([]*Package, error) { + if cFun == nil { + var err error + cFun, err = dlopenCFunctions() + if err != nil { + return nil, err + } + } + + rpmts := C.my_rpmtsCreate(cFun.rpmtsCreate) + if rpmts == nil { + return nil, fmt.Errorf("Failed to get rpmts") + } + defer C.my_rpmtsFree(cFun.rpmtsFree, rpmts) + res := C.my_rpmReadConfigFiles(cFun.rpmReadConfigFiles) + if int(res) != 0 { + return nil, fmt.Errorf("Error: %d", int(res)) + } + + mi := C.my_rpmtsInitIterator(cFun.rpmtsInitIterator, rpmts) + if mi == nil { + return nil, fmt.Errorf("Failed to get match iterator") + } + defer C.my_rpmdbFreeIterator(cFun.rpmdbFreeIterator, mi) + + var packages []*Package + for header := C.my_rpmdbNextIterator(cFun.rpmdbNextIterator, mi); header != nil; header = C.my_rpmdbNextIterator(cFun.rpmdbNextIterator, mi) { + + pkg, err := packageFromHeader(header, cFun) + if err != nil { + return nil, err + } + + packages = append(packages, pkg) + } + + return packages, nil +} + +func packageFromHeader(header C.Header, cFun *cFunctions) (*Package, error) { + + header = C.my_headerLink(cFun.headerLink, header) + if header == nil { + return nil, fmt.Errorf("Error calling headerLink") + } + defer C.my_headerFree(cFun.headerFree, header) + + pkg := Package{} + + var name *C.char + res := C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_NAME, &name) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(name): %d", res) + } + pkg.Name = C.GoString(name) + + var version *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_VERSION, &version) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(version): %d", res) + } + pkg.Version = C.GoString(version) + + var release *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_RELEASE, &release) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(release): %d", res) + } + pkg.Release = C.GoString(release) + + var license *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_LICENSE, &license) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(license): %d", res) + } + pkg.License = C.GoString(license) + + var arch *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_ARCH, &arch) + if res == 1 { // not always successful + pkg.Arch = C.GoString(arch) + } + + var url *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_URL, &url) + if res == 1 { // not always successful + pkg.URL = C.GoString(url) + } + + var summary *C.char + res = C.my_headerGetEntry(cFun.headerGetEntry, header, RPMTAG_SUMMARY, &summary) + if res == 1 { // not always successful + pkg.Summary = C.GoString(summary) + } + + var size *C.int + res = C.my_headerGetEntryInt(cFun.headerGetEntry, header, RPMTAG_SIZE, &size) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(size): %d", res) + } + pkg.Size = uint64(*size) + + var installTime *C.int + res = C.my_headerGetEntryInt(cFun.headerGetEntry, header, RPMTAG_INSTALLTIME, &installTime) + if res != 1 { + return nil, fmt.Errorf("Failed to call headerGetEntry(installTime): %d", res) + } + pkg.InstallTime = time.Unix(int64(*installTime), 0) + + return &pkg, nil +} diff --git a/x-pack/auditbeat/module/system/package/rpm_linux_test.go b/x-pack/auditbeat/module/system/package/rpm_linux_test.go new file mode 100644 index 000000000000..989fb7408764 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/rpm_linux_test.go @@ -0,0 +1,38 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build linux,cgo + +package pkg + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRPMPackages(t *testing.T) { + os, err := getOS() + if err != nil { + t.Fatal(err) + } + + if os.Family != "redhat" { + t.Skip("RPM test only on Redhat systems") + } + + // Control using the exec command + packagesExpected, err := rpmPackagesByExec() + if err != nil { + t.Fatal(err) + } + + packages, err := listRPMPackages() + if err != nil { + t.Fatal(err) + } + + assert.EqualValues(t, packagesExpected, packages) + +} diff --git a/x-pack/auditbeat/module/system/package/rpm_others.go b/x-pack/auditbeat/module/system/package/rpm_others.go new file mode 100644 index 000000000000..8dd8462197b5 --- /dev/null +++ b/x-pack/auditbeat/module/system/package/rpm_others.go @@ -0,0 +1,14 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !linux !cgo +// +build !windows + +package pkg + +import "github.com/pkg/errors" + +func listRPMPackages() ([]*Package, error) { + return nil, errors.New("listing RPM packages is only supported on Linux") +} diff --git a/x-pack/auditbeat/tests/system/test_metricsets.py b/x-pack/auditbeat/tests/system/test_metricsets.py index ce45b0bbf9ba..0952eabc3829 100644 --- a/x-pack/auditbeat/tests/system/test_metricsets.py +++ b/x-pack/auditbeat/tests/system/test_metricsets.py @@ -41,8 +41,8 @@ def test_metricset_login(self): self.check_metricset("system", "login", COMMON_FIELDS + fields, config, warnings_allowed=True) @unittest.skipIf(sys.platform == "win32", "Not implemented for Windows") - @unittest.skipIf(sys.platform == "linux2" and platform.linux_distribution()[0] != "debian", - "Only implemented for Debian") + @unittest.skipIf(sys.platform == "linux2" and not (os.path.isdir("/var/lib/dpkg") or os.path.isdir("/var/lib/rpm")), + "Only implemented for dpkg and rpm") def test_metricset_package(self): """ package metricset collects information about installed packages on a system. From 4ea1e129b0d1a9d58f9c61544e5dad9a406427d7 Mon Sep 17 00:00:00 2001 From: Andrew Cholakian Date: Fri, 1 Feb 2019 08:50:32 -0600 Subject: [PATCH 59/66] [Heartbeat] Populate url.port field for http(s) fields. (#10467) The url.* ECS fields are used for all sorts of stuff. The golang `url` package doesn't infer the URL for URLs with the http(s) schemes, which means that there will be no port value for url.port for these common URLs. This patch explicitly fills in the value in these situations. This change also fixes some other tests by using an explicit port for TCP which is required in heartbeat. Additionally, it standardizes on the `uint16` type for port values which is common in the go ecosystem. --- heartbeat/monitors/wrappers/util.go | 10 +++++++++- heartbeat/monitors/wrappers/util_test.go | 9 ++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/heartbeat/monitors/wrappers/util.go b/heartbeat/monitors/wrappers/util.go index 9244ee72cec3..83778069d99e 100644 --- a/heartbeat/monitors/wrappers/util.go +++ b/heartbeat/monitors/wrappers/util.go @@ -58,7 +58,15 @@ func URLFields(u *url.URL) common.MapStr { } if u.Port() != "" { - fields["port"], _ = strconv.ParseUint(u.Port(), 10, 16) + // Returns a uint64 believe it or not. + val, _ := strconv.ParseUint(u.Port(), 10, 16) + fields["port"] = uint16(val) + } else { + if u.Scheme == "http" { + fields["port"] = uint16(80) + } else if u.Scheme == "https" { + fields["port"] = uint16(443) + } } if u.Path != "" { diff --git a/heartbeat/monitors/wrappers/util_test.go b/heartbeat/monitors/wrappers/util_test.go index ecb1bbeffff4..a374d4ac44b1 100644 --- a/heartbeat/monitors/wrappers/util_test.go +++ b/heartbeat/monitors/wrappers/util_test.go @@ -40,6 +40,7 @@ func TestURLFields(t *testing.T) { "full": "http://elastic.co", "scheme": "http", "domain": "elastic.co", + "port": uint16(80), }, }, { @@ -49,15 +50,17 @@ func TestURLFields(t *testing.T) { "full": "https://elastic.co", "scheme": "https", "domain": "elastic.co", + "port": uint16(443), }, }, { "fancy-proto", - "tcp+ssl://elastic.co", + "tcp+ssl://elastic.co:1234", common.MapStr{ - "full": "tcp+ssl://elastic.co", + "full": "tcp+ssl://elastic.co:1234", "scheme": "tcp+ssl", "domain": "elastic.co", + "port": uint16(1234), }, }, { @@ -67,7 +70,7 @@ func TestURLFields(t *testing.T) { "full": "tcp+ssl://myuser:%3Chidden%3E@elastic.co:65500/foo/bar?q=dosomething&x=y", "scheme": "tcp+ssl", "domain": "elastic.co", - "port": uint64(65500), + "port": uint16(65500), "path": "/foo/bar", "query": "q=dosomething&x=y", "username": "myuser", From ff0dead55697714172474c45b3aaa40e81e0425a Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Fri, 1 Feb 2019 08:19:04 -0700 Subject: [PATCH 60/66] Move convertPeriodToDuration and getRegions into aws.go (#10474) * move convertPeriodToDuration and getRegions into aws.go * Fix unit test --- x-pack/metricbeat/module/aws/aws.go | 92 ++++++++++++++++- x-pack/metricbeat/module/aws/aws_test.go | 81 +++++++++++++++ x-pack/metricbeat/module/aws/ec2/ec2.go | 101 ++----------------- x-pack/metricbeat/module/aws/ec2/ec2_test.go | 53 +--------- 4 files changed, 182 insertions(+), 145 deletions(-) create mode 100644 x-pack/metricbeat/module/aws/aws_test.go diff --git a/x-pack/metricbeat/module/aws/aws.go b/x-pack/metricbeat/module/aws/aws.go index 3ff2465a71a8..9b2f23cc43c5 100644 --- a/x-pack/metricbeat/module/aws/aws.go +++ b/x-pack/metricbeat/module/aws/aws.go @@ -4,7 +4,17 @@ package aws -import "github.com/elastic/beats/metricbeat/mb" +import ( + "strconv" + + awssdk "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/aws/defaults" + "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go-v2/service/ec2/ec2iface" + "github.com/pkg/errors" + + "github.com/elastic/beats/metricbeat/mb" +) // Config defines all required and optional parameters for aws metricsets type Config struct { @@ -18,6 +28,10 @@ type Config struct { // MetricSet is the base metricset for all aws metricsets type MetricSet struct { mb.BaseMetricSet + RegionsList []string + DurationString string + PeriodInSec int + AwsConfig *awssdk.Config } // ModuleName is the name of this module. @@ -44,5 +58,79 @@ func NewMetricSet(base mb.BaseMetricSet) (*MetricSet, error) { if err != nil { return nil, err } - return &MetricSet{BaseMetricSet: base}, nil + + awsConfig := defaults.Config() + awsCreds := awssdk.Credentials{ + AccessKeyID: config.AccessKeyID, + SecretAccessKey: config.SecretAccessKey, + } + if config.SessionToken != "" { + awsCreds.SessionToken = config.SessionToken + } + + awsConfig.Credentials = awssdk.StaticCredentialsProvider{ + Value: awsCreds, + } + + awsConfig.Region = config.DefaultRegion + + svcEC2 := ec2.New(awsConfig) + regionsList, err := getRegions(svcEC2) + if err != nil { + return nil, err + } + + // Calculate duration based on period + durationString, periodSec, err := convertPeriodToDuration(config.Period) + if err != nil { + return nil, err + } + + // Construct MetricSet + metricSet := MetricSet{ + BaseMetricSet: base, + RegionsList: regionsList, + DurationString: durationString, + PeriodInSec: periodSec, + AwsConfig: &awsConfig, + } + return &metricSet, nil +} + +func getRegions(svc ec2iface.EC2API) (regionsList []string, err error) { + input := &ec2.DescribeRegionsInput{} + req := svc.DescribeRegionsRequest(input) + output, err := req.Send() + if err != nil { + err = errors.Wrap(err, "Failed DescribeRegions") + return + } + for _, region := range output.Regions { + regionsList = append(regionsList, *region.RegionName) + } + return +} + +func convertPeriodToDuration(period string) (string, int, error) { + // Set starttime double the default frequency earlier than the endtime in order to make sure + // GetMetricDataRequest gets the latest data point for each metric. + numberPeriod, err := strconv.Atoi(period[0 : len(period)-1]) + if err != nil { + return "", 0, err + } + + unitPeriod := period[len(period)-1:] + switch unitPeriod { + case "s": + duration := "-" + strconv.Itoa(numberPeriod*2) + unitPeriod + return duration, numberPeriod, nil + case "m": + duration := "-" + strconv.Itoa(numberPeriod*2) + unitPeriod + periodInSec := numberPeriod * 60 + return duration, periodInSec, nil + default: + err = errors.New("invalid period in config. Please reset period in config") + duration := "-" + strconv.Itoa(numberPeriod*2) + "s" + return duration, numberPeriod, err + } } diff --git a/x-pack/metricbeat/module/aws/aws_test.go b/x-pack/metricbeat/module/aws/aws_test.go new file mode 100644 index 000000000000..b503690464a0 --- /dev/null +++ b/x-pack/metricbeat/module/aws/aws_test.go @@ -0,0 +1,81 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build !integration + +package aws + +import ( + "fmt" + "testing" + + awssdk "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go-v2/service/ec2/ec2iface" + "github.com/stretchr/testify/assert" +) + +// MockEC2Client struct is used for unit tests. +type MockEC2Client struct { + ec2iface.EC2API +} + +var regionName = "us-west-1" + +func (m *MockEC2Client) DescribeRegionsRequest(input *ec2.DescribeRegionsInput) ec2.DescribeRegionsRequest { + return ec2.DescribeRegionsRequest{ + Request: &awssdk.Request{ + Data: &ec2.DescribeRegionsOutput{ + Regions: []ec2.Region{ + { + RegionName: ®ionName, + }, + }, + }, + }, + } +} + +func TestGetRegions(t *testing.T) { + mockSvc := &MockEC2Client{} + regionsList, err := getRegions(mockSvc) + if err != nil { + fmt.Println("failed getRegions: ", err) + t.FailNow() + } + assert.Equal(t, 1, len(regionsList)) + assert.Equal(t, regionName, regionsList[0]) +} + +func TestConvertPeriodToDuration(t *testing.T) { + period1 := "300s" + duration1, periodSec1, err := convertPeriodToDuration(period1) + assert.NoError(t, nil, err) + assert.Equal(t, "-600s", duration1) + assert.Equal(t, 300, periodSec1) + + period2 := "30ss" + duration2, periodSec2, err := convertPeriodToDuration(period2) + assert.Error(t, err) + assert.Equal(t, "", duration2) + assert.Equal(t, 0, periodSec2) + + period3 := "10m" + duration3, periodSec3, err := convertPeriodToDuration(period3) + assert.NoError(t, nil, err) + assert.Equal(t, "-20m", duration3) + assert.Equal(t, 600, periodSec3) + + period4 := "30s" + duration4, periodSec4, err := convertPeriodToDuration(period4) + assert.NoError(t, nil, err) + assert.Equal(t, "-60s", duration4) + assert.Equal(t, 30, periodSec4) + + period5 := "60s" + duration5, periodSec5, err := convertPeriodToDuration(period5) + assert.NoError(t, nil, err) + assert.Equal(t, "-120s", duration5) + assert.Equal(t, 60, periodSec5) +} diff --git a/x-pack/metricbeat/module/aws/ec2/ec2.go b/x-pack/metricbeat/module/aws/ec2/ec2.go index 53157b85c0bb..e690cfc40036 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2.go @@ -6,11 +6,9 @@ package ec2 import ( "fmt" - "strconv" "time" awssdk "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/aws/defaults" "github.com/aws/aws-sdk-go-v2/service/cloudwatch" "github.com/aws/aws-sdk-go-v2/service/cloudwatch/cloudwatchiface" "github.com/aws/aws-sdk-go-v2/service/ec2" @@ -41,12 +39,7 @@ func init() { // interface methods except for Fetch. type MetricSet struct { *aws.MetricSet - moduleConfig *aws.Config - awsConfig *awssdk.Config - regionsList []string - durationString string - periodInSec int - logger *logp.Logger + logger *logp.Logger } // metricIDNameMap is a translating map between createMetricDataQuery id @@ -90,38 +83,9 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { return nil, errors.Wrap(err, "error creating aws metricset") } - // Get a list of regions - awsConfig := defaults.Config() - awsCreds := awssdk.Credentials{ - AccessKeyID: moduleConfig.AccessKeyID, - SecretAccessKey: moduleConfig.SecretAccessKey, - } - if moduleConfig.SessionToken != "" { - awsCreds.SessionToken = moduleConfig.SessionToken - } - - awsConfig.Credentials = awssdk.StaticCredentialsProvider{ - Value: awsCreds, - } - - awsConfig.Region = moduleConfig.DefaultRegion - svcEC2 := ec2.New(awsConfig) - regionsList, err := getRegions(svcEC2) - if err != nil { - err = errors.Wrap(err, "getRegions failed") - ec2Logger.Error(err.Error()) - } - - // Calculate duration based on period - durationString, periodSec, err := convertPeriodToDuration(moduleConfig.Period) - if err != nil { - ec2Logger.Error(err.Error()) - return nil, err - } - // Check if period is set to be multiple of 60s or 300s - remainder300 := periodSec % 300 - remainder60 := periodSec % 60 + remainder300 := metricSet.PeriodInSec % 300 + remainder60 := metricSet.PeriodInSec % 60 if remainder300 != 0 || remainder60 != 0 { err := errors.New("period needs to be set to 60s (or a multiple of 60s) if detailed monitoring is " + "enabled for EC2 instances or set to 300s (or a multiple of 300s) if EC2 instances has basic monitoring. " + @@ -130,13 +94,8 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { } return &MetricSet{ - MetricSet: metricSet, - moduleConfig: &moduleConfig, - awsConfig: &awsConfig, - regionsList: regionsList, - durationString: durationString, - periodInSec: periodSec, - logger: ec2Logger, + MetricSet: metricSet, + logger: ec2Logger, }, nil } @@ -144,9 +103,9 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { // format. It publishes the event which is then forwarded to the output. In case // of an error set the Error field of mb.Event or simply call report.Error(). func (m *MetricSet) Fetch(report mb.ReporterV2) { - for _, regionName := range m.regionsList { - m.awsConfig.Region = regionName - svcEC2 := ec2.New(*m.awsConfig) + for _, regionName := range m.MetricSet.RegionsList { + m.MetricSet.AwsConfig.Region = regionName + svcEC2 := ec2.New(*m.MetricSet.AwsConfig) instanceIDs, instancesOutputs, err := getInstancesPerRegion(svcEC2) if err != nil { err = errors.Wrap(err, "getInstancesPerRegion failed, skipping region "+regionName) @@ -155,13 +114,13 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) { continue } - svcCloudwatch := cloudwatch.New(*m.awsConfig) + svcCloudwatch := cloudwatch.New(*m.MetricSet.AwsConfig) for _, instanceID := range instanceIDs { init := true getMetricDataOutput := &cloudwatch.GetMetricDataOutput{NextToken: nil} for init || getMetricDataOutput.NextToken != nil { init = false - output, err := getMetricDataPerRegion(m.durationString, m.periodInSec, instanceID, getMetricDataOutput.NextToken, svcCloudwatch) + output, err := getMetricDataPerRegion(m.MetricSet.DurationString, m.MetricSet.PeriodInSec, instanceID, getMetricDataOutput.NextToken, svcCloudwatch) if err != nil { err = errors.Wrap(err, "getMetricDataPerRegion failed, skipping region "+regionName+" for instance "+instanceID) m.logger.Error(err.Error()) @@ -187,20 +146,6 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) { } } -func getRegions(svc ec2iface.EC2API) (regionsList []string, err error) { - input := &ec2.DescribeRegionsInput{} - req := svc.DescribeRegionsRequest(input) - output, err := req.Send() - if err != nil { - err = errors.Wrap(err, "Failed DescribeRegions") - return - } - for _, region := range output.Regions { - regionsList = append(regionsList, *region.RegionName) - } - return -} - func createCloudWatchEvents(getMetricDataOutput *cloudwatch.GetMetricDataOutput, instanceID string, instanceOutput ec2.Instance, regionName string) (event mb.Event, info string, err error) { event.Service = metricsetName event.RootFields = common.MapStr{} @@ -313,32 +258,6 @@ func getInstancesPerRegion(svc ec2iface.EC2API) (instanceIDs []string, instances return } -func convertPeriodToDuration(period string) (string, int, error) { - // Amazon EC2 sends metrics to Amazon CloudWatch with 5-minute default frequency. - // If detailed monitoring is enabled, then data will be available in 1-minute period. - // Set starttime double the default frequency earlier than the endtime in order to make sure - // GetMetricDataRequest gets the latest data point for each metric. - numberPeriod, err := strconv.Atoi(period[0 : len(period)-1]) - if err != nil { - return "", 0, err - } - - unitPeriod := period[len(period)-1:] - switch unitPeriod { - case "s": - duration := "-" + strconv.Itoa(numberPeriod*2) + unitPeriod - return duration, numberPeriod, nil - case "m": - duration := "-" + strconv.Itoa(numberPeriod*2) + unitPeriod - periodInSec := numberPeriod * 60 - return duration, periodInSec, nil - default: - err = errors.New("invalid period in config. Please reset period in config") - duration := "-" + strconv.Itoa(numberPeriod*2) + "s" - return duration, numberPeriod, err - } -} - func getMetricDataPerRegion(durationString string, periodInSec int, instanceID string, nextToken *string, svc cloudwatchiface.CloudWatchAPI) (*cloudwatch.GetMetricDataOutput, error) { endTime := time.Now() duration, err := time.ParseDuration(durationString) diff --git a/x-pack/metricbeat/module/aws/ec2/ec2_test.go b/x-pack/metricbeat/module/aws/ec2/ec2_test.go index c563ed18567d..317b80d02286 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2_test.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2_test.go @@ -15,7 +15,6 @@ import ( "github.com/aws/aws-sdk-go-v2/service/cloudwatch/cloudwatchiface" "github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/aws/aws-sdk-go-v2/service/ec2/ec2iface" - "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/elastic/beats/metricbeat/mb" @@ -117,17 +116,6 @@ func (m *MockCloudWatchClient) GetMetricDataRequest(input *cloudwatch.GetMetricD } } -func TestGetRegions(t *testing.T) { - mockSvc := &MockEC2Client{} - regionsList, err := getRegions(mockSvc) - if err != nil { - fmt.Println("failed getRegions: ", err) - t.FailNow() - } - assert.Equal(t, 1, len(regionsList)) - assert.Equal(t, regionName, regionsList[0]) -} - func TestGetInstanceIDs(t *testing.T) { mockSvc := &MockEC2Client{} instanceIDs, instancesOutputs, err := getInstancesPerRegion(mockSvc) @@ -170,39 +158,6 @@ func TestGetMetricDataPerRegion(t *testing.T) { assert.Equal(t, 0.0, getMetricDataOutput.MetricDataResults[3].Values[0]) } -func TestConvertPeriodToDuration(t *testing.T) { - period1 := "300s" - duration1, periodSec1, err := convertPeriodToDuration(period1) - assert.NoError(t, nil, err) - assert.Equal(t, "-600s", duration1) - assert.Equal(t, 300, periodSec1) - - period2 := "30ss" - duration2, periodSec2, err := convertPeriodToDuration(period2) - expectedErr := errors.New("Invaid period in config. Please reset period in config.") - assert.Error(t, expectedErr, err) - assert.Equal(t, "", duration2) - assert.Equal(t, 0, periodSec2) - - period3 := "10m" - duration3, periodSec3, err := convertPeriodToDuration(period3) - assert.NoError(t, nil, err) - assert.Equal(t, "-20m", duration3) - assert.Equal(t, 600, periodSec3) - - period4 := "30s" - duration4, periodSec4, err := convertPeriodToDuration(period4) - assert.NoError(t, nil, err) - assert.Equal(t, "-60s", duration4) - assert.Equal(t, 30, periodSec4) - - period5 := "60s" - duration5, periodSec5, err := convertPeriodToDuration(period5) - assert.NoError(t, nil, err) - assert.Equal(t, "-120s", duration5) - assert.Equal(t, 60, periodSec5) -} - func TestCreateCloudWatchEvents(t *testing.T) { mockModuleConfig := aws.Config{ Period: "300s", @@ -235,13 +190,7 @@ func TestCreateCloudWatchEvents(t *testing.T) { assert.Equal(t, "i-123", instanceID) svcCloudwatchMock := &MockCloudWatchClient{} - //Calculate duration based on period - durationString, periodSec, err := convertPeriodToDuration(mockModuleConfig.Period) - assert.NoError(t, nil, err) - assert.Equal(t, "-600s", durationString) - assert.Equal(t, 300, periodSec) - - getMetricDataOutput, err := getMetricDataPerRegion(durationString, periodSec, instanceID, nil, svcCloudwatchMock) + getMetricDataOutput, err := getMetricDataPerRegion("-600s", 300, instanceID, nil, svcCloudwatchMock) assert.NoError(t, err) assert.Equal(t, 4, len(getMetricDataOutput.MetricDataResults)) assert.Equal(t, "cpu1", *getMetricDataOutput.MetricDataResults[0].Id) From 3813452ca984ba5823829c8e678ef22f3eb468b0 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Fri, 1 Feb 2019 16:56:11 +0100 Subject: [PATCH 61/66] Add `service.name` as an option to all Metricbeat modules (#10427) --- CHANGELOG.next.asciidoc | 1 + metricbeat/beater/metricbeat.go | 1 + metricbeat/docs/metricbeat-options.asciidoc | 7 +++++ metricbeat/mb/mb.go | 17 ++++++------ metricbeat/mb/module/options.go | 25 +++++++++++++++++ metricbeat/tests/system/test_config.py | 30 ++++++++++++++++++--- 6 files changed, 69 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 2e3aa7f784c2..9dbfba0c3aba 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -106,6 +106,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - mongodb.metrics.replication.executor.network_interface - php_fpm.process.request_uri - php_fpm.process.script +- Add `service.name` option to all modules to explicitly set `service.name` if it is unset. {pull}10427[10427] - Update a few elasticsearch.* fields to map to ECS. {pull}10350[10350] - Update a few logstash.* fields to map to ECS. {pull}10350[10350] - Update a few kibana.* fields to map to ECS. {pull}10350[10350] diff --git a/metricbeat/beater/metricbeat.go b/metricbeat/beater/metricbeat.go index a2eec746e9bf..7703720521c8 100644 --- a/metricbeat/beater/metricbeat.go +++ b/metricbeat/beater/metricbeat.go @@ -92,6 +92,7 @@ func DefaultCreator() beat.Creator { return Creator( WithModuleOptions( module.WithMetricSetInfo(), + module.WithServiceName(), ), ) } diff --git a/metricbeat/docs/metricbeat-options.asciidoc b/metricbeat/docs/metricbeat-options.asciidoc index 1228a39efade..10e75d025e6d 100644 --- a/metricbeat/docs/metricbeat-options.asciidoc +++ b/metricbeat/docs/metricbeat-options.asciidoc @@ -200,6 +200,13 @@ A list of processors to apply to the data generated by the metricset. See <> for information about specifying processors in your config. +[float] +==== `service.name` + +A name given by the user to the service the data is collected from. It can be +used for example to identify information collected from nodes of different +clusters with the same `service.type`. + [float] [[module-http-config-options]] === Standard HTTP config options diff --git a/metricbeat/mb/mb.go b/metricbeat/mb/mb.go index e3c19cfaaffb..17e835084bb2 100644 --- a/metricbeat/mb/mb.go +++ b/metricbeat/mb/mb.go @@ -306,14 +306,15 @@ func (b *BaseMetricSet) Registration() MetricSetRegistration { // the metricset fetches not only the predefined fields but add alls raw data under // the raw namespace to the event. type ModuleConfig struct { - Hosts []string `config:"hosts"` - Period time.Duration `config:"period" validate:"positive"` - Timeout time.Duration `config:"timeout" validate:"positive"` - Module string `config:"module" validate:"required"` - MetricSets []string `config:"metricsets"` - Enabled bool `config:"enabled"` - Raw bool `config:"raw"` - Query QueryParams `config:"query"` + Hosts []string `config:"hosts"` + Period time.Duration `config:"period" validate:"positive"` + Timeout time.Duration `config:"timeout" validate:"positive"` + Module string `config:"module" validate:"required"` + MetricSets []string `config:"metricsets"` + Enabled bool `config:"enabled"` + Raw bool `config:"raw"` + Query QueryParams `config:"query"` + ServiceName string `config:"service.name"` } func (c ModuleConfig) String() string { diff --git a/metricbeat/mb/module/options.go b/metricbeat/mb/module/options.go index cf5c7ac03ff9..e5d07667491b 100644 --- a/metricbeat/mb/module/options.go +++ b/metricbeat/mb/module/options.go @@ -20,6 +20,7 @@ package module import ( "time" + "github.com/elastic/beats/libbeat/common" "github.com/elastic/beats/metricbeat/mb" ) @@ -58,3 +59,27 @@ func WithEventModifier(modifier mb.EventModifier) Option { func WithMetricSetInfo() Option { return WithEventModifier(mb.AddMetricSetInfo) } + +// WithServiceName sets the `service.name` field of the event with the value +// given to the `service.name` setting in the module configuration. +func WithServiceName() Option { + return func(w *Wrapper) { + modifier := func(_, _ string, event *mb.Event) { + if event == nil { + return + } + serviceName := w.Module.Config().ServiceName + if serviceName == "" { + return + } + if event.RootFields == nil { + event.RootFields = common.MapStr{} + } else if current, err := event.RootFields.GetValue("service.name"); err == nil && current != "" { + // Already set by the metricset, don't overwrite + return + } + event.RootFields.Put("service.name", serviceName) + } + w.eventModifiers = append(w.eventModifiers, modifier) + } +} diff --git a/metricbeat/tests/system/test_config.py b/metricbeat/tests/system/test_config.py index 02030bccab09..f2ac414a68b4 100644 --- a/metricbeat/tests/system/test_config.py +++ b/metricbeat/tests/system/test_config.py @@ -1,11 +1,33 @@ import os -import metricbeat +from metricbeat import BaseTest import unittest from nose.plugins.attrib import attr import urllib2 import time -class ConfigTest(metricbeat.BaseTest): - def get_host(self): - return 'http://' + os.getenv('ES_HOST', 'localhost') + ':' + os.getenv('ES_PORT', '9200') +class ConfigTest(BaseTest): + def test_service_name(self): + """ + Test setting service name + """ + service_name = "testing" + self.render_config_template(modules=[{ + # Do it with any module that don't set the service name by itself + "name": "system", + "metricsets": ["cpu"], + "period": "5s", + "extras": { + "service.name": service_name, + }, + }]) + proc = self.start_beat() + self.wait_until(lambda: self.output_lines() > 0) + proc.check_kill_and_wait() + self.assert_no_logged_warnings() + + output = self.read_output_json() + event = output[0] + self.assert_fields_are_documented(event) + + self.assertEqual(service_name, event["service"]["name"]) From 652f4b09c5f4da51016a9c1b736e38064289be6f Mon Sep 17 00:00:00 2001 From: kaiyan-sheng Date: Fri, 1 Feb 2019 13:18:50 -0700 Subject: [PATCH 62/66] Fix Travis failing test in AWS module TestCreateCloudWatchEvents (#10498) In travis https://travis-ci.org/elastic/beats/jobs/487488964, it shows ec2_test.go is failing: > FAILURES: Package: github.com/elastic/beats/x-pack/metricbeat/module/aws/ec2 Test: TestCreateCloudWatchEvents panic: runtime error: invalid memory address or nil pointer dereference /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:792 +0x387 /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/runtime/panic.go:513 +0x1b9 /home/travis/gopath/src/github.com/elastic/beats/x-pack/metricbeat/module/aws/ec2/ec2.go:177 +0x545 /home/travis/gopath/src/github.com/elastic/beats/x-pack/metricbeat/module/aws/ec2/ec2_test.go:200 +0xc16 /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0xbf /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x35c I can reproduce it locally but somehow it passed Jenkins?! --- x-pack/metricbeat/module/aws/ec2/ec2_test.go | 40 +++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/x-pack/metricbeat/module/aws/ec2/ec2_test.go b/x-pack/metricbeat/module/aws/ec2/ec2_test.go index 317b80d02286..3353dedaf153 100644 --- a/x-pack/metricbeat/module/aws/ec2/ec2_test.go +++ b/x-pack/metricbeat/module/aws/ec2/ec2_test.go @@ -50,6 +50,14 @@ func (m *MockEC2Client) DescribeRegionsRequest(input *ec2.DescribeRegionsInput) } func (m *MockEC2Client) DescribeInstancesRequest(input *ec2.DescribeInstancesInput) ec2.DescribeInstancesRequest { + runningCode := int64(16) + coreCount := int64(1) + threadsPerCore := int64(1) + publicDNSName := "ec2-1-2-3-4.us-west-1.compute.amazonaws.com" + publicIP := "1.2.3.4" + privateDNSName := "ip-5-6-7-8.us-west-1.compute.internal" + privateIP := "5.6.7.8" + instance := ec2.Instance{ InstanceId: awssdk.String("i-123"), InstanceType: ec2.InstanceTypeT2Medium, @@ -57,6 +65,21 @@ func (m *MockEC2Client) DescribeInstancesRequest(input *ec2.DescribeInstancesInp AvailabilityZone: awssdk.String("us-west-1a"), }, ImageId: awssdk.String("image-123"), + State: &ec2.InstanceState{ + Name: ec2.InstanceStateNameRunning, + Code: &runningCode, + }, + Monitoring: &ec2.Monitoring{ + State: ec2.MonitoringStateDisabled, + }, + CpuOptions: &ec2.CpuOptions{ + CoreCount: &coreCount, + ThreadsPerCore: &threadsPerCore, + }, + PublicDnsName: &publicDNSName, + PublicIpAddress: &publicIP, + PrivateDnsName: &privateDNSName, + PrivateIpAddress: &privateIP, } return ec2.DescribeInstancesRequest{ Request: &awssdk.Request{ @@ -168,7 +191,6 @@ func TestCreateCloudWatchEvents(t *testing.T) { RootFields: common.MapStr{ "service": common.MapStr{"name": "ec2"}, "cloud": common.MapStr{ - "image": common.MapStr{"id": "image-123"}, "region": regionName, "provider": "ec2", "instance": common.MapStr{"id": "i-123"}, @@ -180,6 +202,21 @@ func TestCreateCloudWatchEvents(t *testing.T) { "cpu": common.MapStr{ "total": common.MapStr{"pct": 0.25}, }, + "instance": common.MapStr{ + "image": common.MapStr{"id": "image-123"}, + "core": common.MapStr{"count": int64(1)}, + "threads_per_core": int64(1), + "state": common.MapStr{"code": int64(16), "name": "running"}, + "monitoring": common.MapStr{"state": "disabled"}, + "public": common.MapStr{ + "dns_name": "ec2-1-2-3-4.us-west-1.compute.amazonaws.com", + "ip": "1.2.3.4", + }, + "private": common.MapStr{ + "dns_name": "ip-5-6-7-8.us-west-1.compute.internal", + "ip": "5.6.7.8", + }, + }, }, } svcEC2Mock := &MockEC2Client{} @@ -202,4 +239,5 @@ func TestCreateCloudWatchEvents(t *testing.T) { assert.Equal(t, "", info) assert.Equal(t, expectedEvent.RootFields, event.RootFields) assert.Equal(t, expectedEvent.MetricSetFields["cpu"], event.MetricSetFields["cpu"]) + assert.Equal(t, expectedEvent.MetricSetFields["instance"], event.MetricSetFields["instance"]) } From b3f0c31d8512426fc94d544dc00bfe9667e5a11e Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Fri, 1 Feb 2019 13:28:16 -0800 Subject: [PATCH 63/66] Ingest structured ES slow logs (#10447) This PR teaches the `elasticsearch/slowlog` fileset to ingest structured Elasticsearch search and indexing slow logs. This PR takes the same approach as https://github.com/elastic/beats/pull/10352, in that it creates an entrypoint pipeline, `pipeline.json`, that delegates further processing of a log entry depending on what it sees as the first character of the entry: - If the first character is `{`, it assumes the log line is structured as JSON and delegates further processing to `pipeline-json.json`. - Else, it assumes the log line is plaintext and delegates further processing to `pipeline-plaintext.json`. --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 31 ++++ .../module/elasticsearch/_meta/fields.yml | 11 ++ filebeat/module/elasticsearch/fields.go | 2 +- .../elasticsearch/slowlog/config/slowlog.yml | 2 +- .../slowlog/ingest/pipeline-json.json | 108 +++++++++++++ .../slowlog/ingest/pipeline-plaintext.json | 33 ++++ .../slowlog/ingest/pipeline.json | 147 ++++++++++-------- .../module/elasticsearch/slowlog/manifest.yml | 11 +- ...g_index_indexing_slowlog.log-expected.json | 6 +- .../test/es_index_indexing_slowlog-json.log | 2 + ...ex_indexing_slowlog-json.log-expected.json | 52 +++++++ .../test/es_index_search_slowlog-json.log | 3 + ...ndex_search_slowlog-json.log-expected.json | 65 ++++++++ .../slowlog/test/test.log-expected.json | 6 +- 15 files changed, 399 insertions(+), 81 deletions(-) create mode 100644 filebeat/module/elasticsearch/slowlog/ingest/pipeline-json.json create mode 100644 filebeat/module/elasticsearch/slowlog/ingest/pipeline-plaintext.json create mode 100644 filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log create mode 100644 filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log-expected.json create mode 100644 filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log create mode 100644 filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log-expected.json diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 9dbfba0c3aba..8a70e12d8d50 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -230,6 +230,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add convert_timezone to nginx module. {issue}9839[9839] {pull}10148[10148] - Add support for Percona in the `slowlog` fileset of `mysql` module. {issue}6665[6665] {pull}10227[10227] - Added support for ingesting structured Elasticsearch audit logs {pull}10352[10352] +- Added support for ingesting structured Elasticsearch slow logs {pull}10445[10445] *Heartbeat* diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index aea98291493c..8e7d5333596b 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4327,6 +4327,37 @@ elasticsearch Module +*`elasticsearch.component`*:: ++ +-- +type: keyword + +example: o.e.c.m.MetaDataCreateIndexService + +Elasticsearch component from where the log event originated + +-- + +*`elasticsearch.cluster.uuid`*:: ++ +-- +type: keyword + +example: GmvrbHlNTiSVYiPf8kxg9g + +UUID of the cluster + +-- + +*`elasticsearch.cluster.name`*:: ++ +-- +example: docker-cluster + +Name of the cluster + +-- + *`elasticsearch.node.id`*:: + -- diff --git a/filebeat/module/elasticsearch/_meta/fields.yml b/filebeat/module/elasticsearch/_meta/fields.yml index 3bfea37be8e0..aaeb1037eb18 100644 --- a/filebeat/module/elasticsearch/_meta/fields.yml +++ b/filebeat/module/elasticsearch/_meta/fields.yml @@ -7,6 +7,17 @@ type: group description: > fields: + - name: component + description: "Elasticsearch component from where the log event originated" + example: "o.e.c.m.MetaDataCreateIndexService" + type: keyword + - name: cluster.uuid + description: "UUID of the cluster" + example: "GmvrbHlNTiSVYiPf8kxg9g" + type: keyword + - name: cluster.name + description: "Name of the cluster" + example: "docker-cluster" - name: node.id description: "ID of the node" example: "DSiWcTyeThWtUXLB9J0BMw" diff --git a/filebeat/module/elasticsearch/fields.go b/filebeat/module/elasticsearch/fields.go index 9ec2b7b1d93c..9796731ed2e7 100644 --- a/filebeat/module/elasticsearch/fields.go +++ b/filebeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" } diff --git a/filebeat/module/elasticsearch/slowlog/config/slowlog.yml b/filebeat/module/elasticsearch/slowlog/config/slowlog.yml index 54c69f3c2450..bcacf308e095 100644 --- a/filebeat/module/elasticsearch/slowlog/config/slowlog.yml +++ b/filebeat/module/elasticsearch/slowlog/config/slowlog.yml @@ -6,7 +6,7 @@ paths: exclude_files: [".gz$"] multiline: - pattern: '^\[?[0-9]{4}-[0-9]{2}-[0-9]{2}' + pattern: '^(\[?[0-9]{4}-[0-9]{2}-[0-9]{2}|{)' negate: true match: after diff --git a/filebeat/module/elasticsearch/slowlog/ingest/pipeline-json.json b/filebeat/module/elasticsearch/slowlog/ingest/pipeline-json.json new file mode 100644 index 000000000000..b4dcca93b26e --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/ingest/pipeline-json.json @@ -0,0 +1,108 @@ +{ + "description": "Pipeline for parsing the Elasticsearch slow logs in JSON format.", + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ], + "processors": [ + { + "json": { + "field": "message", + "target_field": "elasticsearch.slowlog" + } + }, + { + "drop": { + "if": "ctx.elasticsearch.slowlog.type != 'index_indexing_slowlog' && ctx.elasticsearch.slowlog.type != 'index_search_slowlog'" + } + }, + { + "remove": { + "field": "elasticsearch.slowlog.type" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.level", + "target_field": "log.level" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.component", + "target_field": "elasticsearch.component" + } + }, + { + "dot_expander": { + "field": "cluster.name", + "path": "elasticsearch.slowlog" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.cluster.name", + "target_field": "elasticsearch.cluster.name" + } + }, + { + "dot_expander": { + "field": "node.name", + "path": "elasticsearch.slowlog" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.node.name", + "target_field": "elasticsearch.node.name" + } + }, + { + "dot_expander": { + "field": "cluster.uuid", + "path": "elasticsearch.slowlog" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.cluster.uuid", + "target_field": "elasticsearch.cluster.uuid", + "ignore_missing": true + } + }, + { + "dot_expander": { + "field": "node.id", + "path": "elasticsearch.slowlog" + } + }, + { + "rename": { + "field": "elasticsearch.slowlog.node.id", + "target_field": "elasticsearch.node.id", + "ignore_missing": true + } + }, + { + "grok": { + "field": "elasticsearch.slowlog.message", + "pattern_definitions" : { + "GREEDYMULTILINE" : "(.|\n)*", + "INDEXNAME": "[a-zA-Z0-9_.-]*" + }, + "patterns": [ + "(\\[%{INDEXNAME:elasticsearch.index.name}\\]\\[%{NUMBER:elasticsearch.shard.id}\\])?(%{SPACE})?(\\[%{INDEXNAME:elasticsearch.index.name}\\/%{DATA:elasticsearch.index.id}\\])?(%{SPACE})?%{SPACE}(took\\[%{DATA:elasticsearch.slowlog.took}\\],)?%{SPACE}(took_millis\\[%{NUMBER:elasticsearch.slowlog.duration:long}\\],)?%{SPACE}(type\\[%{DATA:elasticsearch.slowlog.type}\\],)?%{SPACE}(id\\[%{DATA:elasticsearch.slowlog.id}\\],)?%{SPACE}(routing\\[%{DATA:elasticsearch.slowlog.routing}\\],)?%{SPACE}(total_hits\\[%{NUMBER:elasticsearch.slowlog.total_hits:int}\\],)?%{SPACE}(types\\[%{DATA:elasticsearch.slowlog.types}\\],)?%{SPACE}(stats\\[%{DATA:elasticsearch.slowlog.stats}\\],)?%{SPACE}(search_type\\[%{DATA:elasticsearch.slowlog.search_type}\\],)?%{SPACE}(total_shards\\[%{NUMBER:elasticsearch.slowlog.total_shards:int}\\],)?%{SPACE}(source\\[%{GREEDYMULTILINE:elasticsearch.slowlog.source_query}\\])?,?%{SPACE}(extra_source\\[%{DATA:elasticsearch.slowlog.extra_source}\\])?,?" + ] + } + }, + { + "remove": { + "field": "elasticsearch.slowlog.message" + } + } + ] +} diff --git a/filebeat/module/elasticsearch/slowlog/ingest/pipeline-plaintext.json b/filebeat/module/elasticsearch/slowlog/ingest/pipeline-plaintext.json new file mode 100644 index 000000000000..cd3b23f40c99 --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/ingest/pipeline-plaintext.json @@ -0,0 +1,33 @@ +{ + "description": "Pipeline for parsing elasticsearch slow logs in plaintext format.", + "processors": [ + { + "grok": { + "field": "message", + "pattern_definitions": { + "GREEDYMULTILINE": "(.|\n)*", + "INDEXNAME": "[a-zA-Z0-9_.-]*" + }, + "patterns": [ + "\\[%{TIMESTAMP_ISO8601:elasticsearch.slowlog.timestamp}\\]\\[%{WORD:log.level}(%{SPACE})?\\]\\[%{DATA:elasticsearch.slowlog.logger}\\]%{SPACE}\\[%{WORD:elasticsearch.node.name}\\](%{SPACE})?(\\[%{INDEXNAME:elasticsearch.index.name}\\]\\[%{NUMBER:elasticsearch.shard.id}\\])?(%{SPACE})?(\\[%{INDEXNAME:elasticsearch.index.name}\\/%{DATA:elasticsearch.index.id}\\])?(%{SPACE})?%{SPACE}(took\\[%{DATA:elasticsearch.slowlog.took}\\],)?%{SPACE}(took_millis\\[%{NUMBER:elasticsearch.slowlog.duration:long}\\],)?%{SPACE}(type\\[%{DATA:elasticsearch.slowlog.type}\\],)?%{SPACE}(id\\[%{DATA:elasticsearch.slowlog.id}\\],)?%{SPACE}(routing\\[%{DATA:elasticsearch.slowlog.routing}\\],)?%{SPACE}(total_hits\\[%{NUMBER:elasticsearch.slowlog.total_hits:int}\\],)?%{SPACE}(types\\[%{DATA:elasticsearch.slowlog.types}\\],)?%{SPACE}(stats\\[%{DATA:elasticsearch.slowlog.stats}\\],)?%{SPACE}(search_type\\[%{DATA:elasticsearch.slowlog.search_type}\\],)?%{SPACE}(total_shards\\[%{NUMBER:elasticsearch.slowlog.total_shards:int}\\],)?%{SPACE}(source\\[%{GREEDYMULTILINE:elasticsearch.slowlog.source_query}\\])?,?%{SPACE}(extra_source\\[%{DATA:elasticsearch.slowlog.extra_source}\\])?,?" + ] + } + }, + { + "split": { + "if": "ctx.elasticsearch.slowlog?.stats != ''", + "field": "elasticsearch.slowlog.stats", + "separator": ",", + "ignore_missing": true + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] +} diff --git a/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json b/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json index 1981c3711f71..91756d80d516 100644 --- a/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json +++ b/filebeat/module/elasticsearch/slowlog/ingest/pipeline.json @@ -1,70 +1,81 @@ { - "description": "Pipeline for parsing elasticsearch slowlog logs", - "processors": [ - { - "rename": { - "field": "@timestamp", - "target_field": "event.created" - } - }, - { - "grok": { - "field": "message", - "pattern_definitions" : { - "GREEDYMULTILINE" : "(.|\n)*", - "INDEXNAME": "[a-zA-Z0-9_.-]*" - }, - "patterns": [ - "\\[%{TIMESTAMP_ISO8601:elasticsearch.slowlog.timestamp}\\]\\[%{WORD:log.level}(%{SPACE})?\\]\\[%{DATA:elasticsearch.slowlog.logger}\\]%{SPACE}\\[%{WORD:elasticsearch.node.name}\\](%{SPACE})?(\\[%{INDEXNAME:elasticsearch.index.name}\\]\\[%{NUMBER:elasticsearch.shard.id}\\])?(%{SPACE})?(\\[%{INDEXNAME:elasticsearch.index.name}\\/%{DATA:elasticsearch.index.id}\\])?(%{SPACE})?%{SPACE}(took\\[%{DATA:elasticsearch.slowlog.took}\\],)?%{SPACE}(took_millis\\[%{NUMBER:temp.duration:long}\\],)?%{SPACE}(type\\[%{DATA:elasticsearch.slowlog.type}\\],)?%{SPACE}(id\\[%{DATA:elasticsearch.slowlog.id}\\],)?%{SPACE}(routing\\[%{DATA:elasticsearch.slowlog.routing}\\],)?%{SPACE}(total_hits\\[%{NUMBER:elasticsearch.slowlog.total_hits:int}\\],)?%{SPACE}(types\\[%{DATA:elasticsearch.slowlog.types}\\],)?%{SPACE}(stats\\[%{DATA:elasticsearch.slowlog.stats}\\],)?%{SPACE}(search_type\\[%{DATA:elasticsearch.slowlog.search_type}\\],)?%{SPACE}(total_shards\\[%{NUMBER:elasticsearch.slowlog.total_shards:int}\\],)?%{SPACE}(source\\[%{GREEDYMULTILINE:elasticsearch.slowlog.source_query}\\])?,?%{SPACE}(extra_source\\[%{DATA:elasticsearch.slowlog.extra_source}\\])?,?" - ] - } - }, - { - "split": { - "if": "ctx.elasticsearch.slowlog?.stats != ''", - "field": "elasticsearch.slowlog.stats", - "separator": ",", - "ignore_missing": true - } - }, - { - "date": { - "field": "elasticsearch.slowlog.timestamp", - "target_field": "@timestamp", - "formats": [ - "ISO8601" - ], - {< if .convert_timezone >}"timezone": "{{ event.timezone }}",{< end >} - "ignore_failure": true - } - }, - { - "remove": { - "field": [ - "elasticsearch.slowlog.timestamp" - ] - } - }, - - { - "script": { - "lang": "painless", - "source": "ctx.event.duration = Math.round(ctx.temp.duration * params.scale)", - "params": { "scale": 1000000 }, - "if": "ctx.temp?.duration != null" - } - }, - { - "remove": { - "field": "temp.duration", - "ignore_missing": true - } - } - ], - "on_failure" : [{ - "set" : { - "field" : "error.message", - "value" : "{{ _ingest.on_failure_message }}" - } - }] + "description": "Pipeline for parsing elasticsearch slow logs.", + "processors": [ + { + "rename": { + "field": "@timestamp", + "target_field": "event.created" + } + }, + { + "grok": { + "field": "message", + "patterns": [ + "^%{CHAR:first_char}" + ], + "pattern_definitions": { + "CHAR": "." + } + } + }, + { + "pipeline": { + "if": "ctx.first_char != '{'", + "name": "{< IngestPipeline "pipeline-plaintext" >}" + } + }, + { + "pipeline": { + "if": "ctx.first_char == '{'", + "name": "{< IngestPipeline "pipeline-json" >}" + } + }, + { + "date": { + "field": "elasticsearch.slowlog.timestamp", + "target_field": "@timestamp", + "formats": [ + "ISO8601" + ], + {< if .convert_timezone >}"timezone": "{{ event.timezone }}",{< end >} + "ignore_failure": true + } + }, + { + "remove": { + "field": "elasticsearch.slowlog.timestamp" + } + }, + { + "script": { + "lang": "painless", + "source": "ctx.event.duration = Math.round(ctx.elasticsearch.slowlog.duration * params.scale)", + "params": { + "scale": 1000000 + }, + "if": "ctx.elasticsearch.slowlog?.duration != null" + } + }, + { + "remove": { + "field": "elasticsearch.slowlog.duration", + "ignore_missing": true + } + }, + { + "remove": { + "field": [ + "first_char" + ] + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] } diff --git a/filebeat/module/elasticsearch/slowlog/manifest.yml b/filebeat/module/elasticsearch/slowlog/manifest.yml index 904b5db5ef63..0e839abd39dd 100644 --- a/filebeat/module/elasticsearch/slowlog/manifest.yml +++ b/filebeat/module/elasticsearch/slowlog/manifest.yml @@ -5,12 +5,18 @@ var: default: - /var/log/elasticsearch/*_index_search_slowlog.log - /var/log/elasticsearch/*_index_indexing_slowlog.log + - /var/log/elasticsearch/*_index_search_slowlog.json + - /var/log/elasticsearch/*_index_indexing_slowlog.json os.darwin: - /usr/local/var/lib/elasticsearch/*_index_search_slowlog.log - /usr/local/var/lib/elasticsearch/*_index_indexing_slowlog.log + - /usr/local/var/lib/elasticsearch/*_index_search_slowlog.json + - /usr/local/var/lib/elasticsearch/*_index_indexing_slowlog.json os.windows: - c:/ProgramData/Elastic/Elasticsearch/logs/*_index_search_slowlog.log - c:/ProgramData/Elastic/Elasticsearch/logs/*_index_indexing_slowlog.log + - c:/ProgramData/Elastic/Elasticsearch/logs/*_index_search_slowlog.json + - c:/ProgramData/Elastic/Elasticsearch/logs/*_index_indexing_slowlog.json - name: convert_timezone default: false # if ES < 6.1.0, this flag switches to false automatically when evaluating the @@ -19,5 +25,8 @@ var: version: 6.1.0 value: false -ingest_pipeline: ingest/pipeline.json +ingest_pipeline: + - ingest/pipeline.json + - ingest/pipeline-plaintext.json + - ingest/pipeline-json.json input: config/slowlog.yml diff --git a/filebeat/module/elasticsearch/slowlog/test/auditlog_index_indexing_slowlog.log-expected.json b/filebeat/module/elasticsearch/slowlog/test/auditlog_index_indexing_slowlog.log-expected.json index 32dda026a239..e5d67738dfca 100644 --- a/filebeat/module/elasticsearch/slowlog/test/auditlog_index_indexing_slowlog.log-expected.json +++ b/filebeat/module/elasticsearch/slowlog/test/auditlog_index_indexing_slowlog.log-expected.json @@ -74,7 +74,6 @@ "elasticsearch.slowlog.id": "s01HZ2QBk9jw4gtgaFtn", "elasticsearch.slowlog.logger": "index.indexing.slowlog.index", "elasticsearch.slowlog.routing": "", - "elasticsearch.slowlog.source_query": "\n{\n \"@timestamp\":\"2018-07-04T21:27:30.730Z\",\n \"metricset\":{\n \"name\":\"network\",\n \"module\":\"system\",\n \"rtt\":7264},\n \"system\":{\n \"network\":{\n \"name\":\"lo0\",\n \"in\":{\n \"errors\":0,\n \"dropped\":0,\n \"bytes\":77666873,\n \"packets\":244595},\n \"out\":{\n \"packets\":244595,\n \"bytes\":77666873,\n \"errors\":0,\n \"dropped\":0\n }\n }\n },\n \"beat\":{\n \"name\":\"Rados-MacBook-Pro.local\",\n \"hostname\":\"Rados-MacBook-Pro.local\",\n \"version\":\"6.3.0\"\n },\n \"host\":{\n \"name\":\"Rados-MacBook-Pro.local\"\n }\n }", "elasticsearch.slowlog.took": "1.7ms", "elasticsearch.slowlog.type": "doc", "event.dataset": "elasticsearch.slowlog", @@ -82,12 +81,9 @@ "event.module": "elasticsearch", "fileset.name": "slowlog", "input.type": "log", - "log.flags": [ - "multiline" - ], "log.level": "INFO", "log.offset": 1817, - "message": "[2018-07-04T21:51:30,411][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.7ms], took_millis[1], type[doc], id[s01HZ2QBk9jw4gtgaFtn], routing[], source[\n{\n \"@timestamp\":\"2018-07-04T21:27:30.730Z\",\n \"metricset\":{\n \"name\":\"network\",\n \"module\":\"system\",\n \"rtt\":7264},\n \"system\":{\n \"network\":{\n \"name\":\"lo0\",\n \"in\":{\n \"errors\":0,\n \"dropped\":0,\n \"bytes\":77666873,\n \"packets\":244595},\n \"out\":{\n \"packets\":244595,\n \"bytes\":77666873,\n \"errors\":0,\n \"dropped\":0\n }\n }\n },\n \"beat\":{\n \"name\":\"Rados-MacBook-Pro.local\",\n \"hostname\":\"Rados-MacBook-Pro.local\",\n \"version\":\"6.3.0\"\n },\n \"host\":{\n \"name\":\"Rados-MacBook-Pro.local\"\n }\n }]", + "message": "[2018-07-04T21:51:30,411][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.7ms], took_millis[1], type[doc], id[s01HZ2QBk9jw4gtgaFtn], routing[], source[", "service.type": "elasticsearch" }, { diff --git a/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log b/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log new file mode 100644 index 000000000000..2fff1458a156 --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log @@ -0,0 +1,2 @@ +{"type": "index_indexing_slowlog", "timestamp": "2019-01-29T08:35:54,170+0100", "level": "WARN", "component": "i.i.s.index", "cluster.name": "distribution_run", "node.name": "node-0", "cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", "node.id": "U7rdLkcqR9eRvOiyLmr_qQ", "message": "[index1/PJlGJFFURIO1zIboktQMUw] took[4.6ms], took_millis[4], type[_doc], id[1], routing[], source[{\"somefield\":\"somevalue\"}]" } +{"type": "index_indexing_slowlog", "timestamp": "2019-01-29T08:35:58,359+0100", "level": "WARN", "component": "i.i.s.index", "cluster.name": "distribution_run", "node.name": "node-0", "cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", "node.id": "U7rdLkcqR9eRvOiyLmr_qQ", "message": "[index1/PJlGJFFURIO1zIboktQMUw] took[803micros], took_millis[0], type[_doc], id[2], routing[], source[{\"somefield\":\"somevalue\"}]" } diff --git a/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log-expected.json b/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log-expected.json new file mode 100644 index 000000000000..74de3b8a2037 --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/test/es_index_indexing_slowlog-json.log-expected.json @@ -0,0 +1,52 @@ +[ + { + "@timestamp": "2019-01-29T07:35:54.170Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "distribution_run", + "elasticsearch.cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", + "elasticsearch.component": "i.i.s.index", + "elasticsearch.index.id": "PJlGJFFURIO1zIboktQMUw", + "elasticsearch.index.name": "index1", + "elasticsearch.node.id": "U7rdLkcqR9eRvOiyLmr_qQ", + "elasticsearch.node.name": "node-0", + "elasticsearch.slowlog.id": "1", + "elasticsearch.slowlog.routing": "", + "elasticsearch.slowlog.source_query": "{\"somefield\":\"somevalue\"}", + "elasticsearch.slowlog.took": "4.6ms", + "elasticsearch.slowlog.type": "_doc", + "event.dataset": "elasticsearch.slowlog", + "event.duration": 4000000, + "event.module": "elasticsearch", + "fileset.name": "slowlog", + "input.type": "log", + "log.level": "WARN", + "log.offset": 0, + "message": "{\"type\": \"index_indexing_slowlog\", \"timestamp\": \"2019-01-29T08:35:54,170+0100\", \"level\": \"WARN\", \"component\": \"i.i.s.index\", \"cluster.name\": \"distribution_run\", \"node.name\": \"node-0\", \"cluster.uuid\": \"oqKkg2eoQh2P_KrKliI3DA\", \"node.id\": \"U7rdLkcqR9eRvOiyLmr_qQ\", \"message\": \"[index1/PJlGJFFURIO1zIboktQMUw] took[4.6ms], took_millis[4], type[_doc], id[1], routing[], source[{\\\"somefield\\\":\\\"somevalue\\\"}]\" }", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-29T07:35:58.359Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "distribution_run", + "elasticsearch.cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", + "elasticsearch.component": "i.i.s.index", + "elasticsearch.index.id": "PJlGJFFURIO1zIboktQMUw", + "elasticsearch.index.name": "index1", + "elasticsearch.node.id": "U7rdLkcqR9eRvOiyLmr_qQ", + "elasticsearch.node.name": "node-0", + "elasticsearch.slowlog.id": "2", + "elasticsearch.slowlog.routing": "", + "elasticsearch.slowlog.source_query": "{\"somefield\":\"somevalue\"}", + "elasticsearch.slowlog.took": "803micros", + "elasticsearch.slowlog.type": "_doc", + "event.dataset": "elasticsearch.slowlog", + "event.duration": 0, + "event.module": "elasticsearch", + "fileset.name": "slowlog", + "input.type": "log", + "log.level": "WARN", + "log.offset": 409, + "message": "{\"type\": \"index_indexing_slowlog\", \"timestamp\": \"2019-01-29T08:35:58,359+0100\", \"level\": \"WARN\", \"component\": \"i.i.s.index\", \"cluster.name\": \"distribution_run\", \"node.name\": \"node-0\", \"cluster.uuid\": \"oqKkg2eoQh2P_KrKliI3DA\", \"node.id\": \"U7rdLkcqR9eRvOiyLmr_qQ\", \"message\": \"[index1/PJlGJFFURIO1zIboktQMUw] took[803micros], took_millis[0], type[_doc], id[2], routing[], source[{\\\"somefield\\\":\\\"somevalue\\\"}]\" }", + "service.type": "elasticsearch" + } +] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log b/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log new file mode 100644 index 000000000000..6239afaa3ea0 --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log @@ -0,0 +1,3 @@ +{"type": "index_search_slowlog", "timestamp": "2019-01-29T08:31:40,426+0100", "level": "WARN", "component": "i.s.s.query", "cluster.name": "distribution_run", "node.name": "node-0", "cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", "node.id": "U7rdLkcqR9eRvOiyLmr_qQ", "message": "[index1][0] took[70.4micros], took_millis[0], total_hits[0 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], " } +{"type": "index_search_slowlog", "timestamp": "2019-01-29T08:36:01,675+0100", "level": "WARN", "component": "i.s.s.query", "cluster.name": "distribution_run", "node.name": "node-0", "cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", "node.id": "U7rdLkcqR9eRvOiyLmr_qQ", "message": "[index1][0] took[731.3micros], took_millis[0], total_hits[2 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], " } +{"type": "index_search_slowlog", "timestamp": "2019-01-29T08:36:01,685+0100", "level": "WARN", "component": "i.s.s.fetch", "cluster.name": "distribution_run", "node.name": "node-0", "cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", "node.id": "U7rdLkcqR9eRvOiyLmr_qQ", "message": "[index1][0] took[9.9ms], took_millis[9], total_hits[2 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], " } diff --git a/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log-expected.json b/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log-expected.json new file mode 100644 index 000000000000..9ea5fff1821a --- /dev/null +++ b/filebeat/module/elasticsearch/slowlog/test/es_index_search_slowlog-json.log-expected.json @@ -0,0 +1,65 @@ +[ + { + "@timestamp": "2019-01-29T07:31:40.426Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "distribution_run", + "elasticsearch.cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", + "elasticsearch.component": "i.s.s.query", + "elasticsearch.index.name": "index1", + "elasticsearch.node.id": "U7rdLkcqR9eRvOiyLmr_qQ", + "elasticsearch.node.name": "node-0", + "elasticsearch.shard.id": "0", + "elasticsearch.slowlog.took": "70.4micros", + "event.dataset": "elasticsearch.slowlog", + "event.duration": 0, + "event.module": "elasticsearch", + "fileset.name": "slowlog", + "input.type": "log", + "log.level": "WARN", + "log.offset": 0, + "message": "{\"type\": \"index_search_slowlog\", \"timestamp\": \"2019-01-29T08:31:40,426+0100\", \"level\": \"WARN\", \"component\": \"i.s.s.query\", \"cluster.name\": \"distribution_run\", \"node.name\": \"node-0\", \"cluster.uuid\": \"oqKkg2eoQh2P_KrKliI3DA\", \"node.id\": \"U7rdLkcqR9eRvOiyLmr_qQ\", \"message\": \"[index1][0] took[70.4micros], took_millis[0], total_hits[0 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], \" }", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-29T07:36:01.675Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "distribution_run", + "elasticsearch.cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", + "elasticsearch.component": "i.s.s.query", + "elasticsearch.index.name": "index1", + "elasticsearch.node.id": "U7rdLkcqR9eRvOiyLmr_qQ", + "elasticsearch.node.name": "node-0", + "elasticsearch.shard.id": "0", + "elasticsearch.slowlog.took": "731.3micros", + "event.dataset": "elasticsearch.slowlog", + "event.duration": 0, + "event.module": "elasticsearch", + "fileset.name": "slowlog", + "input.type": "log", + "log.level": "WARN", + "log.offset": 429, + "message": "{\"type\": \"index_search_slowlog\", \"timestamp\": \"2019-01-29T08:36:01,675+0100\", \"level\": \"WARN\", \"component\": \"i.s.s.query\", \"cluster.name\": \"distribution_run\", \"node.name\": \"node-0\", \"cluster.uuid\": \"oqKkg2eoQh2P_KrKliI3DA\", \"node.id\": \"U7rdLkcqR9eRvOiyLmr_qQ\", \"message\": \"[index1][0] took[731.3micros], took_millis[0], total_hits[2 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], \" }", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-29T07:36:01.685Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "distribution_run", + "elasticsearch.cluster.uuid": "oqKkg2eoQh2P_KrKliI3DA", + "elasticsearch.component": "i.s.s.fetch", + "elasticsearch.index.name": "index1", + "elasticsearch.node.id": "U7rdLkcqR9eRvOiyLmr_qQ", + "elasticsearch.node.name": "node-0", + "elasticsearch.shard.id": "0", + "elasticsearch.slowlog.took": "9.9ms", + "event.dataset": "elasticsearch.slowlog", + "event.duration": 9000000, + "event.module": "elasticsearch", + "fileset.name": "slowlog", + "input.type": "log", + "log.level": "WARN", + "log.offset": 859, + "message": "{\"type\": \"index_search_slowlog\", \"timestamp\": \"2019-01-29T08:36:01,685+0100\", \"level\": \"WARN\", \"component\": \"i.s.s.fetch\", \"cluster.name\": \"distribution_run\", \"node.name\": \"node-0\", \"cluster.uuid\": \"oqKkg2eoQh2P_KrKliI3DA\", \"node.id\": \"U7rdLkcqR9eRvOiyLmr_qQ\", \"message\": \"[index1][0] took[9.9ms], took_millis[9], total_hits[2 hits], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[1], source[{}], id[], \" }", + "service.type": "elasticsearch" + } +] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json b/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json index 92559d982bfd..ec13bd7ce587 100644 --- a/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json +++ b/filebeat/module/elasticsearch/slowlog/test/test.log-expected.json @@ -129,7 +129,6 @@ "elasticsearch.slowlog.id": "s01HZ2QBk9jw4gtgaFtn", "elasticsearch.slowlog.logger": "index.indexing.slowlog.index", "elasticsearch.slowlog.routing": "", - "elasticsearch.slowlog.source_query": "\n{\n \"@timestamp\":\"2018-07-04T21:27:30.730Z\",\n \"metricset\":{\n \"name\":\"network\",\n \"module\":\"system\",\n \"rtt\":7264},\n \"system\":{\n \"network\":{\n \"name\":\"lo0\",\n \"in\":{\n \"errors\":0,\n \"dropped\":0,\n \"bytes\":77666873,\n \"packets\":244595},\n \"out\":{\n \"packets\":244595,\n \"bytes\":77666873,\n \"errors\":0,\n \"dropped\":0\n }\n }\n },\n \"beat\":{\n \"name\":\"Rados-MacBook-Pro.local\",\n \"hostname\":\"Rados-MacBook-Pro.local\",\n \"version\":\"6.3.0\"\n },\n \"host\":{\n \"name\":\"Rados-MacBook-Pro.local\"\n }\n }", "elasticsearch.slowlog.took": "1.7ms", "elasticsearch.slowlog.type": "doc", "event.dataset": "elasticsearch.slowlog", @@ -137,12 +136,9 @@ "event.module": "elasticsearch", "fileset.name": "slowlog", "input.type": "log", - "log.flags": [ - "multiline" - ], "log.level": "INFO", "log.offset": 4766, - "message": "[2018-07-04T21:51:30,411][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.7ms], took_millis[1], type[doc], id[s01HZ2QBk9jw4gtgaFtn], routing[], source[\n{\n \"@timestamp\":\"2018-07-04T21:27:30.730Z\",\n \"metricset\":{\n \"name\":\"network\",\n \"module\":\"system\",\n \"rtt\":7264},\n \"system\":{\n \"network\":{\n \"name\":\"lo0\",\n \"in\":{\n \"errors\":0,\n \"dropped\":0,\n \"bytes\":77666873,\n \"packets\":244595},\n \"out\":{\n \"packets\":244595,\n \"bytes\":77666873,\n \"errors\":0,\n \"dropped\":0\n }\n }\n },\n \"beat\":{\n \"name\":\"Rados-MacBook-Pro.local\",\n \"hostname\":\"Rados-MacBook-Pro.local\",\n \"version\":\"6.3.0\"\n },\n \"host\":{\n \"name\":\"Rados-MacBook-Pro.local\"\n }\n }]", + "message": "[2018-07-04T21:51:30,411][INFO ][index.indexing.slowlog.index] [v_VJhjV] [metricbeat-6.3.0-2018.07.04/VLKxBLvUSYuIMKzpacGjRg] took[1.7ms], took_millis[1], type[doc], id[s01HZ2QBk9jw4gtgaFtn], routing[], source[", "service.type": "elasticsearch" } ] \ No newline at end of file From c57c9eed7fd80878923b00d23f33496b3a7638ed Mon Sep 17 00:00:00 2001 From: Mathieu Martin Date: Fri, 1 Feb 2019 16:48:56 -0500 Subject: [PATCH 64/66] Remove accidental overwrite of user_agent.device.name by user_agent.device (#10472) --- auditbeat/docs/fields.asciidoc | 10 ----- auditbeat/include/fields.go | 2 +- filebeat/docs/fields.asciidoc | 18 ++------- filebeat/include/fields.go | 2 +- filebeat/module/apache/_meta/fields.yml | 2 +- .../module/apache/access/ingest/default.json | 6 +++ .../apache/access/test/test.log-expected.json | 6 +-- filebeat/module/apache/fields.go | 2 +- filebeat/module/iis/access/_meta/fields.yml | 2 +- .../module/iis/access/ingest/default.json | 6 +++ .../test/test-iis-7.5.log-expected.json | 2 +- .../test/test-ipv6zone.log-expected.json | 2 +- .../iis/access/test/test.log-expected.json | 6 +-- filebeat/module/iis/fields.go | 2 +- filebeat/module/nginx/access/_meta/fields.yml | 2 +- .../module/nginx/access/ingest/default.json | 7 ++++ .../nginx/access/test/test.log-expected.json | 14 +++---- filebeat/module/nginx/fields.go | 2 +- .../module/traefik/access/_meta/fields.yml | 2 +- .../traefik/access/ingest/pipeline.json | 7 ++++ .../access/test/test.log-expected.json | 12 +++--- filebeat/module/traefik/fields.go | 2 +- heartbeat/docs/fields.asciidoc | 10 ----- heartbeat/include/fields.go | 2 +- journalbeat/docs/fields.asciidoc | 10 ----- journalbeat/include/fields.go | 2 +- libbeat/_meta/fields.ecs.yml | 4 -- metricbeat/docs/fields.asciidoc | 10 ----- metricbeat/include/fields/fields.go | 2 +- packetbeat/docs/fields.asciidoc | 10 ----- packetbeat/include/fields.go | 2 +- winlogbeat/docs/fields.asciidoc | 10 ----- winlogbeat/include/fields.go | 2 +- .../module/suricata/eve/ingest/pipeline.json | 7 ++++ .../eve/test/eve-alerts.log-expected.json | 40 +++++++++---------- .../eve/test/eve-small.log-expected.json | 4 +- .../module/zeek/http/ingest/pipeline.json | 9 ++++- .../http/test/http-json.log-expected.json | 2 +- x-pack/functionbeat/docs/fields.asciidoc | 10 ----- x-pack/functionbeat/include/fields.go | 2 +- 40 files changed, 105 insertions(+), 149 deletions(-) diff --git a/auditbeat/docs/fields.asciidoc b/auditbeat/docs/fields.asciidoc index f0ab83d1d024..0daa577744dd 100644 --- a/auditbeat/docs/fields.asciidoc +++ b/auditbeat/docs/fields.asciidoc @@ -5858,16 +5858,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/auditbeat/include/fields.go b/auditbeat/include/fields.go index 29e748dd976c..0e852293dae8 100644 --- a/auditbeat/include/fields.go +++ b/auditbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 8e7d5333596b..2345851cd844 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -164,7 +164,7 @@ alias to: user_agent.original -- type: alias -alias to: user_agent.device +alias to: user_agent.device.name -- @@ -4282,16 +4282,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: @@ -5785,7 +5775,7 @@ alias to: host.hostname -- type: alias -alias to: user_agent.device +alias to: user_agent.device.name -- @@ -10877,7 +10867,7 @@ alias to: user_agent.original -- type: alias -alias to: user_agent.device +alias to: user_agent.device.name -- @@ -13551,7 +13541,7 @@ alias to: user_agent.original -- type: alias -alias to: user_agent.device +alias to: user_agent.device.name -- diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 19af3e1adc45..bc0cbe3fb1cc 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "eJzsfftz3Dhy8O/7V6C0VZ/tZEQ9LD9WqfsSnR9r1dpexbKzueRSGgyJmcGKBLgAqPFskv/9K3QDIEByRqPH+Db55Ku6tTkk0Gg0Gv3uXXLJlseE5fo7Qgw3JTsmb16df0dIwXSueG24FMfk/35HCLE/kClnZaGz74j72/F38NMuEbRix2TnnwyvmDa0qnfgB0LMsmbHpKCGuQclu2LlMcml8k8U+63hihXHxKjGP2RfaVVbeHYO9w+e7+4/2z18+nn/5fH+s+OnR9nLZ0//zc8wAKr985oatmfBIYs5E8TMGWFXTBgiFZ9xQQ0rsu/C22+lIqWc4SuamDnXhGv4qlg10IJqMmOCKTvWiFBRhOGENPg2x9cUo/Fsn9yKEYtkKhWhZekmz1KcGjrTK1GH2L1ky4VURQ9z//7XnVrJosktbv66MyJ/3WHi6vCvO/9xDe7ec22InPqBNWk0K4iRFhjCaD5HUDuQlnTCyutglZNfWW66oP4nE1fHpAV2RGhdlzynCNlUyt0JVf+9Huqf2HLvipYNIzXlSkf4fkUFmbCwCloUpGKGEi6mUlUwiX3u8E/O57IpC9jEXApDuSCCacPa/cVV6IyclCWBOTWhihFtpN1Wqj3qIiDe+MWOC5lfMjW2FEPGly/12KGug8+KaU1nq88NItSwrz107rxjZSnJL1KVxTVb3SN85ud1xOkwgD/ZN93P0cpOBZFmzpRFMMmpZoPjpHuQS5FTw0TLGAgp+HTKlD1aDqWLOc/ngFhjD9NUMVYuiWZU5XM6KVlGTqekakrD67Idxs2rCfvKtRnZb5d++lxWEy5YQbgwkkjBOsvxuKczJjxaHWM8iR7NlGzqY3K4Href5wwHctwyUJNjK5TQiWwM/FPLqVnYlTJhuFmOCJ8SKpYWemrJsCwtwY1IwQz+RSoiJ5qpK7tQ3DwpCCVzadcsFTH0kmlSMaobxar0hcxToyZc5GVTMPJnRoGgZ/BmRZeElloS1Qj7mZtK6QzuAVhV9nd+XXpu2deEkVrWTWnZIVlwM7fAUl5qy0pMwIVqhOBiZke1Dy040WKU5Zu44Y7NzmldM7tldk1AVmFFwFvtOkXmkD6V0ghpWLwNfqnHllDtCJZELUywZOC+pZzpUQtjZonA8v8pL9mEUZPBOTk5+zCyHB0vhjB+uiy3vbSu9+yCeM6yiBBijlNIppHJzKmYMcKn7UmwxME10fYbM1eymc3Jbw1r7Ax6qQ2rNCn5JSM/0eklHZFPrOBIFLWSOdM6ejGMqht7mjR5L2faUD0nuCZyDojPErYCFO6RGt/18SmxBMGlCM+HuBRZcU2tOTf2z7/g0AnpRCwnYnbPs/1sf1flh3347P9vA7iPljxWQmYPPooPFCBwRxgZ0IxfMbhsqHCf4tvu5zkr62lTxrSAZK38golZSPLW0SXhQhsqcnf9dI6WtpPb85WMNWmM5QJNRQXIJZaREs1qqpAsuSaCscIeOOE4cG+6ZEBPrLms7ORTJasOPk6nREjiDxWgAE+bfySnhglSsqkhrKrNMhva6KmU/S22u7eNLf68rK/ZYn+k7eBEG7rUhJYL+5+Ae3vBaxQmwtZPlhEvtLdhlqJKBPYUsN6+v4Cx3DQT1r4CvJpPLXEkw60mlIRIKprPuWDDaHdD9HHPi21g/ovgvzWM8MLehFPOFG6DPU6Ag8d8Chc33O76SWdfgpRlGTYyePh24XcB2DkvBpf6kh5Nn+3vF/2lsnrOKqZoeTG0aPbVMFGw4m4Lf+PnuO3ake1YwVVVtCyX7mLRhOZKaquFaEOVFR4sDxgjWfNiHG6idUiZfpdKSHnJeyLSq/jZZjLSiRvIcoGCTUE2o3iEuOCGUyMBCZQIZhZSXVohSjDQEpAtouyj2IyqAm49e/tJoUfRm3g1TnjBFT6gJZmWckEUy62Cg/f751dnbjjkTi1kPXDsA/t6BAxwec1Ega+f/+UjqWl+ycxj/QTHRyG5VtLIXJa9SVCXtPvWmU6BisyscuHFC48Mo6jQFADIyLmsWJAOrCxu3zRMVWTHK71S7djLR7EpU8n0orMcjVKL+9nJebiHExYEu0h+hWmJBUXM/A62g8cwo+7oiMUPbblSoxtYfitFcmFB+rURiGIQKp2Y6EwRZGCcFpFWumpHs+SCW7ILBzdVuO0fN9aen0SxWjErhMHViLe01R41q6gwPAeJnn017kJnX/HEjdy9yXW40I0kV9yuj//OWvnfro8p0Ak0Nw11mD+dkqVsVBh9SstSIxpBkjBsJtVyZF/y94s2vCwJE1Y0dqQoG5XjHVQwbezuWxxaBE15WdpzVtdK1opTw8rlLcQ/WhSKab0tfgjkjDqAIyQ3obvEAruoJnzWyEaXSyRaZ57hZZmMp2XFwD5FSq6N3a/TsxGhpJCV3QCpCCWN4F+Jtvq5yQj5S4tfvHPT8ayyD3up6MLD5ol9nLkHY8RfX3wA41ArHRQNGjxQPR5nvB5bkMYZgje2ql/NROHkOyCwZEh7L4Bykg3c1PWGN3Xy4pq9OT0LC3bcELeos0xneLGgSRU0dXJ6dnVkH5yeXT1vN3UA7loqsyHkpRSzzWA/k8qshDoYX2i+DeHmw8mraxHnQcCN3wYUjs3hBNHM35MPzCie6x4sk6VhAwd9k51Ahbc/RBAwDl4ebQb2n+0IqBNbJSO+YozEW8hpsn1CArZ/yxW0kB5uSGE42+1AnbFYhHeS1Y/Jw45odQ00PzIZDFDUqhdKLWPzEyW6Zjmf8pyUEk2uRLHSsyJ7r121Yh3+kcrCmZozmOJX9pa16wXm6jlfF73x5UKGLpjIpuwASiYf3rowOpMXteQdgNfgh5D3Usy4aQq8LUtq4B+pYhaI4NF/kp1Sip1jsvviafb84Ojl0/0R2Smp2TkmR8+yZ/vPfjh4Sf770dB67I3OBRPmomObuG5V/fN9zZpiG0WYdcWSPkpl5uSkYorndBjsRhi13DrQr3AemHUFrK+ooMUgkIrNuBRbh/ETTLMOxH9u2ITlg3jk5hsgkZu1GPwghVGMlus2mmt5kcvim2z26fnPxM61asNP1mz2t4DTbfi1YO7+86shSFdt94CQfGsQv2imdr08HL2JmrNnoiPijEmo/cgpmSkqmpIqSzHOTaIYXgsdSQ62CyXVYLhD7sIVXiY5E4Ypp9VOSykVEU01YQp8GWDE8Pqj7gyNIJakni81t3/xTpDck7LugfNRgunNvl4u0a3EBaGNkRXcXDMm/bpX7NhEaiPFbpF3DRuyKbp2jfbRZmaNt3jfRtcoSgCyAT8GF1NFtVFNbprY2dEixu5DYlDFx9f4N6ZOgEOTn44NwlSQN68O0d1ib7kpM/mcadw7uLN5ND16kVqY7UWfugIT/xXXwYSYAhEGVI1w/ifFKmmCyZHIxmhesGiuYegoce6UeMjY4wIfO+pLPZc4bDsUeJHc9LEjx02QIu56vdh/HmRNJa94wdRGenGgRpYf3k2oTy58WLEHJHj7Ylc1yw9HZJazEZEqZTR8xg0tZc6oGBBP6RXlJZ3w0l5lv0sxYH1ft8xG7zKqze5BfrfVnkRgkN9B9/XeCiBHoPN2IwcWgjfIRtCvgq+/qs2AdzfKTSH2NvzsjjboADbfPTh8evTs+YuXP+zTSV6w6f6G6r+DhJy+9iQH4Ac/wmrYh31y92MxCmBF19N1gPlfhh1Jt8GqOcwqVvCm2tAk4DlR5HG6Bmaag5x2b3Tw/PnzFy9evHz58ocfftgM6M8tt0ZYwIWvZlTw350bsQixHs6dsWwDPNIL2V72HEIRCEUj0a5hggpDmLjiSoqqb1lqL72TX84DELwYkR+lnJUM72zy86cfyWmB0RIYogLepWSo1tvSCQJxF0jg5F4a6DzeTCIIX6UWb2eW7oUjRZZ1r5x3wSFo53XuCWfuldN4GLCHauannLOytmIxiiV4I06ojoglzKG9Hr+0DMnwVpu4gYHYfbmt4/4JhycVFXRmb2vgo2EJg94sjL36xr7MABLhxRBvrOhsu4wxlg1gtmAWQLAWVJNJw0sDAs8KAA2dbQu+9nA46OjQ/bdNDLUQoObcmzyJbtxk+iTSkYSgwYvb3GuAlMEgwci1k3Kp170fNuNT0XcbuP1izxLommho3XPxoWsGvYHDDzlbG3tM/qhuqsTP9uCr+sP6qqJ9+p/msBoG/dt7rdbDsT3XVcxJ/jf4r2KW4T1DwO/+oE6sm8D74Ml68GT1V/XgyXrwZG2KxAdP1oMn68GTdVtPFguCUJLbSTbWBT8wQ3fjmzFcr0bawf4GKSODyaLXUNWbV+d+Xtw9F1QoYWWaGJmRMct15l4aY+6GSrM07YVaNdpg8DVsUTdn0//5xWpMvzVMLSEYFqOvgzLBRcFzpsnurjP/V3TpgbGI1SWfzU25TA9NyI2LVgNjwIoQxNLKa1wYNlMuYJUWv1qQUVJLNcJ8zioa8OLu18HlgLG3UZiZ597nmhxA4s2EGXpIBm1t0QsdwlRKdoyqb6JHG2fXtZbNHJJZXLAujg+qChVLcslFkVnGYldYYdA4vmDmkYcS88zslpQM/Y9283xqHUReY25jN0GNG83KaetutGKmHT9gcXPX4bfKqJi6XLoUzlWpp9cBE6WgXgMJ7PJABml7aRdbyebBee3onnOjuTjFQCDPq15mw5ur2yR/In0M2ft9ZPewyb+UM4JOAcXzhMoycgK/ptkSXrHxNGgXF+VegjFpjiumbUJlRt63ib/A2XwuKOQN8IrZW9Z7KO1TO0T7dUghldM4hdgPQn0qIoGsEx+G4EIL2nwO1GrJhGHyhlc2qbf7WcUtVjtHaP0aSAeZMLNgzM7h48VF4eIGmHITuLQKTCfNS6ntSk48qq9Hq7cMScWsUAB6RgljYVQ+/DNJurVADCN0OJM1wWtMAi1qK1ZJtSSW3UG8vxuo6GQAXzWlYAqd5LzNBXav6ZwKu1DIB775Rb5VVnX62m57sDsHXnvDrC3L+ftQ3o/Z155vO35ycw4lZM34Ffg2uwd9Yc+id/omlQj8aMlY/noZgVHcDuBOTCSSeQ0Zr6wYrtZhmgxqedIY3hiPyFgbapj9Cy2pqsYZ+YUqS/SQOD1tIFQpSB5yaiWREVmkYkVdUjAMudgTKxC7YhI0z1ltINvUhaHgLeSllxGpS0Y1MMlkSHAC5LTpCsCBAADugcvE5cls5UJBvuBmGNr2IA7M+Wzu8o2Guf2KHTtN959rZDqQ3GS3e06F27sME8DGI2/Q10xolwXUKhY0JScHegtnkE+pTwDbYPvTjWL3sP3JiI1mne0f2v/G6ozgBAZeOhQvYbaUpg5pwHj75LQ2wF1dhu9KhhB0R5fn19IEFykBhE1vD/mcphZERwF+O8fR9QGHG3j5Li0Ke67dhbwLFzIrxun2jae8ZLu5YvZ6HKN7CuupcN3mlPr70a2S27kqUJgHzybsTU21tjjdxfS4/gbJxuRye85duxI3xTp2fRr9FO0SFW6LRxG56jQash09NYLYI+jTM9t7HV92O6SbPAffG5SDmVJeNoqlzDcZczUjvsnpS4dcyYg3OH0O/m+Xmv+JgUSHgrTDRtNRKOyfM1wFvZIQixQCRNqiS5Y4weQzpALJoim3Xj0CZ3E2pWvrKGCCd8wwkrejEXWwI2EOvFSh6sfgMa2W+rdywI9HDdVsU4/mrbHgphkyO0hhCRetf2P33pg8tqxKM0P2nISsmXlisZGu2srwqdGjmdivrGCNaAIum5zkGL0hi9dZPzo2GVftiYsWCKwcA6ai8MjtsSVWhDrrmrQTSWbgJGl2xRQ3m0oyqzx/Oy92Ntubczdf56ryYHQElV/mzhg7HN4XvnLXfsXAdScsB4tCAoP2FopI2b15pElTEyM7XDW5dyzHq+glI6ALuem4Y6+5FJprA9og2uF6Jq5wCWGOfHlrav+efLHEYxoBGdXO1uhCrznW+tFzuRAYg5ebckmWzFgy/S9SSKwaJ9VlMqSVCSzf1mTBkiCR78mpJv/n+4PDo3/wMYBpurrdpv+CCnRSXVpA4CSB9aG1YyUDYsAmzy/1IHXunLOaHPxA9l8eHz4/PtjHMNVXb94e7yMc5yxv7Fbjv5I9s7tmJQsU0xS+cZC5Dw/29we/WUhV+Qtm2ljxQxtZ16zwn+F/tcr/dLCf2f8ddEYotPnTYXaQHWaHujZ/Ojh8erjhISDkE12AbStUMpNTsOerQPpfXIRrwSoptFHUoPEGbbDcdDUDx8LxBnIUwUXBvjK0Lxcyv4hi9Auu7dYXyKWosK9PWGdELIfGCqzqwUOlIWUZEAt+7PEF2lPG8dbC3MdkSstE8G7B8L/1Dsuc6vmdxLWWqtoY9KG/nfz51euNd+wd1XPyuGZqTmsNVb2gztWUixlTteLCPLGbqOjC7YGRFlUgF3WYDNloU8NF2aiud/8WISYDo3BRN+bCvyCokJrlUhR6M5S8diMmLNvylGikvhSM1A1aApAl/puJAqjyUlgWBswN1YM2MKzrZPDcPWeBvQMUAskdZ8Dg4r74yCu2cX7JrZSCcBLbBUQF7JJin480CaVN28Jtzh6XXk4O7FTZLxWjxZI8ZtkssyoUbUpDzpfa0lUYWD/BKy8ZTwLwtMT49QXXXTH3pBXtw9w4MzCRY0ItR5ACLJOnrx0MO28aJWu2d1Jpw1RBq50nqTZIJxPFrtBU6j85/7zzBKyvgrx7d1xV7e3Naenf2t1/dry/v/NkyLyPuuWGh6SIa0Ou3UqnA+PovTS1wcKt7uUhAbvdaCuUc224yJ1R+p+i31w1luiRn7gnrDi9Gy5X93LmK28CmBrLurWU4Jn4sEjlyut0gEEuVXKBAmhn0Ryr0Mal5JIxJ8uomphiSN/gMcppmZFxu84xOgviYpbht3RbvhpFc+NvoBjCUWfPArBhCdxXzU33xxUsyzHQta6tmCXBh2AvaLTBWH0InXQDm9PjUe0rA/DGTgo7QcsNu5D3CXINnfkqb4C7dOMt7gPeR/EKWi6FZeP6aoJlpzdglzc9YMiurz1ezrpkGcUgcmhu+JVVCCx+plxp44t/Di2K3ciEf9Ml2Zvo2gXBVPFywhJS8yfVpKTrV6O4vrzQHXa3jglOS0k3dK5+4vqSwNhYB5TLnrLmeLR2cjrRsgTLjn6SnrMvmmEFKizr9UgH5chd+fZ0rV3ehZCqusHG3WCdH8EUyX9nBcx3zZJHwdtVggC/b/nFwf7+ipKdFeUCo3CwDCfU2LIqaYUB9FSAC9CVO0P7ntZ81uH6LWAaKoPDMAuK5V80Y4Q6iyosA3Hq9FNalr6IW8cvPeWBZ3d80M5L/bZ9YRX+TmCUrqOTOKtI6oYCX7EmEyu2eXbn/K/2OcTBeG8imDYA6gzA8CWy/UVGtZY5b0sDg+roi+0lleEQYXvOXOJdn0C4I2LmUjNXKByN0DDZqRfNyQcpuJFwBfz729MP/+GLioMJzCV4Qz0+iPJAS643l/bTW+h0yvBCsK9312CimvLO3rOxI7WN6TatHrXqkAxLt8kWn1ELkHTp72V7ONs68mrGzMV9zfcZhgPwQaTQy6rk4lL35oXBk5CvO8waMwLYwTB6cpzhMIdkmFIuCKN6afFiGJDGZOmIy38eGTyCYlqLWQ+JsUn7DusA2MH3C5bMESm4gnPl0Pikh8aCJbUP7jD3axhpRe7oSvLhIg7NucP0p3ag1lLl43CQK4nwd8dLumA0UdjBPdGRlSnBEWB1oy+nr58gp3A3ZBQ09fgcfmyRRORCRCW8gh1xEefo3pVKYLRHYNlWSWpiyLK4H5ScKV5RtUSeBbj4sbPc/sxJ9sO9zR0n7w/OW92eFMPh3n9+tD8MzAdLn/Euc0FkbmjZMa/2wNL8903BSuw/wwlGfUqw41tg4D3LOJwRUVqBhRaFV0bGdo4x4alEAt7dcZ+xVEmG9nqwE+k6AfC9lXshwglQ5kIaQCSuZGHPT9GbOd/GzBUzFIO4wdVcdESomGR9QlL0aPPQPiTVKLSvYk66a8NQ4R3thERlmV7JrqjoheMmoU13DMG6H9vY6ohRXLevHQ5Meq8uqbFE/I1TtmMPIoDV2euo8r3b6nftk02rU/uqLIm07AoMk1xWdWMwrNCVN4HwbAipi7pjDFgX4/YYrbyJzTBEFCOY9sDAQhbi+hhCu1LAaRs0OKeqWFDFRuSKK9PQ0hcY0SPyGqoiRNUfUGn5qZkwJZgBc2fBbpN8bVc0TAR3dyG/c2PHVVO6hhYTVUP3ev7COyzHHrqx3crKLlkx0ygsVbVBIZZtrezjtauC/EdngYP1RGuJ1vAFcsRRm3T5LE3ZcWP/1tASOLTPLrej+ChbC4iLPmqDfqwsgvFB2p7jTv0olvMiNO9B1dZI+81Qsvc2o0jx7HZtbyc6EKV3wbmGClgbZgTqvvPCBd5t2TsXs2mT5ulzgXaSawvVHCdZFI13J46hHQFsW9ZHzn1nwgNX4LXP5f52CeTv3DFaM/O2G3kMHKO3UrkyQb5SmmsW4WwWSZ04Owx03BmH+k7jTuuOKbmqRr4ITZRiFtjqKLa+R0WJIrNLMmJLdNcQWgh0VPmcGwZVBW+NzNYz+/Xl84vnRxt6X3+umaKm7TuUADMUbhHLp+6Cbsc4hzGiN26WKW4P28/n3b5bw/G3sgN4vKuKNeCCP05GN7K+cDjtus4t+mqwGaWf7IYGV53Hvf48u8BeL+IOZOQ2CedeKksG30LGZm/f/cTkMTScypkwUo9IM2mEaUZkwUUhF12Lc1ugiaoFF1tMP23J+wPNLZH8684dFot3pQ/Jt+TkAjOzoSXYy3cbS/ggf6VX7O7rQFnR22RCbqBLnepURoqWRSveESruurCCTTgVN1nRuQPDkR103Szm1IwIjjWC/oETXcQkOLCYfobq3VdzsJ8dHGUHd9kgvxmggCi6INqotExklPdipfb7JbSj7Cjb3z04ONx1CQh3WQvCt8GSHiqJDOzuQyWRh0oiKawPlUQeKok8VBLpgPhQSeT+KonMjelYzd99/nzmnty2Ir4dIkTS3Ka6LDbFyypm5nJrpvB3xtR+KoJTDeSpoDMGjV0QHTdhcYCHkaSUC6Yg6GsqVSgOkpFzlp6EnffhxVe05saOADu2492jO6c+98GKVG9ene8QojEFfjBsf8bMiNSQFF43A9mRHo8TWSwz57nZFjY/OwskUFRAK8w8BDr2MV9IVQ5kd3u4oZmh2rDe/q3yzXD8Nk0OKNdPPwS3XZ0+3tublHKWuadZLqu9oVXoWgrNMm2oaXSXc1+3ks2rSDpCxtkIztZj3mEFR/tHa2D9W5CKA/x2tLKy7NA9Momg+A8Ad5AdbFKmMhzF4XKVm1LBqpKV67AtDS07LmYnKftT+tiiHrSBOaMFU6kJp13q0dMX1zCZb7+883ULW0lSL18OrsQfgj/WJrnzccddig/4H2abrjv6YZ9aFXmWiivvw4P14gk6rWiSci+j6ja3EFMAa30s3t2z8V7OWqnVx84P5bVjheqkLMAvJ58+jkdk/ObTJ/uf049vfx4PovbNp09byJRcnVIIQi847j4s7YJiM9PG2Wor0de5YDDkF3wAPrzZ4tCn+9FucDhcR9EbyXATNsVSDSU3GBNgSAOpGaGyRk1Vr7jaKfpxFQ1l2sjYDe/KcTuijD2+0GvYJyvUadQ/icnBjRRXLugULnALH/UW13Fuoct5Tq9YyGbSlq4wvCf39ebquuSsQE8ZE7nEGuCKCLZIFT4umIZeUFcoH+clowKSfVPQh+K0b5o/SbR0iZGPegmUVhIH17Y334MMf20OZcJuXPxyynI+Jg83jyzywdD9hui5rKpGOFxj6K28YsozLRc9otJwahc74vp5u59uFZzihw35G914aG8VvQWT3Hqc0IxfMXuvOG8fVP+TXm3SrdruETTErH4EaeEXPuXfzn19ijrfz+enEJhY4kFexHYHR2jkPV0ylRFeXx2N7P8/t/+vWT4iNa9GhJn8D6e3rlNb7ToGAkaooBdoQ9kWvRByevLxhJy5Pv3kI8xGHnulbrFYZBaMTKrZHiZ/QKW3Pd/Zfxfh6z/Ivs5NVXY8n4ScGyoKqgpAua/Y4r+Fg8s1oSWfCSwCgKftIzNvS7mwfK8znobn3tICOYbIIhqXcja0vsE9eD5A6IoKfYM2BzfrpQHVM3Q4hdFuu/R2oQ2jbTkXRn7C8WPrWzJkgJeU9nyQx01Rj4jJazwjuzyvajgc2ZM/3PFYez5MXg8EgNTYmWOLuu4JohoZKvrColkdtfqsHzXhRlHFy6VLk8KyPekOzbmYaRQZKp4r6dN0cMtpqWWb6Rm/rC+XNRsRnv+Wpi5Pac4mUl6OiFlwYzBWLeaa3jKquWmc4NIWdb1iouhA2KYOhbxclsvCChbO1RwSRlFA2CvsTXF6htH7OgXPEqOG6J8FVz5X+49nU1xHe5RXfdrzHGsrus6LcM35adCdQ9jXDCxEI1ICn/iV5nbjw6n3r//PQjAY3HsYLrhiWytl99oP7vUHL+8ZRadTnncQ+IlZcRRTY1uR+7hzFf0d4WIim94V9XdENmb4By4MU6lyiT9Y9jX4QyOgJMVADe6K1nVUxdkVlrVy8i70vSNVmy7oSvKOgiAMolbKWLBymD/rdpxHmoBj3SLtirPFUCXwYSg8eqUiNVO8Yoap1VB1OEgEYReqBBz7X4gbDInsfqphmcttVo/yplItqCpYcbGdoNSoR1NIsnZZadFPTlmvlfw6bAg6+OEwO8gOssOh0tKgPJnlxfbSJk6gLA6WXAbYQSeNOuacnmE9YHcFUCfP0bCuLgMlrRcvVf+yYL6gxEhZ7tKZkNrwnGgnTcadN1MqLuWia4V4z6gSmONMTXBfzLiZNxNwXNgthrr0ewGRu7zY1TXLB3fi0cHx/Oe/1x+P3v39hx+fffjL3sv5qfrXs9/yo3/759/3//RoE2v4Fpo2XWtcRcsjXB/g9QHcT6RViD1/HCiYM3Y9kOBrV8kx7pDln/vqOSMy9iKu+wlJmyuim2oQoU+fvxy4cu/SEepaXLjRb40N9/0APtpfBjASfrwWJ4dHqR2mE2Lrg4rTpxtm/ogwWj9ZvmY5p6XnqaOQLYpJE60w7LJ2QyPcghmWm5EfGV7HxPrrx9r1+py7RaIag17m9uItJXmjjaxCyg+OA52RIavDrauT4S/FlM+ggq2RRDXiBuvUcmrsRFGRU592NOWKLWhZ6pG92VWjES8GqWevVrAeGMSnqfi7KroGNRNaKj0iCzZJZo6Gh4iLUmpNhga1+Do5++DW7sxhfotjexgtyzXmMCcb4bAQxUHFcoSoxFXpsL/aFzLAPdbtpb8Gld2CAuSDs0b/1rAGhyRvPr+H3DMpgBT8FeHKDKVtKxyNhJo+UBCxYFAG3q0eGkFu1M6ly3++Xb/BXvT8N2wXGaikN/m3zG5bDUVPY703GAILxCmS1tIDYNyttc+63JIWjo6PvS2Rqjgtt2wZDGDgbC6Wqw/M1nKZ5mmb+LA9vojudeWDmXI5b5ZF+jvNWxzb0ZY101nfbZgMNvYqgRqPyNizYft3Xmj4T61dzfGvS/iLLEt8GZm5/VvLkIe9j37Yh+yhh+yhh+yhh+yhTRf2kD30kD30kD30kD30kD30kD10H0h8yB56yB56yB66bfaQVDMqnEPUfeg1tv4vmwfKxcP665gJxfM5og/sdqtarlU1FUt76SJiwsCxJt2Jb8vSlrNzVtZQ1pUqRcXMN3gxrqVQ1B2GCgxShPAz1z/ShYSGeePF3CbKeJsBdPEudcX4v2UtshhnWUpxncbXKywDm9PaXa0BfUvASivAkAVgUP/vaf8Duv8NKGhA479fKroHTX+lnn9vx2C9fn+T5W2i26/Q7O8B7L5Of3PYb6TPr9Tm77KYvh6/bhV30+HvM1Vsre5+k43YXMntae13gXqtvn4T+DfS1aMAMugk6KBE1n2WPLxNa/iVDDt0qM5WfElFe8tDyy4IuvEetaRTHMS/h47XvNhLOJEL+YnTGvBe8S05s5oXYyKnhgmiDV1qHzfmG1Njj3mrTEcxSbmsOZoUoAZmKSe0jNobepAjge0m98HGtfk2jys4C/hJubrrfqfn31aw8eD0TJOYMwWtN4gVhxmUiJspWjk5XRHNK17S4TCqwYXUgwi9h8Rev4qaQm1BPtR3gqrZTTL5boVFqmZN1emtZ/98oEur5KBsjORaK2lYbsCtzw2/YsOexQil/76j9XxnRHZ2S/v/VtCx//Vd357v/Ed/0ewryxvojLStpZ9MoIMGw2Qcdw49E2inH1zRXqPV3oSLvUFqAe637R2DSQYCY+0K4LcR5njhQTC++Q7VYY0Yg/uKCgzTjjsWpR6sqPAhoWSi5EKDH9WnyjlgPA4XbEJq6OjjO29a0VoM9lSBxoJFdpfT1aa9Hx5t7COEdkqnr++/EU97Dx/uHzzf3X+2e/j08/7L4/1nx0+PspfPnv7bhtfxZ9eaKSFL155nAOyFVJdczC4wtmuwc/ptpIm9uazYHi3j/gXXgu1gIQEWb3kNV3YiOjjreio6fEoebio6tF3hGDbg9oW9pzTnJTdWBKj5lQTCpUo2orA3P2fYQQHbCfvhwIcOv+lufxWXSaAZg8bfFRVLqxLlLITjkM/xpGFMbPgIPn5UhKsRgRy/EIiNh4g7CUDXUoAU79ImW9F27NCWRd73E+i5q5hhcevSNiiG6VGUkDphpBEFU6CKhsAnNXIBsKM4+nVE8pJDRx7/khVnfNRfHGGckVNsvOOWRcsSQmeNbEHm9XiEghkFSUk4vABSqEtPOT0jRvErTstyOSJCkooaAxmTEAlhYAKqoHnmMsT3x5Mc02yS5Vkxvk199oHQpJUHaNPwpJMy5HtblAD5SF8cNkr+jgJjehGR57eIh3QfDaSlOgqDOrZRXHsuhXAJBcD8MSJNsRlVBYb0aei8MorexLSYCQ/RpVaexWS2XKpCY9e8z6/OQqsg7EvsIUNwcsbtvx2WuODQnvD8Lx9dROtjHfpa2KHa6XF4rMkb8u+6c7ji7+Wyv/hO1oTQvvU7sAEXikhobhpvYsUOcExVZCeMtINdBKYursfPLDrAal+BG352Kou3Bw+k7/qqvDkyLt0ZPIbddbc9T4am0GYdIW+DIzkEjv7aiLzVg/CYu++GhmlRKKSJBrN0glu0iwb1Xq/mVzj0ngc8bcmBKhstLO+uqDA89/kT3u36FdtCjNrW3lbBmzalfeGK2+Xx31lkBRYkZwr0xzZZzLMnFUaf0rLUoSVkTg2bSbVE/uQyrLXhZUmYgCbV8NqKHAGLoCkHnYPWtZK14tBO+hYMyLHsbYmRGCCGPf9wO8Idgen3nk9UEz5rZKPLJdKsa4/IO+EsOuhcEJIGHu8Rob4sPfD1BgraS0sjGSF/afGLNdzT8Yx0OX2KLtokEqT1ceYejL1TvSuDCHtBtPnxRYNBuqjBjO0FZEEaZwje2N519raCggeuRUMyJDSFtSLFkPl8+1GsPno0ee0V3uEdrwQ5Pbs6sg9Oz66et5s6APcNEoFvoNBKZVZC/e1Dj1eCgBu/DSgcy8QJsr9RrkybVfXyaDOw/wzJM9D7pk2IdTGlqNfh1TBESHfJZGkh3VB5O3OZLbcC9SGc6CGcqL+qh3Cih3CiTZH4EE70EE70EE5023AiV4qjb9JoH24e2OHrenT1ZxP/JhUE99h7s+28hjFGNPbGlSVEbqwKFJpyUbiict6XCMV50GLl7/jIzofT2y86eU93bBJ4bx22oqAcX6yxEQKtOwD8YJftwmtV2HCrDF1Wl0iF/lt8vaKXTFvFqZZa89SZQ6ByXIrNKDEWd05ExRyHwQo9urzZUTEIw1GciRz8E1o3TKN1w46nWGEX4pr+gZ6fDGjFOBcL5jtp88K3/g4ZmaJo9x8tAlzMoOGoayb43ZCMWzx9wZ6xyZTtU/Y8P/rhxWExYT9M9w9eHNGD509fTCYvD49eTAdKN90pU7F1SrCSasNzNLfuutVs6JGIhR5P323imjs/K3LXYp4WPoZsNtfgD7r4guE31Mwq5UIDd1vIZDiP4lbJg0Z3/sSplpB9q0v7u2sGlhIgcmWR+L4waNB1yxt7ohPY5i35/KTE2oQOVEsKBddG8Uljh/ClkJA+VAO23qCmz6U2mph0ae1xQPukt9P5BWOJEbesAc+3qzgHxWzklLyJdztGPSzHJZ37GAvUmxptOolq6CZ8KxX5M6NG94fh2mKrYFPalAZqXdTB4xPwZ0lznIzrPBpTIiTx44RuhffdZG7FCbiJLy7K3bwx9cPH3ufiCgpgN9aBKyVhgvbekh2y9dPbUddwQxisk0WeQpoSyKizW6HmVjLDOEHgeNiDaraSQvvKdWCECTp7cZNgsBvTzNPsMNu0ld6/+FC7lFRiqeM6emm5H5SxkpdWtKQuMpkZbBqdCh5thN+U0CFiGcAPq+esYoqWW6yq88bP0RM3WlmBPOZTuJnZV65NJzevlTvaXrDgBtCE5kpqTRQDr7irOBdImBdjUkjofjtc5/8lPZo+29+fdgRUMOx35NP42WbiKX6yiWcntO+nzo62l9Rh7Q61uScn9ks4d87NJdBv6IVwHpUHL8Qf1wuBpYH+p3khulD/DbwQq0DYohcCj9P/Ci8ELsWZ9uNSVH9QV8QN4H3wRzz4I/qrevBHPPgjNkXigz/iwR/x4I+4iT8i0fcaVabK3pdP79erdl8+vfc3bK3kFS8Y1netS2aY/RUTB4nOreo7ctG1UDmWmvktdLDVHXvuK0kX+8Cwom2l0yiobOsDnM08VdM6G/RRGhcXx8VABchRXPCsAARWmFdCsXONRVoyIMT4UtC0aA6R76WcOWqzn3Pt8q1+bbRpAwl9kU9EdN+KEHrPhLjw8GkYmoK/YkF1AHgUdrcrFa0yLaT4jXtPOONZlsvjo6One2hE+8ff/pQY1b43srbDr/h5Cymo69TAadgj1Ml5ZVU2hz+IpGw0mpxHyFZahTek0ScjjhtVZnbM8chuNETsmmR7FMul0EY1YCOTivhNQlJMT3hClgObcSv0D1g14ThvzRACo3ea241Ci4IdWMTOwLE7xlTE47FvqVTTSPWFUVdjZXOF9H5W+dqZYVatMt2i7nJPBWY0WVKzp9zzERduLZ0e4uq2QgMBjEUvl20ud2ocdXYhdHGA8wT6XzhSTiqbA03PZOjz5Ww2fbUnoDhdzaaWj9VJBsKwWeKb2dAA0sPz0dHT4b6hR0+HNGoz3xY9nEEbrFXU4I7nzoDaDNke24LKHiiYwDGkIMgAnPgL5kB3YU+GCevosJcuWcP5/Uc4v+wr1F2OGgLEs0HoOpK9bwOXDCSkHQcoN5QKjdYBn4ffKMw5aUx4K4XedJCAtvm2V1hVmxYuWAK+kfr4cISO4yvxtJIJMwvmugaYhcTTPVSbQNFZtcWWtfbERH4bEICmxuVxjL8fR4RpZD24id8PMmEP+MCaGs3UNnOkv7jxO3Q6aDfTujPuPZ90HH8YkhgfHWlc3zDXyW4ExBJ0XS/DNV/gVZRcob85u6IRiRlJWtE3831GQy9F8FmBVhtbvu0TzjDRpL1tYKI51dinwcypQGt+MWq1CAHliJZekgZeAK5AIqctTPMNK9MY1VxXmAbDpJNHkbkyed4rVzNQ0ib1nf2tw5x+7ngkmm7YUzDP270ZOBP3E3JDywlL7vl1UuDcXtu+SkEpZ62wtAJGK0Z3bUx3SPc9AWDJG2jVlsiB13CZRxq1BFd8ZkroFeUl5s/3gGYV5dvTZu1Bgxm87DYAwZzqrQk1LrzOH/h5GuYWsyF04cOLUGlMimUF3avsK50L5otm06a0mB0DKUDJEeX+AcFJIZAHmkEAldMyZXudjk05FfayclfzkHeiY7v3/onO45sX6MbYl8ilPaCQwzsueAqCuhx3dhJ4Xwm8le9hBRdaTxXrKOOa1ZO1VdEQLz5sDZI+93yprWwY7J7FcYuAx24GAHXg/k5LmLW3OImf3+wuxyE9ubRxIFYZdNV5fFEKL1fYb5doIwrD6blcuK7OCzYJ0ScQJhUV3sdKBVRZabUJgIeqRzES/yDmOwfsVRp51GJuUNnb+SB/52VJ955l++QxP5tLwf6BvDr7QvDv5OdzcnB4cYDtGn1BtSfkpK5L9gub/MTN3vP9Z9lBdvCMPP7p3ecP70f47o8sv5RPfCDU3sFhtk8+yAkv2d7BszcHRy/JOZ1Sxfee70N1rQ0v3tvcZzjRZniMibvd9xu0yrif7fyX/i52IUk81dn+gBWHhejM+8EjksTN8egAGTgUDy0gHlpARFh7aAHx0ALioQXEyg36/64FxPehRabVUOIWZ9+Tzz+//vl4qM+lM7PusVzvYdbP3sGLl4mEijdpp/XXEApWrKnb2MvdzA6yc3YFsc59oXXBQIOpZAia6i3oS11YBXHKSzZh1Oxxrvec85PmuYTCO76SSF/gzmpqQrToDRZ0Zj8bEh1joWNguoqL0LbsBtN9sJ/dZjr6662ms5/dYjqpB2aMogVvMt2whLFi0h5WN5h0CKX9Sb/btSg7Jpa2vgsy15/xXwNDv3IuBmhdKwV8FzR2b9wBu0Xpav243mPfpS0HQ3gpoyYzvGK/t5IkLpGWPGRi1tTMj50633m54jNFEUIwbSaj44zJsHLyK8u9EIX/uLgB6YT1A7n4BpuwaB9Nn0DAlOpsXSyurZjkjf2oI6hChaei4K6ElhVbIb7f5XTBPCGUf1Vzx06y1G0yNwC0KMUo2cge9+xvomWy8Xtr9w8GHWTL/YEHeXh3dEfteSmboiX3V/af3uAOmVG0oIYOn4AP7lfk13nyqbZb1KYJ0qK4gBcu/JC+1qFU8YFI1gwfZLWSljTbEpjh2nW/7H5dT0OxvuU+sfTyo5SzkuGKwwV1YpGJmbVlER+aEBPPDM0CYLDUa3Zj8OW1ex3N4TMb2wyk9dOE7Nrw/o1n2oDAOnNtSsPRbC7Z9CI6husncx9k0QebzuWYMS+5WV5swFzXf7XprI7SNt24HpVvOg+Gfm40R/LqCn5QyPwSqNQxhNf+3wOHC3+DbMNuyp77zR5tPZfKXOD90FoEqMjnUvn5dgMzWHE5BrDIWtuiP/JxgDnlAtwBPW4foylC1fAng9uxYqqKzvp3y7Wz2a+6FqkbzNr5crNJbz9dSSes1K1w/k4uiJGkorXls5r9Yw+WRNwg60UOck3IncUVQRAyT7nOVOTo9h3+a2CQUysvRNTqPAv2c58Dn0UEap8PkSf5z//2M182E6uyYWqPm/+n+NkAFO3v4ZJNb8x2UBLPvv40tR9de6ISoG92qmpZDJPbjTYxwkAtC7RfDU7VDJzd2850Jgvy5fT1sEld1zS/v0W1I/Ynk0XvqN9xMm+B6k+Gx+T647jZRO7cV3QgAhS8pVhF9L6mi4YcnvMaBnhbfIZhVyD1Om5/93lxXMdh2uYhvcYhA+P6CviBsQQ5dogRdBqTbMwF2NdN7xtf1XywZcEKOaSUs3a17+UMzD5YklZcp5CX/vWSi1TfThZeyllmX8uiCM6h3VPst4YrVqTujDUuWZi7U1DJggJB81DOP46296GKqCcN9VwAIMMMb9tmA8dkvHdF1V4pZ3vOjFHK2Tjrr9OFf6fZ6nde7HmSkt5bspz5NHS3biht7DJBB4CU06lmaXOvyLpzu23AMV1IXS2VgZ7wgmGnAE1or6S4UYxW94UhS7k4IlnMmQAscDGLzjnmbbgI0EfaFLIxj4hU8Hem1KMUPC7qxsRaUAtOFM+2BiswANZb6exXu1dYwtoV+4rzDgCVSJRQjb+tRxPm8PLUGEukSMy8cikyOLl2ldOdTv7WGXSdDcmRe7opSw2nFfsFLO+PRNyAhH01irbaC5oKuFTcLIdB8b/eGyh+wJCaAPMMV71HEDS7YvaLC7iT75OBzZuKIq2COc9PtH5Ttg6Gn2i4sVbmehjdJwAitRzZ4QfY1rSkof/Q9Y03EnYPn/oZhrZ6bkydYfF8zTJ3/V2UTMw6V9aAeTH5dCKLZRaXH1hrX7hBq0X810DYwpBLfpUsMRSlme5gAp7lEJoNGFk3Mlx/jnmOGwqj6ALfwzyXoQ3xU1eyaMrNzPTJq2vRbkn9AsqzGFrVGw2eKxa1gemO/v8CAAD//9DSvvc=" } diff --git a/filebeat/module/apache/_meta/fields.yml b/filebeat/module/apache/_meta/fields.yml index ed6de2fa81b5..2da3f340f3f8 100644 --- a/filebeat/module/apache/_meta/fields.yml +++ b/filebeat/module/apache/_meta/fields.yml @@ -62,7 +62,7 @@ fields: - name: device type: alias - path: user_agent.device + path: user_agent.device.name migration: true - name: major type: alias diff --git a/filebeat/module/apache/access/ingest/default.json b/filebeat/module/apache/access/ingest/default.json index 5664842dda51..f3df2bbddfe9 100644 --- a/filebeat/module/apache/access/ingest/default.json +++ b/filebeat/module/apache/access/ingest/default.json @@ -42,6 +42,12 @@ "field": "apache.access.agent", "ignore_failure": true } + }, { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } }, { "rename": { "field": "user_agent.os", diff --git a/filebeat/module/apache/access/test/test.log-expected.json b/filebeat/module/apache/access/test/test.log-expected.json index 074b448c097f..bb6ca0490aeb 100644 --- a/filebeat/module/apache/access/test/test.log-expected.json +++ b/filebeat/module/apache/access/test/test.log-expected.json @@ -35,7 +35,7 @@ "source.ip": "192.168.33.1", "url.original": "/hello", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "50", "user_agent.minor": "0", "user_agent.name": "Firefox", @@ -77,7 +77,7 @@ "source.ip": "172.17.0.1", "url.original": "/stringpatch", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "15", "user_agent.minor": "0", "user_agent.name": "Firefox Alpha", @@ -104,7 +104,7 @@ "source.domain": "monitoring-server", "url.original": "/status", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "15", "user_agent.minor": "0", "user_agent.name": "Firefox Alpha", diff --git a/filebeat/module/apache/fields.go b/filebeat/module/apache/fields.go index bc2ad9b2cd54..08c88521198c 100644 --- a/filebeat/module/apache/fields.go +++ b/filebeat/module/apache/fields.go @@ -32,5 +32,5 @@ func init() { // AssetApache returns asset data. // This is the base64 encoded gzipped contents of module/apache. func AssetApache() string { - return "eJysmM+OozgQxu95ilLf24c95rDSaqXVHmakkbrvyDEV8DS4mHKRFm8/gkBP/hhiQzi1TNf3/eyqGLte4QO7PehGmxJ3AGKlwj28/DMMvOwAcvSGbSOW3B7+3gEAnF/Cd8rbqg/yJbFkhtzRFnsQbvvBo8Uq9/sh4BWcrnGy+WsYA5CuwT0UTG0zjgS8Br/Kao8ejsRw0ObjU3MOhupGiz3YykoHn1ZKoCqfLEb7UeKS5YrHGPT+aziEFAq/lGCsSTCzzdXbSUn35DdvGi3lHjy1bFDpPOdrhP6pbcH6vArjat4be1+phknIUJXofV4jdZ69WhCK5TC2KZE3UwRlYhgOlHeZRyfq0Ane2j0CKUUaxegbch5VrxWUiQFpPXLW/5mI0MepQFyMZ41SUr5uzr9a9KKCClHT5dTSa7lSxLawTq8pth47OyF7S27NjMOhMc5TfWSG8tTsXheYFy2tD+nEcRyROfnHdpXvGY0Ye12gkxXFnQ2Bsamf/23N+99u2jCzcV9K5niy5jYLy1MKTmtWZ2lJL0Fq/ZNu07GCY04mGsO6p2DMyMRiNFpMuR1jTiYWI7Afr6CYUYmFoJBJIgJ5dWyrKvRhSkPJnlSn5DeXag/znGrtYTYWLPm5tU1n2Zqk8A67hmVeKeZLUSDNHIrX7NSGnFiHTrYs9HjmLpDUQ73Y9TbUOuEus55Cn/RVaA8VY+EqMsO/bYdaUIqFYSwsuSflb1ksOnlWumcV1IJU4go9r5QeC86hTUjIfLUzpl+QKzxh6i2hokKF4uKuQ97rIvWIHo6K8Wts6t2rYRquvPeRMX6y2k9KRp2rVa711OtJMR5v+EMNqaDC3cF/B3ftot2lWUy36NydOtekGoc3doBmrPrnX3KirfOjxdCkkhInjP/f33/AG/IJeTTrq/uLK8QGKV2eD+w+iW9TusDbP29v32BShfFO/IdoFmShzbMa46w5mKiVu8+Cy39jTpjqy6QMukl5WKj/VVN/L3HU7BORt8a6YiCsqCgwn/YjtfsdAAD//9uTc4g=" + return "eJysmE2PszYQx+/5FKPnvj70mEOlqlLVQytV2r0jx0zAXfDQ8ZAV377ibZ+8GGJDOEUm8///7BkMnjf4xO4IutGmxAOAWKnwCD9+GwZ+HABy9IZtI5bcEX49AACMN+FvytuqD/IlsWSG3NkWRxBu+8GzxSr3xyHgDZyucbb5ZRgDkK7BIxRMbTONBLwGv8pqjx7OxHDS5vNLcw6G6kaLPdnKSgdfVkqgKp8tJvtJ4prlhscY9P57OIQUCr+WYKxJMLPNzd1ZSffkd3caLeURPLVsUOk851uE/qptwXpchWk1H429r1TDJGSoSvQe10iNs1crQrEcxjYl8m6KoEwMw4nyLvPoRJ06wXu7ZyClSKMYfUPOo+q1gjIxIK1HzvqfiQh9nArExXjWKCXl2+b8X4teVFAharqcWnotV4rYFtbpLcXWY2cXZG/JbZlxODTGea6PzFCemt3bAvOipfUhnTiOMzInP2w3+V7QiLHXBTrZUNzZEBib+uVna9n/ftOGhY37WjLHizX3WVifUnBao07oAQ7Nbomm1v/SfU42wCzJRGNY9xKMBZlYjEaLKfdjLMnEYizkNJFiZ2VQyCQRgbw6t1UVejuloWQvqlPyu0u1h3lNtfYwOwuW/NLaprPsTVJ4m93CsqwU87ookBa+jLds14acWIdO9iz09OFdIKmnerHrbah1wl1mPYXe65vQnirGwlVkhr/th1pRioVhLCy5F+VvXSw6eVa6VxXUilTiCr2ulJ4LLqHNSMh8szOmn5IrvGDqUaGiQoXi4s5E3usi9Ts9HBXj19jUA1jDNJx7HyNj/GSzn5SMOlebXOu54ZNiPB3zhxpSQYWHr/8DPPSMDtdmMS2jsUU11qSahne2gRas+ut3cqKt85PF0KmSEmeMPz8+/oF35AvyZNZX9zdXiA1SWj2f2H0R36d0hbe/3t//glkVpoPxT6JFkJVez2aMUXMwURt3nxWXP6acMNXXSRl0k/KwUv+bpv5R4qTZJyJvjXXFQFhRUWA+70fq8H8AAAD//18WdVc=" } diff --git a/filebeat/module/iis/access/_meta/fields.yml b/filebeat/module/iis/access/_meta/fields.yml index bce554d61562..f27870e2d8bd 100644 --- a/filebeat/module/iis/access/_meta/fields.yml +++ b/filebeat/module/iis/access/_meta/fields.yml @@ -81,7 +81,7 @@ fields: - name: device type: alias - path: user_agent.device + path: user_agent.device.name migration: true - name: major type: alias diff --git a/filebeat/module/iis/access/ingest/default.json b/filebeat/module/iis/access/ingest/default.json index ff3a613723c9..0c9cbe9836b6 100644 --- a/filebeat/module/iis/access/ingest/default.json +++ b/filebeat/module/iis/access/ingest/default.json @@ -50,6 +50,12 @@ "user_agent": { "field": "iis.access.agent" } + }, { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } }, { "rename": { "field": "user_agent.os", diff --git a/filebeat/module/iis/access/test/test-iis-7.5.log-expected.json b/filebeat/module/iis/access/test/test-iis-7.5.log-expected.json index cbd93966c519..10db8a880658 100644 --- a/filebeat/module/iis/access/test/test-iis-7.5.log-expected.json +++ b/filebeat/module/iis/access/test/test-iis-7.5.log-expected.json @@ -21,7 +21,7 @@ "url.path": "/", "url.query": "-", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "0", "user_agent.name": "IE", diff --git a/filebeat/module/iis/access/test/test-ipv6zone.log-expected.json b/filebeat/module/iis/access/test/test-ipv6zone.log-expected.json index dc2796b0f547..6bdc376f1d84 100644 --- a/filebeat/module/iis/access/test/test-ipv6zone.log-expected.json +++ b/filebeat/module/iis/access/test/test-ipv6zone.log-expected.json @@ -29,7 +29,7 @@ "url.path": "/", "url.query": "-", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "70", "user_agent.minor": "0", "user_agent.name": "Chrome", diff --git a/filebeat/module/iis/access/test/test.log-expected.json b/filebeat/module/iis/access/test/test.log-expected.json index 6dc51db9aa9b..8b57fb9187db 100644 --- a/filebeat/module/iis/access/test/test.log-expected.json +++ b/filebeat/module/iis/access/test/test.log-expected.json @@ -29,7 +29,7 @@ "url.path": "/", "url.query": "q=100", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "57", "user_agent.minor": "0", "user_agent.name": "Firefox", @@ -63,7 +63,7 @@ "url.path": "/", "url.query": "-", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "57", "user_agent.minor": "0", "user_agent.name": "Firefox", @@ -108,7 +108,7 @@ "url.path": "/", "url.query": "-", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "70", "user_agent.minor": "0", "user_agent.name": "Chrome", diff --git a/filebeat/module/iis/fields.go b/filebeat/module/iis/fields.go index aa03d3123789..7c25f0875438 100644 --- a/filebeat/module/iis/fields.go +++ b/filebeat/module/iis/fields.go @@ -32,5 +32,5 @@ func init() { // AssetIis returns asset data. // This is the base64 encoded gzipped contents of module/iis. func AssetIis() string { - return "eJzsmM9u4zYQxu95isGeuzq0Nx96KVA0hwIFNkCPAiON5WlkjjJDxdDbF6SsbOKlZOpPYCwQnQzJ/L4fydFoOF/hCbsdEOkdgCNX4w6+3N9/+3IHUKIWQo0jtjv4/Q4A4G8u2xphzwKNESVbwf39N6i5gj3VqNkdwJ6wLnUX/v8VrDnioO8v1zW4g0q4bc53Ijb++jPIwF74+KOHvwaf1xGDmSkKVH29HfOc8PXXH2ydIatnjzBfz9Are5RXirckbyUGGG0fc3XGtfru8QBVs60uHkxw+evhgPDXw8M/XrkXhoJLzKLuJ7K//bq9/79kSz4pXPVXcpj7n1HzJ+xOLOV8fy8bHMDYEsiqM7ZAsO3xEWWEBOUF5QNYAgbvwXmuYAJs4XSg4hDuDXELaJ10cDIKFVoU47CMoxbMT7QxZcHWoXUDaG8BGm4JCBZIL1j+ArQHY7vvXFHARy67fBiTPXYO48FlajKXTxrjDjs4ONdkgs8tqsu8XFTlSJWYflZOWhxn8fNYw6ENW8V1IOcAo2YmQonqyAb1zJSlvE9dqe5HdAe+jItZuxBVSLFupZ7p20qd+V8LzJ5blC5XJ/RD3kpxDcMX2DYsbsW+RoYnraxOZayJmSpKFhmX4il4ZIfzw1i5lQJXRLDgHkVQ1sTwiEaafZ8Ecv8xW5VF+o9iTCeFw2vlLyhKbJdgxIcmObO6BcHmh2UjY5OD3FRo4y/YZdUGI/XWW8kSX6i4ZJmeC7x7eXqebFRnal5vQY7mP74MxgUcYzLJGGQ3wRiRScVojCsuc/4CjDGZVIxInC6gGFFJheCYyUwE1mzf1nXsCzEPJd8oTllXh6qH2SZaPczKgGUdW9v5LGs3Sagiay4rrSUs40op6bpCHqkNlmRqfywhi9atWehz6VEhZ1f1Ute74NYf13JSjn3JF6FdVUyFq7kIf1sPNaGUCiNYEduN9m9aLHnzyHVbBdSE1MwV2i6UrguOoQ1IKPIuM27WIQvCsxpkgkbZ5s1BjG7c9Ahtsl4fev14w+W5xfYj2lShZdg0NfUvGTTMdbC80l+54RksGC847Z6tFx50b9s7Obvf5ox/u/PeT9cyGqlcfqbT/Wf1tBjts3q6yvNZPX1M9fR/AAAA//+NLFvk" + return "eJzsmM9u4zYQxu95isGeuzq0Nx96KVA0hwIFNkCPAiON5WlkjjJDxdDbF6SsbOKlZOpPYCwQnQzJ/L4fydFoOF/hCbsdEOkdgCNX4w6+3N9/+3IHUKIWQo0jtjv4/Q4A4G8u2xphzwKNESVbwf39N6i5gj3VqNkdwJ6wLnUX/v8VrDnioO8v1zW4g0q4bc53Ijb++jPIwF74+KOHvwaf1xGDmSkKVH29HfOc8PXXH2ydIatnjzBfz9Are5RXirckbyUGGG0fc3XGtfru8QBVs60uHkxw+evhgPDXw8M/XrkXhoJLzKLuJ7K//bq9/79kSz4pXPVXcpj7n1HzJ+xOLOV8fy8bHMDYEsiqM7ZAsO3xEWWEBOUF5QNYAgbvwXmuYAJs4XSg4hDuDXELaJ10cDIKFVoU47CMoxbMT7QxZcHWoXUDaG8BGm4JCBZIL1j+ArQHY7vvXFHARy67fBiTPXYO48FlajKXTxrjDjs4ONdkgs8tqsu8XFTlSJWYflZOWhxn8fNYw6ENW8V1IOcAo2YmQonqyAb1zJSlvE9dqe5HdAe+jItZuxBVSLFupZ7p20qd+V8LzJ5blC5XJ/RD3kpxDcMX2DYsbsW+RoYnraxOZayJmSpKFhmX4il4ZIfzw1i5lQJXRLDgHkVQ1sTwiEaafZ8Ecv8xW5VF+o9iTCeFw2vlLyhKbJdgxIcmObO6BcHmh2UjY5OD3FRo4y/YZdUGI/XWW8kSX6i4ZJmeC7x7eXqerNeJvUnXJveW5mj+48uIXAAzJpOMQXYTjBGZVIzGuOIy8S/AGJNJxRjZ05kUKyODYyYzEVizfVvXsc/EPJR8ozhlXR2qHmabaPUwKwOWdWxt57Os3SShiqy5LLeWsIwrpeTsCnmkQFiSrv3ZhCxat2ahz/VHhZxd1Utd74Jbf2bLSTn2OV+EdlUxFa7mIvxtPdSEUiqMYEVsN9q/abHkzSPXbRVQE1IzV2i7ULouOIY2IKHIu8y4WZssCM/qkgkaZZs3BzG6cecj9Mp6fej1412X5xbbj+hVhb5h09TUv2TQMNfB8kqT5YYHsWC84Mh7tl542r1tA+XsfpuD/u0OfT9d32ikcvmZjvif1dNitM/q6SrPZ/X0MdXT/wEAAP//la5dsw==" } diff --git a/filebeat/module/nginx/access/_meta/fields.yml b/filebeat/module/nginx/access/_meta/fields.yml index 7e1e78715638..de79b16b923e 100644 --- a/filebeat/module/nginx/access/_meta/fields.yml +++ b/filebeat/module/nginx/access/_meta/fields.yml @@ -52,7 +52,7 @@ fields: - name: device type: alias - path: user_agent.device + path: user_agent.device.name migration: true - name: major type: alias diff --git a/filebeat/module/nginx/access/ingest/default.json b/filebeat/module/nginx/access/ingest/default.json index 4da914e7ef35..cd23985d41b4 100644 --- a/filebeat/module/nginx/access/ingest/default.json +++ b/filebeat/module/nginx/access/ingest/default.json @@ -94,6 +94,13 @@ "target_field": "user_agent.original" } }, + { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } + }, { "rename": { "field": "user_agent.os", diff --git a/filebeat/module/nginx/access/test/test.log-expected.json b/filebeat/module/nginx/access/test/test.log-expected.json index 8e8dff7e7de4..42d8e5fe9f68 100644 --- a/filebeat/module/nginx/access/test/test.log-expected.json +++ b/filebeat/module/nginx/access/test/test.log-expected.json @@ -22,7 +22,7 @@ "source.ip": "10.0.0.2", "url.original": "/ocelot", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "49", "user_agent.minor": "0", "user_agent.name": "Firefox", @@ -53,7 +53,7 @@ "source.ip": "172.17.0.1", "url.original": "/stringpatch", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "15", "user_agent.minor": "0", "user_agent.name": "Firefox Alpha", @@ -92,7 +92,7 @@ "source.ip": "85.181.35.98", "url.original": "/ocelot", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "49", "user_agent.minor": "0", "user_agent.name": "Firefox", @@ -130,7 +130,7 @@ "source.ip": "85.181.35.98", "url.original": "/ocelot", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "70", "user_agent.minor": "0", "user_agent.name": "Chrome", @@ -172,7 +172,7 @@ "source.ip": "199.96.1.1", "url.original": "/assets/xxxx?q=100", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "Other", "user_agent.original": "Amazon CloudFront", "user_agent.os.full_name": "Other", @@ -205,7 +205,7 @@ "source.ip": "2a03:0000:10ff:f00f:0000:0000:0:8000", "url.original": "/test.html", "user.name": "-", - "user_agent.device": "Spider", + "user_agent.device.name": "Spider", "user_agent.major": "1", "user_agent.minor": "0", "user_agent.name": "Facebot", @@ -231,7 +231,7 @@ "source.address": "127.0.0.1", "source.ip": "127.0.0.1", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "Other", "user_agent.original": "-", "user_agent.os.full_name": "Other", diff --git a/filebeat/module/nginx/fields.go b/filebeat/module/nginx/fields.go index 0cb7f07f5ab2..c6cd2567c651 100644 --- a/filebeat/module/nginx/fields.go +++ b/filebeat/module/nginx/fields.go @@ -32,5 +32,5 @@ func init() { // AssetNginx returns asset data. // This is the base64 encoded gzipped contents of module/nginx. func AssetNginx() string { - return "eJysl89u4zYQxu9+isGeN3oAHwoUCyywhxZFT70pDDmSp0tx1Bkqrd++oOzNOg4pU7J5ciTN9/3mTyjxCb7jcQ+hp/DfDiBS9LiHT7+nvz/tAByqFRojcdjDLzsAgN/YTR6hY4HRiFLoIR4Q5hDw3ENHHrXZAeiBJbaWQ0f9HqJMuAPoCL3T/Sz1BMEM+NM+rXgccQ+98DSer2QY0vo6C0EnPJQA0rr0u/Q01qLq2+Wc8YJ5Wl84RENBzxZzRX6CnPQTzxtKDucSSXDgiC2NrSeN7x75gWdEzPHqzgJiWr+GUxRwd3aAb3+AcU5QFbWBbxFIwUAyhRe0ZlIEmi9aHgYOEBkoWD85/AwvqORQ50ytJwzXoHAh//md1alXBzQORcHTd4Tnv56+svxrxKFLv56bD2p/ovGgPImdwUlBUCMLusT1fLrT0HgRmq3uC7tjqxhi83KMqPnyejLXd0YTD3s4xDg2gjpyUGySVlZmoF7MqRPneV9o80qEt0w3eE6K0qafKz1TXJOJq/EcMB7YbavzPxNqbLIKVemKX5uo+IaFegrmOrTGMGG3ryhKHLZknA+tm6bTTLaW3druvh9qjSZOmtOp4+hQBOWefhc0auxN/3Enqhnudg5c2/ry/1iZ4/rNAoW3waWkw1ey191YTi2bXlFnqbSXIIP5m6/bsoGjJFONQeEhGAWZWozRRHu4H6MkU4uR2Zc3UBRUaiE4Z7ISgbXpJu9zL6h1KO2D5pT17lFNMI+Z1gRz58Cylmq7nuXeJuV32i0sZaVV+3aPXPgW27JlWw6RAoZ4T8XPn3o9cnNTr7bwlqcQ5diScu4dvwntpmItnGc7P3Y/1IJSLYxgTxwe1L9lsermUTw+aqAWpFZW6HGjdFuwhPYDCUXebZEPPs7P8qtO85ZDQBvntPKnIM+hX3eW//KmCeQwROoI5ca51+Mrrj0Nee6bXFzNl/hYyLbsNgpbVG0+Rtb4xc1+8SBoXLPJdUBV0689cOWjrv3+DwAA///Lb/Q7" + return "eJysl8+O2zYQxu9+ikHOWT2ADwWKAAFyaFH01JuWS47kaSiOOkNt67cvKDsbr5aSKck82ZLn+37zx5T4BN/xfITQUvjvABApejzCp9/T908HAIdqhfpIHI7wywEA4Dd2g0doWKA3ohRaiCeEMQQ8t9CQR60OAHpiibXl0FB7hCgDHgAaQu/0OEo9QTAd/rRPK557PEIrPPTXKxmGtL6OQtAId3MAad363Xoaa1H17XLOeME8rS8coqGgV4uxIj9BLvqJ5w0lh3OLJNhxxJr62pPGdz/5gWdEzHlyZwExrV/DJQq4uTrAtz/AOCeoilrBtwikYCCZwgtaMygCjRctdx0HiAwUrB8cfoYXVHKoY6bWE4YpKNzIf35ndenVCY1DUfD0HeH5r6evLP8acejSp+fqg9qfaDwoD2JHcFIQ1MiCLnE9X+5U1N+EZqv7wu5cK4ZYvZwjar68nsz0Tm/i6QinGPtKUHsOilXSysp01Iq5dOI67wttXonwlukGz0FR6vRxpWeKqzJxJZ4dxhO7bXX+Z0CNVVahKF3xaxMVX7FQS8FMQ0sME3b9iqLEYUvG+dCyabrMZG3Zre3u+6HWaOKgOZ0yjgZFUPb0e0ajxN60H3eikuGux8C1rZ//j81zTJ8sMPM0uJV0+Ep22o3l1LLpXXRyf+SlLKc0nfmbp73ZADMnU4xB4SEYMzKlGL2J9rQfY06mFGOmpyspdk4G50xWIrBWzeB97im1DqV+0Jyy7h7VBPOYaU0wOweWda6261n2Nim/3W5hmVdatXm3yDMvZFv2bcshUsAQ91T8+r7XIld39UoLb3kIUc41Kece9JvQ7iqWwnm248/2Qy0olcIItsThQf1bFituHsXzowZqQWplhR43SvcF59B+IKHIuy3ywWf6UX7Vkd5yCGjjmFb+KOQ5tOsO9F/eNIEchkgNodw5/Hp8xbVHIs9tlYsreR3vZ7Kdd+uFLapWHyNL/OJmv3gSNK7a5NqhqmnXnrryUVO//wMAAP//dT72Cg==" } diff --git a/filebeat/module/traefik/access/_meta/fields.yml b/filebeat/module/traefik/access/_meta/fields.yml index 0379c081e163..319419901c3c 100644 --- a/filebeat/module/traefik/access/_meta/fields.yml +++ b/filebeat/module/traefik/access/_meta/fields.yml @@ -62,7 +62,7 @@ fields: - name: device type: alias - path: user_agent.device + path: user_agent.device.name - name: major type: alias path: user_agent.major diff --git a/filebeat/module/traefik/access/ingest/pipeline.json b/filebeat/module/traefik/access/ingest/pipeline.json index 5c9a30602391..09d50d384434 100644 --- a/filebeat/module/traefik/access/ingest/pipeline.json +++ b/filebeat/module/traefik/access/ingest/pipeline.json @@ -93,6 +93,13 @@ "ignore_failure": true } }, + { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } + }, { "rename": { "field": "user_agent.os", diff --git a/filebeat/module/traefik/access/test/test.log-expected.json b/filebeat/module/traefik/access/test/test.log-expected.json index eecee7f1d16a..0c18065cb16c 100644 --- a/filebeat/module/traefik/access/test/test.log-expected.json +++ b/filebeat/module/traefik/access/test/test.log-expected.json @@ -22,7 +22,7 @@ "traefik.access.user_identifier": "-", "url.original": "/ui/favicons/favicon-16x16.png", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "Chrome", "user_agent.original": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36", "user_agent.os.full_name": "Linux", @@ -60,7 +60,7 @@ "traefik.access.user_identifier": "-", "url.original": "/ui/favicons/favicon.ico", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "Chrome", "user_agent.original": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36", "user_agent.os.full_name": "Linux", @@ -97,7 +97,7 @@ "traefik.access.user_identifier": "-", "url.original": "/en/", "user.name": "-", - "user_agent.device": "iPhone", + "user_agent.device.name": "iPhone", "user_agent.name": "Mobile Safari", "user_agent.original": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.1", "user_agent.os.full_name": "iOS 11.2.5", @@ -128,7 +128,7 @@ "traefik.access.user_identifier": "-", "url.original": "/", "user.name": "-", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "curl", "user_agent.original": "curl/7.62.0", "user_agent.os.full_name": "Other", @@ -165,7 +165,7 @@ "traefik.access.user_identifier": "-", "url.original": "/assets/52f8f2e711d235d76044799e/owners?oauth_token=ya29.GltABOXd_gtG-XVvYX2YhxXJiXVvbHRMXn9fbzc_mDfl2rDhqK0CrAlwuwwRWnNnEaMDwkmyI7-QGbRSB0Hzje2cc__FjTQ1iuiYTSIBaIPfxSWip5jx6zqvsVVo", "user.name": "-", - "user_agent.device": "Generic Smartphone", + "user_agent.device.name": "Generic Smartphone", "user_agent.name": "Other", "user_agent.original": "Android", "user_agent.os.full_name": "Android", @@ -202,7 +202,7 @@ "traefik.access.user_identifier": "-", "url.original": "/marketplace/tax?oauth_token=ya29.Gl0fBWnrJ7DcEU-tN-O3Vxn2XZVaz2I-hFTjP1JQzhYFVT-SKtlmo9hSzrx3n82LUwUxJ1s5lmU8U3Mc9gA_aCxBk49ShYEwvmYOWxJJyldDIJ7hY4us4LoiSY1OqAM", "user.name": "-", - "user_agent.device": "Generic Smartphone", + "user_agent.device.name": "Generic Smartphone", "user_agent.name": "Other", "user_agent.original": "Android", "user_agent.os.full_name": "Android", diff --git a/filebeat/module/traefik/fields.go b/filebeat/module/traefik/fields.go index d40a8182297f..8fb1bba2b340 100644 --- a/filebeat/module/traefik/fields.go +++ b/filebeat/module/traefik/fields.go @@ -32,5 +32,5 @@ func init() { // AssetTraefik returns asset data. // This is the base64 encoded gzipped contents of module/traefik. func AssetTraefik() string { - return "eJyslk9vozwQxu/5FKPei1S97ymHvVSqtIe9rHpHLgzgjfGw43Ervv3KJKQU2ZQQfAvEz++ZPx7zCCfsjyCssNKnA4BoMXiEh9fzk4cDQImuYN2JJnuEHwcAgF9UeoNQEUOn2GlbgzQIl01gqIZKG3TZAaDSaEp3HPY9glUtTnlhSd/hEWom312eRJBhvQxSUDG1aV5YU+aUq4oCnbs+jqEX8GE9kxWlrbsghhRMrZwJwdHVTMzQ1JR3yLku0YquNPKX/4wOT9h/EJezdws+w/rpBmu/X57h6f+n/+DMkB6oGl4URqOVqCfGvx6d5AX52T9GR4ZsfZud1wbB+vYNORi4EFwUXzFZQVvm4ed+CRkcqBbHBIyYUIIyauRNFafgw7PZaCNqwrMZPVwI8NEg45gV0ENnfSguJ8biDqnsc4dWsrde0EVdKqPV/E2npDlCI9JljK4j6zALWlGZVteszlkV9phomZYEc93daMGR5wIzVZb89WyuBQ/nJ9koaXDYl0X2rWG2KA3Ny74y2UOFs6jCqnATrbgQKJuMWNfaqvnWNcBgO39HdprslojjW9e11Lkx84LKW6v7tbOdKPEuprPOR4XMidG8st4JjTV4Vc/H9LrmzoeNt5Y+fcbSPuYXKCSuvKlkie+6mFdjObRoeAmd60lVf2ie9A2UuMwVou0ukKjMCOmUFM39kLjMCInMww2MqMqIoJjEjQByWeWNiY39KSjfqfrkvmmAgNqnBwJqsQ3IxaPeQlpOX3xubCHNlaIzpkZKfDxsGS8FWdEWrdyTrcu3SY2UfaP3ifVWuM+1o9htswn8jeKINlQM8/x+ZFLp80KsNdmdMrskdk2rln6vQialZtHtV8KU4OFfAAAA///Vouzi" + return "eJyslk9vozwQxu/5FKPei1S97ymHvVSqtIe9rHpHLgzgjfGw43Ervv3KJKQU2ZQQfAvEz++ZPx7zCCfsjyCssNKnA4BoMXiEh9fzk4cDQImuYN2JJnuEHwcAgF9UeoNQEUOn2GlbgzQIl01gqIZKG3TZAaDSaEp3HPY9glUtTnlhSd/hEWom312eRJBhvQxSUDG1aV5YU+aUq4oCnbs+jqEX8GE9kxWlrbsghhRMrZwJwdHVTMzQ1JR3yLku0YquNPKX/4wOT9h/EJezdws+w/rpBmu/X57h6f+n/+DMkB6oGl4URqOVqCfGvx6d5AX52T9GR4ZsfZud1wbB+vYNORi4EFwUXzFZQVvm4ed+CRkcqBbHBIyYUIIyauRNFafgw7PZaCNqwrMZPVwI8NEg45gV0ENnfSguJ8biDqnsc4dWsrde0EVdKqPV/E2npDlCI9JljK4j6zALWlGZVteszlkV9phomZYEc93daMGR5wIzVZb89WyuBQ/nJ9koaXDYl0X2rWG2KA3Ny74y2UOFs6jCqnATrbgQKJuMWNfaqvnWNcBgO39HdprslojjW9e11Lkx84LKW6v7tbOdKPEuprPOR4XMidG8st4JjTV4Vc/H9LrmzoeNt5Y+fcbSPuYXKCSuvKlkie+6mFdjObRoeGed2EGeHFf1h+aZ34CKy1wh2u4CicqMkE5J0dwPicuMkGgub2YsVoRiEjcCyGWVNyY2+6egfKfqk/umAQJqnx4IqMU2IBePegtpOX3x4bGFNFeKDpoaKfEFsWXGFGRFW7RyT7YuHyg1UvaN3ifWW+E+145iV84m8DeKI9pQMQz1+5FJpc9bsdZkd8rsktg1rVr6vQqZlJpFt18JU4KHfwEAAP//fX3usQ==" } diff --git a/heartbeat/docs/fields.asciidoc b/heartbeat/docs/fields.asciidoc index 34e4f9231fbc..71476ed5a08a 100644 --- a/heartbeat/docs/fields.asciidoc +++ b/heartbeat/docs/fields.asciidoc @@ -3405,16 +3405,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/heartbeat/include/fields.go b/heartbeat/include/fields.go index f92d0afbe476..8a64493dd9da 100644 --- a/heartbeat/include/fields.go +++ b/heartbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/journalbeat/docs/fields.asciidoc b/journalbeat/docs/fields.asciidoc index 395ca8bc0b74..c392cad930f2 100644 --- a/journalbeat/docs/fields.asciidoc +++ b/journalbeat/docs/fields.asciidoc @@ -3672,16 +3672,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/journalbeat/include/fields.go b/journalbeat/include/fields.go index 6198a3e40242..7f852eee0706 100644 --- a/journalbeat/include/fields.go +++ b/journalbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/libbeat/_meta/fields.ecs.yml b/libbeat/_meta/fields.ecs.yml index dc69656e1c34..ca3794ef8a86 100644 --- a/libbeat/_meta/fields.ecs.yml +++ b/libbeat/_meta/fields.ecs.yml @@ -2261,10 +2261,6 @@ type: keyword description: > Major version of the user agent. - - name: user_agent.device - type: keyword - description: > - Name of the physical device. - name: user_agent.os.major type: long description: > diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 4c17d121b433..21edc2ef2953 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -7159,16 +7159,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/metricbeat/include/fields/fields.go b/metricbeat/include/fields/fields.go index c9eefd5f361c..8a7493c954b2 100644 --- a/metricbeat/include/fields/fields.go +++ b/metricbeat/include/fields/fields.go @@ -32,5 +32,5 @@ func init() { // AssetLibbeatFieldsYml returns asset data. // This is the base64 encoded gzipped contents of ../libbeat/fields.yml. func AssetLibbeatFieldsYml() string { - return "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" + return "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" } diff --git a/packetbeat/docs/fields.asciidoc b/packetbeat/docs/fields.asciidoc index 4f93ecbaa39c..9f0f6f64a2d2 100644 --- a/packetbeat/docs/fields.asciidoc +++ b/packetbeat/docs/fields.asciidoc @@ -5307,16 +5307,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/packetbeat/include/fields.go b/packetbeat/include/fields.go index bc5760d8e0bb..24ff7e760319 100644 --- a/packetbeat/include/fields.go +++ b/packetbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/winlogbeat/docs/fields.asciidoc b/winlogbeat/docs/fields.asciidoc index 01813db07aa0..da449fcbf75d 100644 --- a/winlogbeat/docs/fields.asciidoc +++ b/winlogbeat/docs/fields.asciidoc @@ -3303,16 +3303,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/winlogbeat/include/fields.go b/winlogbeat/include/fields.go index 22cc86a23174..1757d10a0fd0 100644 --- a/winlogbeat/include/fields.go +++ b/winlogbeat/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "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" + return "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" } diff --git a/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json b/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json index 5ce22d32818e..00c59caa23f4 100644 --- a/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json +++ b/x-pack/filebeat/module/suricata/eve/ingest/pipeline.json @@ -233,6 +233,13 @@ "ignore_missing": true } }, + { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } + }, { "rename": { "field": "user_agent.os", diff --git a/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json b/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json index e6ee641b6be8..15317f5ad39e 100644 --- a/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json +++ b/x-pack/filebeat/module/suricata/eve/test/eve-alerts.log-expected.json @@ -54,7 +54,7 @@ "url.domain": "example.net", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -118,7 +118,7 @@ "url.domain": "example.net", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -182,7 +182,7 @@ "url.domain": "example.net", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -246,7 +246,7 @@ "url.domain": "example.org", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -310,7 +310,7 @@ "url.domain": "example.org", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -374,7 +374,7 @@ "url.domain": "example.org", "url.original": "/", "url.path": "/", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "7", "user_agent.minor": "58", "user_agent.name": "curl", @@ -437,7 +437,7 @@ "url.domain": "security.ubuntu.com", "url.original": "/ubuntu/dists/bionic-security/InRelease", "url.path": "/ubuntu/dists/bionic-security/InRelease", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -499,7 +499,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic/InRelease", "url.path": "/ubuntu/dists/bionic/InRelease", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -561,7 +561,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/InRelease", "url.path": "/ubuntu/dists/bionic-updates/InRelease", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -623,7 +623,7 @@ "url.domain": "security.ubuntu.com", "url.original": "/ubuntu/dists/bionic-security/main/source/by-hash/SHA256/f5ec03d97ca76c98162d9233c8b7c578c52897e2136428277baf2e7b633a8e72", "url.path": "/ubuntu/dists/bionic-security/main/source/by-hash/SHA256/f5ec03d97ca76c98162d9233c8b7c578c52897e2136428277baf2e7b633a8e72", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -685,7 +685,7 @@ "url.domain": "security.ubuntu.com", "url.original": "/ubuntu/dists/bionic-security/main/binary-amd64/by-hash/SHA256/c5b8346a3221bc9a23a79ba4dc4e730a6319a77fc9d63872dfc56539a0810015", "url.path": "/ubuntu/dists/bionic-security/main/binary-amd64/by-hash/SHA256/c5b8346a3221bc9a23a79ba4dc4e730a6319a77fc9d63872dfc56539a0810015", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -747,7 +747,7 @@ "url.domain": "security.ubuntu.com", "url.original": "/ubuntu/dists/bionic-security/universe/binary-amd64/by-hash/SHA256/e5cc957139a25a0fee47cbf2c0fac8ad5cab50346d6a74abe031748924c5b558", "url.path": "/ubuntu/dists/bionic-security/universe/binary-amd64/by-hash/SHA256/e5cc957139a25a0fee47cbf2c0fac8ad5cab50346d6a74abe031748924c5b558", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -809,7 +809,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-backports/InRelease", "url.path": "/ubuntu/dists/bionic-backports/InRelease", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -871,7 +871,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/main/source/by-hash/SHA256/65f2e3a4e9d89d9d4b5e3d42e586bc96f48a24466b0ad0b4a707255e44a26b03", "url.path": "/ubuntu/dists/bionic-updates/main/source/by-hash/SHA256/65f2e3a4e9d89d9d4b5e3d42e586bc96f48a24466b0ad0b4a707255e44a26b03", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -933,7 +933,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/universe/source/by-hash/SHA256/56cfd9cc2efa61dff7428dddf921c3cd6047ab8e6484a7f1888e4c3f7252f1ef", "url.path": "/ubuntu/dists/bionic-updates/universe/source/by-hash/SHA256/56cfd9cc2efa61dff7428dddf921c3cd6047ab8e6484a7f1888e4c3f7252f1ef", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -995,7 +995,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/main/binary-amd64/by-hash/SHA256/4360137dc8f98b47648da1fef5472ef234fb02115bc2b29873bcaeee62637e70", "url.path": "/ubuntu/dists/bionic-updates/main/binary-amd64/by-hash/SHA256/4360137dc8f98b47648da1fef5472ef234fb02115bc2b29873bcaeee62637e70", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -1057,7 +1057,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/restricted/binary-amd64/by-hash/SHA256/c93fdc7f10cad1263349fd7b5bdd6a7f7163165b96ad263b3e12022e319d0d12", "url.path": "/ubuntu/dists/bionic-updates/restricted/binary-amd64/by-hash/SHA256/c93fdc7f10cad1263349fd7b5bdd6a7f7163165b96ad263b3e12022e319d0d12", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -1119,7 +1119,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/universe/binary-amd64/by-hash/SHA256/5190f7afbee38b3cb32225db478fdbabd46f76eaa9c5921a13091891bf3e9bbc", "url.path": "/ubuntu/dists/bionic-updates/universe/binary-amd64/by-hash/SHA256/5190f7afbee38b3cb32225db478fdbabd46f76eaa9c5921a13091891bf3e9bbc", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -1180,7 +1180,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/universe/i18n/by-hash/SHA256/9fe539b7036e51327cd85ca5e0a4dd4eb47f69168875de2ac9842a5e36ebd4a4", "url.path": "/ubuntu/dists/bionic-updates/universe/i18n/by-hash/SHA256/9fe539b7036e51327cd85ca5e0a4dd4eb47f69168875de2ac9842a5e36ebd4a4", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", @@ -1241,7 +1241,7 @@ "url.domain": "archive.ubuntu.com", "url.original": "/ubuntu/dists/bionic-updates/multiverse/binary-amd64/by-hash/SHA256/8ab8cb220c0e50521c589acc2bc2b43a3121210f0b035a0605972bcffd73dd16", "url.path": "/ubuntu/dists/bionic-updates/multiverse/binary-amd64/by-hash/SHA256/8ab8cb220c0e50521c589acc2bc2b43a3121210f0b035a0605972bcffd73dd16", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "1", "user_agent.minor": "3", "user_agent.name": "Debian APT-HTTP", diff --git a/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json b/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json index c86a704ba849..66c1f46efba6 100644 --- a/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json +++ b/x-pack/filebeat/module/suricata/eve/test/eve-small.log-expected.json @@ -99,7 +99,7 @@ "url.domain": "192.168.86.28", "url.original": "/dd.xml", "url.path": "/dd.xml", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "67", "user_agent.minor": "0", "user_agent.name": "Chrome", @@ -150,7 +150,7 @@ "url.domain": "192.168.86.28", "url.original": "/ssdp/device-desc.xml", "url.path": "/ssdp/device-desc.xml", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.major": "67", "user_agent.minor": "0", "user_agent.name": "Chrome", diff --git a/x-pack/filebeat/module/zeek/http/ingest/pipeline.json b/x-pack/filebeat/module/zeek/http/ingest/pipeline.json index 2da6e89dffc1..c0614b4f3a13 100644 --- a/x-pack/filebeat/module/zeek/http/ingest/pipeline.json +++ b/x-pack/filebeat/module/zeek/http/ingest/pipeline.json @@ -54,6 +54,13 @@ "ignore_missing": true } }, + { + "rename": { + "field": "user_agent.device", + "target_field": "user_agent.device.name", + "ignore_missing": true + } + }, { "rename": { "field": "user_agent.os", @@ -97,4 +104,4 @@ } } ] -} \ No newline at end of file +} diff --git a/x-pack/filebeat/module/zeek/http/test/http-json.log-expected.json b/x-pack/filebeat/module/zeek/http/test/http-json.log-expected.json index b6d7e0dca5c1..57c220b4b856 100644 --- a/x-pack/filebeat/module/zeek/http/test/http-json.log-expected.json +++ b/x-pack/filebeat/module/zeek/http/test/http-json.log-expected.json @@ -30,7 +30,7 @@ "url.domain": "ocsp.apple.com", "url.original": "/ocsp04-aaica02/ME4wTKADAgEAMEUwQzBBMAkGBSsOAwIaBQAEFNqvF+Za6oA4ceFRLsAWwEInjUhJBBQx6napI3Sl39T97qDBpp7GEQ4R7AIIUP1IOZZ86ns=", "url.port": "80", - "user_agent.device": "Other", + "user_agent.device.name": "Other", "user_agent.name": "Other", "user_agent.os.full_name": "Other", "user_agent.os.name": "Other", diff --git a/x-pack/functionbeat/docs/fields.asciidoc b/x-pack/functionbeat/docs/fields.asciidoc index c623b9401718..b062de265fc8 100644 --- a/x-pack/functionbeat/docs/fields.asciidoc +++ b/x-pack/functionbeat/docs/fields.asciidoc @@ -3284,16 +3284,6 @@ type: keyword Major version of the user agent. --- - -*`user_agent.device`*:: -+ --- -type: keyword - -Name of the physical device. - - -- *`user_agent.os.major`*:: diff --git a/x-pack/functionbeat/include/fields.go b/x-pack/functionbeat/include/fields.go index 00716b05f16d..737aef0a6914 100644 --- a/x-pack/functionbeat/include/fields.go +++ b/x-pack/functionbeat/include/fields.go @@ -19,5 +19,5 @@ func init() { // AssetFieldsYml returns asset data. // This is the base64 encoded gzipped contents of fields.yml. func AssetFieldsYml() string { - return "eJzsff1zHDdy6O/+K1B01bOULIcfoj7M1L2EJ8kWy5LMiFKcSy6lxc5gd2HOAGMAw9U6yf/+Ct0ABpiZXe6SXJ2TR13VWZqdARqNRqO/e59cseUpYbn+hhDDTclOyeuXl98QUjCdK14bLsUp+b/fEELsD2TKWVno7Bvi/nb6Dfy0TwSt2CnZ+yfDK6YNreo9+IEQs6zZKSmoYe5Bya5ZeUpyqfwTxX5ruGLFKTGq8Q/ZF1rVFp6948OjZ/uHT/ePn3w8fHF6+PT0yUn24umTf/MzDIBq/7yihh1YcMhizgQxc0bYNROGSMVnXFDDiuyb8PYPUpFSzvAVTcyca8I1fFWsGmhBNZkxwZQda0SoKMJwQhp8m+NritF4tg9uxYhFMpWK0LJ0k2cpTg2d6ZWoQ+xeseVCqqKHuX//616tZNHkFjd/3RuRv+4xcX38173/uAF3b7k2RE79wJo0mhXESAsMYTSfI6gdSEs6YeVNsMrJryw3XVD/k4nrU9ICOyK0rkueU4RsKuX+hKr/Xg/1T2x5cE3LhpGacqUjfL+kgkxYWAUtClIxQwkXU6kqmMQ+d/gnl3PZlAVsYi6FoVwQwbRh7f7iKnRGzsqSwJyaUMWINtJuK9UedREQr/1ix4XMr5gaW4oh46sXeuxQ18FnxbSms9XnBhFq2JceOvfesLKU5BepyuKGre4RPvPzOuJ0GMCf7Jvu52hl54JIM2fKIpjkVLPBcdI9yKXIqWGiZQyEFHw6ZcoeLYfSxZznc0CssYdpqhgrl0QzqvI5nZQsI+dTUjWl4XXZDuPm1YR94dqM7LdLP30uqwkXrCBcGEmkYJ3leNzTGRMerY4xnkWPZko29Sk5Xo/bj3OGAzluGajJsRVK6EQ2Bv6p5dQs7EqZMNwsR4RPCRVLCz21ZFiWluBGpGAG/yIVkRPN1LVdKG6eFISSubRrlooYesU0qRjVjWJV+kLmqVETLvKyKRj5M6NA0DN4s6JLQkstiWqE/cxNpXQG9wCsKvs7vy49t+xrwkgt66a07JAsuJlbYCkvtWUlJuBCNUJwMbOj2ocWnGgxyvJN3HDHZue0rpndMrsmIKuwIuCtdp0ic0ifSmmENCzeBr/UU0uodgRLohYmWDJw31LO9KiFMbNEYPn/lJdswqjJ4JycXbwbWY6OF0MYP12W215a1wd2QTxnWUQIMccpJNPIZOZUzBjh0/YkWOLgmmj7jZkr2czm5LeGNXYGvdSGVZqU/IqRn+j0io7IB1ZwJIpayZxpHb0YRtWNPU2avJUzbaieE1wTuQTEZwlbAQr3SI3v+viUWILgUoTnQ1yKrLim1pwb++dfcOiEdCKWEzG7Z9lhdriv8uM+fPb/dwHce0seKyGzBx/FBwoQuCOMDGjGrxlcNlS4T/Ft9/OclfW0KWNaQLJWfsHELCT5wdEl4UIbKnJ3/XSOlraT2/OVjDVpjOUCTUUFyCWWkRLNaqqQLLkmgrHCHjjhOHBvumRAT6y5rOzkUyWrDj7Op0RI4g8VoABPm38kp4YJUrKpIayqzTIb2uiplP0ttru3iy3+uKxv2GJ/pO3gRBu61ISWC/ufgHt7wWsUJsLWT5YRL7S3YZaiSgT2FLDevr+Asdw0E9a+AryaTy1xJMOtJpSESCqaz7lgw2h3Q/Rxz4tdYP6T4L81jPDC3oRTzhRugz1OgINHfAoXN9zu+nFnX4KUZRk2Mnj4duF3Adg5LwaX+oKeTJ8eHhb9pbJ6ziqmaPl5aNHsi2GiYMXdFv7az3HbtSPbsYKrqmhZLt3FognNldRWC9GGKis8WB4wRrLmxTjcROuQMv0mlZDykvdEpJfxs81kpDM3kOUCBZuCbEbxCHHBDadGAhIoEcwspLqyQpRgoCUgW0TZR7EZVQXcevb2k0KPojfxapzwgit8QEsyLeWCKJZbBQfv948vL9xwyJ1ayHrg2Af29QgY4PKaiQJfv/zLe1LT/IqZR/oxjo9Ccq2kkbkse5OgLmn3rTOdAhWZWeXCixceGUZRoSkAkJFLWbEgHVhZ3L5pmKrInld6pdqzl49iU6aS6UVnORqlFvezk/NwDycsCHaR/ArTEguKmPkdbAePYUbd0RGLH9pypUY3sPxWiuTCgvRrIxDFIFQ6MdGZIsjAOC0irXTVjmbJBbdkHw5uqnDbP26sAz+JYrViVgiDqxFvaas9alZRYXgOEj37YtyFzr7giRu5e5PrcKEbSa65XR//nbXyv10fU6ATaG4a6jB/PiVL2agw+pSWpUY0giRh2Eyq5ci+5O8XbXhZEiasaOxIUTYqxzuoYNrY3bc4tAia8rK056yulawVp4aVy1uIf7QoFNN6V/wQyBl1AEdIbkJ3iQV2UU34rJGNLpdItM48w8syGU/LioF9ipRcG7tf5xcjQkkhK7sBUhFKGsG/EG31c5MR8pcWv3jnpuNZZR/2UtGFh80T+zhzD8aIv774AMahVjooGjR4oHo8zng9tiCNMwRvbFW/monCyXdAYMmQ9l4A5SQbuKnrDW/q5MU1e3N+ERbsuCFuUWeZzvBiQZMqaOrk/OL6xD44v7h+1m7qANy1VGZDyEspZpvBfiGVWQl1ML7QfBfCzbuzlzcizoOAG78LKBybwwmimb8l75hRPNc9WCZLwwYO+iY7gQpvf4ggYBy9ONkM7D/bEVAntkpGfMUYibeQ02T7hARs/5YraCE93pDCcLbbgTpjsQjvJKsfk4cd0eoGaH5kMhigqFUvlFrG5idKdM1yPuU5KSWaXIlipWdF9l67bsU6/COVhTM1ZzDFr+0ta9cLzNVzvi5648uFDF0wkU3ZAZRMPrx1YXQmP9eSdwBegx9C3kox46Yp8LYsqYF/pIpZIILv/pPslVLsnZL950+yZ0cnL54cjsheSc3eKTl5mj09fPr90Qvy398Nrcfe6FwwYT53bBM3rap/vm9YU2yjCLOuWNJ7qcycnFVM8ZwOg90Io5Y7B/olzgOzroD1JRW0GARSsRmXYucwfoBp1oH4zw2bsHwQj9x8BSRysxaD76QwitFy3UZzLT/nsvgqm31++TOxc63a8LM1m/014HQbfiOY+//8cgjSVds9ICTfGsRPmql9Lw9Hb6Lm7JnoiDhjEmo/ckpmioqmpMpSjHOTKIbXQkeSg+1CSTUY7pC7cIWXSc6EYcpptdNSSkVEU02YAl8GGDG8/qg7QyOIJannS83tX7wTJPekrHvgvJdgerOvl0t0K3FBaGNkBTfXjEm/7hU7NpHaSLFf5F3DhmyKrl2jfbSZWeMHvG+jaxQlANmAH4OLqaLaqCY3TezsaBFj9yExqOLjG/wbUyfAoclPxwZhKsjrl8fobrG33JSZfM407h3c2TyaHr1ILcz2ok9dgYn/iutgQkyBCAOqRjj/k2KVNMHkSGRjNC9YNNcwdJQ4d0o8ZOxxgY8d9aWeSxy2HQq8SG762JHjJkgRd7Ne7D8PsqaS17xgaiO9OFAjy4/vJtQnFz6s2AMSvH2xq5rlxyMyy9mISJUyGj7jhpYyZ1QMiKf0mvKSTnhpr7LfpRiwvq9bZqP3GdVm/yi/22rPIjDI76D7em8FkCPQebuRAwvBG2Qj6FfB11/VZsC7G2VbiL0NP7ujDTqAzfePjp+cPH32/MX3h3SSF2x6uKH67yAh5688yQH4wY+wGvZhn9z9WIwCWNH1dBNg/pdhR9JtsGqOs4oVvKk2NAl4ThR5nG6AmeYgp90bHTx79uz58+cvXrz4/vvvNwP6Y8utERZw4asZFfx350YsQqyHc2cs2wCP9EK2lz2HUARC0Ui0b5igwhAmrrmSoupbltpL7+yXywAEL0bkRylnJcM7m/z84UdyXmC0BIaogHcpGar1tnSCQNwFEji5lwY6jzeTCMJXqcXbmaV74UiRZd0r511wCNp5nXvCmXvlNB4G7KGa+SnnrKytWIxiCd6IE6ojYglzaK/HLy1DMrzVJrYwELsvd3XcP+DwpKKCzuxtDXw0LGHQm4WxV1/ZlxlAIrwY4o0Vne2WMcayAcwWzAII1oJqMml4aUDgWQGgobNdwdceDgcdHbr/domhFgLUnHuTJ9GNm0yfRDqSEDT4+Tb3GiBlMEgwcu2kXOpV74fN+FT03QZuv9izBLomGloPXHzomkG3cPghZ2tjj8kf1U2V+NkefFV/WF9VtE//0xxWw6B/fa/Vejh257qKOcn/Bv9VzDK8Zwj43R/UibUNvA+erAdPVn9VD56sB0/Wpkh88GQ9eLIePFm39WSxIAgluZ1kY13wHTN0P74Zw/VqpB3sb5AyMpgsegNVvX556efF3XNBhRJWpomRGRmzXGfupTHmbqg0S9NeqFWjDQZfwxZ1czb9n1+sxvRbw9QSgmEx+jooE1wUPGea7O87839Flx4Yi1hd8tnclMv00ITcuGg1MAasCEEsrbzGhWEz5QJWafGrBRkltVQjzOesogEv7n4dXA4YexuFmXnufa7JESTeTJihx2TQ1ha90CFMpWTHqPo6erRxdl1r2cwhmcUF6+L4oKpQsSRXXBSZZSx2hRUGjeMLZh55KDHPzG5JydD/aDfPp9ZB5DXmNnYT1LjRrJy27kYrZtrxAxY3dx1+rYyKqculS+FclXp6EzBRCuoNkMAuD2SQtpd2sZNsHpzXju45N5qLUwwE8rzuZTa8vr5N8ifSx5C930d2D5v8Szkj6BRQPE+oLCNn8GuaLeEVG0+DdnFR7iUYk+a4YtomVGbkbZv4C5zN54JC3gCvmL1lvYfSPrVDtF+HFFI5jVOI/SDUpyISyDrxYQgutKDN50CtlkwYJm94ZZN6u59V3GK1c4TWr4F0kAkzC8bsHD5eXBQuboApN4FLq8B00ryU2q7kzKP6ZrR6y5BUzAoFoGeUMBZG5cM/k6RbC8QwQoczWRO8xiTQorZilVRLYtkdxPu7gYpOBvB1Uwqm0EnO21xg95rOqbALhXzg7S/ynbKq81d224PdOfDaLbO2LOfvQ3k/Zl97vu34yc05lJA149fg2+we9IU9i97pm1Qi8KMlY/nrZQRGcTuAOzGRSOY1ZLyyYrhah2kyqOVJY3hjPCJjbahh9i+0pKoaZ+QXqizRQ+L0tIFQpSB5yKmVREZkkYoVdUnBMORiT6xA7IpJ0DxntYFsUxeGgreQl15GpC4Z1cAkkyHBCZDTpisABwIAuAcuE5cns5MLBfmCm2Fo24M4MOezucs3Gub2K3bsPN1/rpHpQHKT3e45FW7vMkwAG4+8QV8zoV0WUKtY0JScHOgtnEE+pT4BbIPtTzeK3cP2JyM2mnW2f2j/G6szghMYeOlQvITZUZo6pAHj7ZPT2gB3dRm+KxlC0B1dnl9LE1ykBBA2vT3kc5paEB0F+O0cR9cHHG7g5fu0KOy5dhfyPlzIrBin2zee8pLt54rZ63GM7imsp8J1m1Pq70e3Sm7nqkBhHjybsDc11dridB/T4/obJBuTy905d+1K3BTr2PV59FO0S1S4LR5F5KrTaMh29NQIYo+gT89s73V82e2QbvIcfG9QDmZKedkoljLfZMzVjHib05cOuZIRb3D6HPxfLzX/AwOJDgVph42mo1DYPxe4CnotIRYpBIi0RZcscYLJZ0gFkkVT7rx6BM7ibEo31lHABO+YYSRvRyPqYEfCHHipQtWPwWNaLfVv5YAfjxqq2aYezVtjwU0zZHaQwhIuWv/G7r0xeWRZlWaGHDgJWTPz2GIjXbWV4VOjRzOxX1nBGtEEXDY5yTF6Qxavs350bDKu2hMXLRBYOQZMReGR22NLrAh11jVpJ5LMwEnS7JopbjaVZFZ5/vae7222N5duvs5V5cHoCCq/zJ0xdji8L3zlrv2KgetOWA4WhQQG7S0UkbJ7850mTU2M7HDV5N6xHK+iV4yALuSm44695lJorg1og2iH65m4wiWEOfLlran9W/LJEo9pBGRUO1ujC73mWOtHz+VCYAxebsolWTJjyfS/SCGxapxUV8mQViawfFuTBUuCRL4l55r8n2+Pjk/+wccApunqdpv+CyrQSXVlAYGTBNaH1o6VDIgBmzy/0oPUuXfJanL0PTl8cXr87PToEMNUX77+4fQQ4bhkeWO3Gv+V7JndNStZoJim8I2jzH14dHg4+M1CqspfMNPGih/ayLpmhf8M/6tV/qejw8z+76gzQqHNn46zo+w4O9a1+dPR8ZPjDQ8BIR/oAmxboZKZnII9XwXS/+QiXAtWSaGNogaNN2iD5aarGTgWjjeQowguCvaFoX25kPnnKEa/4NpufYFcigr7+oR1RsRyaKzAqh48VBpSlgGx4Mcef0Z7yjjeWpj7lExpmQjeLRj+t95hmVM9v5O41lJVG4M+9LezP798tfGOvaF6Th7VTM1praGqF9S5mnIxY6pWXJjHdhMVXbg9MNKiCuSiDpMhG21quCgb1fXu3yLEZGAULurGfPYvCCqkZrkUhd4MJa/ciAnLtjwlGqkvBSN1g5YAZIn/ZqIAqrwSloUBc0P1oA0M6zoZPHfPWWDvAIVAcscZMLi4Lz7yim2cX3IrpSCcxHYBUQG7pNjnd5qE0qZt4TZnj0svJwd2quyXitFiSR6xbJZZFYo2pSGXS23pKgysH+OVl4wnAXhaYvz6guuumHvWivZhbpwZmMgpoZYjSAGWyfNXDoa9142SNTs4q7RhqqDV3uNUG6STiWLXaCr1n1x+3HsM1ldB3rw5rar29ua09G/tHz49PTzcezxk3kfdcsNDUsS1IddupdOBcfRemtpg4Vb38pCA3W60Fcq5Nlzkzij9T9FvrhpL9MhP3BNWnN4Nl6t7OfOVNwFMjWXdWkrwTHxYpHLldTrAIJcquUABtLNojlVo41JyyZiTZVRNTDGkb/AY5bTMyLhd5xidBXExy/Bbui1fjKK58TdQDOGos2cB2LAE7qvmpvvjCpblGOha11bMkuBDsBc02mCsPoROuoHN6fGo9pUBeGMnhZ2g5YZdyPsEuYbOfJU3wF268Rb3Ae+jeAUtl8KycX01wbLTLdjltgcM2fWNx8tZlyyjGEQOzQ2/tgqBxc+UK2188c+hRbGtTPjbLsneRDcuCKaKlxOWkJo/qSYlXb8axfXVZ91hd+uY4LSUdEPn6geurwiMjXVAuewpa45HayenEy1LsOzox+k5+6QZVqDCsl7f6aAcuSvfnq61y/sspKq22Lgt1vkeTJH8d1bAfDcseRS8XSUI8IeWXxwdHq4o2VlRLjAKB8twQo0tq5JWGEBPBbgAXbkztO9pzWcdrt8CpqEyOAyzoFj+RTNGqLOowjIQp04/pWXpi7h1/NJTHnh2xwftvNQ/tC+swt8ZjNJ1dBJnFUndUOAr1mRixTbP7pz/1T6HOBjvTQTTBkCdARi+RLa/yKjWMudtaWBQHX2xvaQyHCLswJlLvOsTCHdEzFxq5gqFoxEaJjv3ojl5JwU3Eq6Af//h/N1/+KLiYAJzCd5Qjw+iPNCS682l/fQWOp0yvBDs6901mKimvLP3bOxIbWO6TatHrTokw9JtssUX1AIkXfp72R7Oto68mjHz+b7m+wjDAfggUuhlVXJxpXvzwuBJyNcdZo0ZAexgGD05znCYQzJMKReEUb20eDEMSGOydMTlP48MHkExrcWsh8TYpH2HdQDs4PsFS+aIFFzBuXJofNxDY8GS2gd3mPsVjLQid3Ql+XARh+bcYfpzO1BrqfJxOMiVRPi74yVdMJoo7OCe6MjKlOAIsLrRp/NXj5FTuBsyCpp6dAk/tkgiciGiEl7BjriIc3TvSiUw2ndg2VZJamLIsrgflFwoXlG1RJ4FuPixs9z+zEn2w73NHSfvD85b3Z4Uw+E+fHZyOAzMO0uf8S5zQWRuaNkxr/bA0vz3TcFK7D/DCUZ9SrDjW2DgPcs4nBFRWoGFFoVXRsZ2jjHhqUQC3t1xn7FUSYb2erAT6ToB8K2VeyHCCVDmQhpAJK5kYc9P0Zs538XMFTMUg7jB1Vx0RKiYZH1CUvRo89A+JNUotK9iTrprw1DhHe2ERGWZXsmuqeiF4yahTXcMwbof29jqiFFct68dDkz6oC6psUT8lVO2Yw8igNXZ66jyvdvqN+2TTatT+6osibTsCgyTXFZ1YzCs0JU3gfBsCKmLumMMWBfj9hitvInNMEQUI5j2wMBCFuLmGEK7UsBpGzQ4p6pYUMVG5Jor09DSFxjRI/IKqiJE1R9QafmpmTAlmAFzZ8Fuk3xtVzRMBHd3Ib9xY8dVU7qGFhNVQ/d6/sI7LMceurHdysouWTHTKCxVtUEhll2t7P2Nq4L8R2eBg/VEa4nW8AlyxFGbdPksTdlxY//W0BI4tM8ut6P4KFsLiIs+aoN+rCyC8UHanuNO/SiW8yI070HV1kj7zVCy9y6jSPHsdm1vZzoQpXfBuYYKWBtmBOq+88IF3m3ZOxezaZPm6XOBdpIbC9WcJlkUjXcnjqEdAWxb1kfOfWfCA1fgtc/l/noJ5G/cMVoz864beQwcox+kcmWCfKU01yzC2SySOnF2GOi4Mw71ncad1h1Tcl2NfBGaKMUssNVRbH2PihJFZpdkxJbobiC0EOio8jk3DKoK3hqZrWf2y4tnn5+dbOh9/blmipq271ACzFC4RSyfugu6HeMSxoje2C5T3B62ny+7fbeG429lB/B4VxVrwAV/moxuZP3Z4bTrOrfoq8FmlH6yHxpcdR73+vPsA3v9HHcgI7dJOPdSWTL4DjI2e/vuJyaPoOFUzoSRekSaSSNMMyILLgq56Fqc2wJNVC242GH6aUve72huieRf9+6wWLwrfUi+JScXmJkNLcFevrtYwjv5K71md18HyoreJhNyA13qVKcyUrQsWvGOUHHXhRVswqnYZkWXDgxHdtB1s5hTMyI41gj6B050EZPgwGL6Gap3X83RYXZ0kh3dZYP8ZoACouiCaKPSMpFR3ouV2u+X0E6yk+xw/+joeN8lINxlLQjfBkt6qCQysLsPlUQeKomksD5UEnmoJPJQSaQD4kMlkfurJDI3pmM1f/Px44V7ctuK+HaIEElzm+qy2BQvq5iZy52Zwt8YU/upCE41kKeCzhg0dkF03ITFAR5GklIumIKgr6lUoThIRi5ZehL23oYXX9KaGzsC7Nied4/unfvcBytSvX55uUeIxhT4wbD9GTMjUkNSeN0MZEd6PE5kscyc52ZX2PzoLJBAUQGtMPMQ6NjHfCFVOZDd7eGGZoZqw3r7t8o3w/HbNDmgXD/9ENx2dfr04GBSylnmnma5rA6GVqFrKTTLtKGm0V3OfdNKNq8i6QgZZyM4W495hxWcHJ6sgfVvQSoO8NvRysqyQ/fIJILiPwDcUXa0SZnKcBSHy1VuSgWrSlauw7Y0tOy4mJ2k7E/pI4t60AbmjBZMpSacdqknT57fwGS+/vIu1y1sJUm9eDG4En8I/lib5M7HHXcpPuB/mG266eiHfWpV5FkqrrwND9aLJ+i0oknKvYyq29xCTAGs9bF4d8/GWzlrpVYfOz+U144VqpOyAL+cfXg/HpHx6w8f7H/O3//w83gQta8/fNhBpuTqlEIQesFx925pFxSbmTbOVluJvs4FgyG/4APw4c0Whz7dj3aDw+E6it5IhpuwKZZqKLnBmABDGkjNCJU1aqp6xdXO0Y+raCjTRsZueFeO2xFl7PGFXsM+WaFOo/5JTA5upLhyQadwgVv4qLe4jnMLXc5zes1CNpO2dIXhPbmvN1fXJWcFesqYyCXWAFdEsEWq8HHBNPSCukb5OC8ZFZDsm4I+FKe9bf4k0dIlRn7XS6C0kji4tr35HmT4G3MoE3bj4pdTlvM+ebh5ZJEPhu43RM9lVTXC4RpDb+U1U55puegRlYZTu9gR18/b/XSr4BQ/bMjf6MZDe6voLZjkzuOEZvya2XvFefug+p/0apNu1XaPoCFm9SNIC7/wKf967utz1Pl+vjyHwMQSD/Iitjs4QiNv6ZKpjPD6+mRk//+Z/X/N8hGpeTUizOR/OL11ndpq1zEQMEIF/Yw2lF3RCyHnZ+/PyIXr00/ew2zkkVfqFotFZsHIpJodYPIHVHo78J399xG+/oPsy9xUZcfzSciloaKgqgCU+4ot/ls4uFwTWvKZwCIAeNreM/NDKReW73XG0/DcW1ogxxBZRONSzobWN7gHzwYIXVGht2hzsF0vDaieocMpjHbbpbcLbRhty7kw8hOOH1vfkiEDvKS054M8aop6RExe4xnZ53lVw+HIHv/hjsfa82HyeiAApMbOHDvUdc8Q1chQ0RcWzeqo1Wf9qAk3iipeLl2aFJbtSXdozsVMo8hQ8VxJn6aDW05LLdtMz/hlfbWs2Yjw/Lc0dXlKczaR8mpEzIIbg7FqMdf0llHNTeMEl7ao6zUTRQfCNnUo5OWyXBZWsHCu5pAwigLCQWFvivMLjN7XKXiWGDVE/yy48rnafzyb4jrao7zq057nWDvRdZ6Ha85Pg+4cwr5kYCEakRL4xK80txsfTr1//X8WgsHg3sNwwRXbWSm7V35wrz94ec8oOp3yvIPAD8yKo5ga24rcp52r6O8IFxPZ9K6ovyOyMcM/cGGYSpVL/MGyr8EfGgElKQZqcFe0rqMqzq6wrJWT96HvHanadEFXkncUBGEQtVLGgpXD/Fm343ynCTjWLdKuOVsMVQIfhsKjVypSM8UrZphaDVWHg0QQdqFKwLH/hbjBkMjupxqWudxm9ShvKtWCqoIVn3cTlBr1aApJ1i4rLfrJKeu1kl+GDUFH3x9nR9lRdjxUWhqUJ7P8vLu0iTMoi4MllwF20EmjjjnnF1gP2F0B1MlzNKyry0BJ68VL1b8smC8oMVKW+3QmpDY8J9pJk3HnzZSKS7noWiHeMqoE5jhTE9wXM27mzQQcF3aLoS79QUDkPi/2dc3ywZ347uh0/vPf6/cnb/7+3Y9P3/3l4MX8XP3rxW/5yb/98++Hf/puE2v4Dpo23WhcRcsjXB/g9QHcT6RViD1/HCiYM3Y9kOBrV8kx7pDln/vqOSMy9iKu+wlJmyuim2oQoU+evRi4cu/SEepGXLjRb40N9/0APtpfBjASfrwRJ8cnqR2mE2Lrg4rTpxtm/ogwWj9ZvmY5p6XnqaOQLYpJE60w7LJ2QyPcghmWm5EfGV7HxPqbx9r3+py7RaIag17m9uItJXmjjaxCyg+OA52RIavDrauT4S/FlM+ggq2RRDVii3VqOTV2oqjIqU87mnLFFrQs9cje7KrRiBeD1HNQK1gPDOLTVPxdFV2DmgktlR6RBZskM0fDQ8RFKbUmQ4NafJ1dvHNrd+Ywv8WxPYyW5RpzmJONcFiI4qBiOUJU4qp02F/tCxngHuv20l+Dym5BAfLOWaN/a1iDQ5LXH99C7pkUQAr+inBlhtK2FY5GQk0fKIhYMCgD71YPjSA3aufS5T9fr99gL3r+K7aLDFTSm/xrZrethqKnsd4bDIEF4hRJa+kBMO7W2mddbkkLR8fH3pZIVZyWO7YMBjBwNhfL1QdmZ7lM87RNfNgeX0T3pvLBTLmcN8si/Z3mLY7taMua6azvNkwGG3uVQI1HZOzZsP07LzT8p9au5viXJfxFliW+jMzc/q1lyMPeRz/sQ/bQQ/bQQ/bQQ/bQpgt7yB56yB56yB56yB56yB56yB66DyQ+ZA89ZA89ZA/dNntIqhkVziHqPvQaW/+XzQPl4mH9dcyE4vkc0Qd2u1Ut16qaiqW9dBExYeBYk+7Et2Vpy9k5K2so60qVomLmG7wY11Io6g5DBQYpQviZ6x/pQkLDvPFibhNlvMsAuniXumL837IWWYyzLKW4TuPrFZaBzWntrtaAviVgpRVgyAIwqP/3tP8B3X8LChrQ+O+Xiu5B01+p59/bMViv32+zvE10+xWa/T2A3dfpt4d9K31+pTZ/l8X09fh1q7ibDn+fqWJrdfdtNmJzJbentd8F6rX6+jbwb6SrRwFk0EnQQYms+yJ5eJvW8CsZduhQna34kor2loeWXRB04z1qSac4iH8PHa95cZBwIhfyE6c14L3iW3JmNS/GRE4NE0QbutQ+bsw3psYe81aZjmKScllzNClADcxSTmgZtTf0IEcC2zb3wca1+TaPK7gI+Em5uut+p+dfV7Dx4PRMk5gzBa03iBWHGZSImylaOTldEc0rXtLhMKrBhdSDCL2HxF6/ippCbUE+1HeCqtk2mXy3wiJVs6bq9Nazf97RpVVyUDZGcq2VNCw34Nbnhl+zYc9ihNJ/39N6vjcie/ul/X8r6Nj/+q5vz/b+o79o9oXlDXRG2tXSzybQQYNhMo47h54JtNMPruig0epgwsXBILUA99v1jsEkA4GxdgXw2whzvPAgGN98h+qwRozBfUkFhmnHHYtSD1ZU+JBQMlFyocGP6lPlHDAehws2ITV09PGdN61oLQZ7qkBjwSK7y+lq096PTzb2EUI7pfNX99+Ip72Hjw+Pnu0fPt0/fvLx8MXp4dPTJyfZi6dP/m3D6/ija82UkKVrzzMA9kKqKy5mnzG2a7Bz+m2kiYO5rNgBLeP+BTeC7WAhARZveQ1XdiI6OOt6Kjp8SB5uKjq0XeEYNuD2hb2nNOclN1YEqPm1BMKlSjaisDc/Z9hBAdsJ++HAhw6/6W5/FZdJoBmDxt8VFUurEuUshOOQj/GkYUxs+Ag+flSEqxGBHL8QiI2HiDsJQNdSgBTv0iZb0Xbs0JZF3vcz6LmrmGFx69I2KIbpUZSQOmGkEQVToIqGwCc1cgGwozj6dUTykkNHHv+SFWd81F8cYZyRc2y845ZFyxJCZ41sQeb1eISCGQVJSTi8AFKoS085vyBG8WtOy3I5IkKSihoDGZMQCWFgAqqgeeYyxPfHk5zSbJLlWTG+TX32gdCklQdo0/CkszLke1uUAPlIXxw2Sv6OAmN6EZGXt4iHdB8NpKU6CoM6tlFcey6FcAkFwPwxIk2xGVUFhvRp6Lwyit7EtJgJD9GlVp7FZLZcqkJj17yPLy9CqyDsS+whQ3Byxu2/HZa44NCe8PIv711E6yMd+lrYodrpcXisyRvy77pzuOLv5bK/+E7WhNC+9TuwAReKSGhuGm9ixQ5wTFVkL4y0h10Epi6ux88sOsBqX4EbfnYqi7cHD6Tv+qq8OTIu3Rk8ht11t71MhqbQZh0hb4MjOQSO/tqIvNWD8Ji774aGaVEopIkGs3SCW7SPBvVer+aXOPSBBzxtyYEqGy0s766oMDz3+RPe7foF20KM2tbeVsGbNqV94Zrb5fHfWWQFFiRnCvTHNlnMsycVRp/SstShJWRODZtJtUT+5DKsteFlSZiAJtXw2oocAYugKQedg9a1krXi0E76FgzIsexdiZEYIIY9/3A7wh2B6feeT1QTPmtko8sl0qxrj8g74Sw66FwQkgYe7xGhviw98PUGCtpLSyMZIX9p8Ys13NPxjHQ5fYou2iQSpPVx5h6MvVO9K4MIe0G0+fFFg0G6qMGM7QVkQRpnCN7Y3nX2toKCB65FQzIkNIW1IsWQ+Xz3Uaw+ejR57SXe4R2vBDm/uD6xD84vrp+1mzoA9xaJwFsotFKZlVB//dDjlSDgxu8CCscycYLsb5Qr02ZVvTjZDOw/Q/IM9L5pE2JdTCnqdXg1DBHSXTJZWkg3VN4uXGbLrUB9CCd6CCfqr+ohnOghnGhTJD6EEz2EEz2EE902nMiV4uibNNqHmwd2+LoeXf3ZxL9JBcE99t5sO69hjBGNvXFlCZEbqwKFplwUrqic9yVCcR60WPk7PrLz4fT2i07e0x2bBN5bh60oKMcXa2yEQOsOAD/YZbvwWhU23CpDl9UlUqH/Fl+v6BXTVnGqpdY8deYQqByXYjNKjMWdE1Exx2GwQo8ub3ZUDMJwFGciB/+E1g3TaN2w4ylW2IW4pn+g5ycDWjHOxYL5Ttq88K2/Q0amKNr9R4sAFzNoOOqaCX4zJOMWT56zp2wyZYeUPctPvn9+XEzY99PDo+cn9OjZk+eTyYvjk+fTgdJNd8pUbJ0SrKTa8BzNrftuNRt6JGKhx9N3m7jmzs+K3LWYp4WPIZvNNfiDLr5g+A01s0q50MDdFjIZzqO4VfKg0Z0/caolZN/q0v7umoGlBIhcWSS+LwwadN3yxp7oBLZ5Sz4/K7E2oQPVkkLBtVF80tghfCkkpA/VgK03qOlzqY0mJl1aexzQPuntdH7BWGLELWvA8+0qzkExGzklr+PdjlEPy3FJ5z7GAvWmRptOohq6CX+QivyZUaP7w3BtsVWwKW1KA7Uu6uDxCfizpDlOxnUejSkRkvhxQrfC+24yt+IEbOOLi3I3t6Z++Nj7XFxBAezGOnClJEzQ3luyQ7Z+ejvqGm4Ig3WyyFNIUwIZdXYr1NxKZhgnCBwPe1DNTlJoX7oOjDBBZy+2CQbbmmaeZMfZpq30/sWH2qWkEksdN9FLy/2gjJW8sqIldZHJzGDT6FTwaCP8poQOEcsAflg9ZxVTtNxhVZ3Xfo6euNHKCuQRn8LNzL5wbTq5ea3c0faCBTeAJjRXUmuiGHjFXcW5QMK8GJNCQvfb4Tr/L+jJ9Onh4bQjoIJhvyOfxs82E0/xk008O6F9P3V2tIOkDmt3qM09ObFfwrlztpdAv6IXwnlUHrwQf1wvBJYG+p/mhehC/TfwQqwCYYdeCDxO/yu8ELgUZ9qPS1H9QV0RW8D74I948Ef0V/Xgj3jwR2yKxAd/xIM/4sEfsY0/ItH3GlWmyt6nD2/Xq3afPrz1N2yt5DUvGNZ3rUtmmP0VEweJzq3qO3LRtVA5lpr5LXSw1R177itJF/vAsKJtpdMoqGzrA5zNPFXTOhv0XhoXF8fFQAXIUVzwrAAEVphXQrFzjUVaMiDE+FLQtGgOke+lnDlqs59z7fKtfm20aQMJfZFPRHTfihB6z4S48PBpGJqCv2JBdQB4FHa3KxWtMi2k+I17TzjjWZbL05OTJwdoRPvH3/6UGNW+NbK2w6/4eQcpqOvUwGnYI9TJeWVVNoc/iKRsNJqcR8hWWoU3pNEnI44bVWZ2zPHIbjRE7JpkexTLpdBGNWAjk4r4TUJSTE94QpYDm3Er9A9YNeE478wQAqN3mtuNQouCPVjE3sCxO8VUxNOxb6lU00j1hVFXY2VzhfR+VvnKmWFWrTLdou5yzwVmNFlSs6fc8xEXbi2dHuLqtkIDAYxFL5dtLndqHHV2IXRxgPME+l84Uk4qmwNNz2To8+VsNn21J6A4Xc2mlo/VSQbCsFnim9nQANLD88nJk+G+oSdPhjRqM98VPVxAG6xV1OCO596A2gzZHruCyh4omMAxpCDIAJz4C+ZAd2FPhgnr6LCXLlnD+f1HOL/sC9RdjhoCxLNB6DqSvW8DlwwkpB0HKDeUCo3WAZ+H3yjMOWlMeCuF3nSQgLb5tldYVZsWLlgCvpH6+HCEjuMr8bSSCTML5roGmIXE0z1Um0DRWbXDlrX2xER+GxCApsblcYy/HUeEaWQ9uInfDjJhD/jAmhrN1C5zpD+58Tt0Omg307oz7j2fdBx/GJIYHx1pXG+Z62Q3AmIJuq6X4Zov8CpKrtDfnF3TiMSMJK3om/k+o6GXIvisQKuNLd/2CWeYaNLeNjDRnGrs02DmVKA1vxi1WoSAckRLL0kDLwBXIJHTFqb5hpVpjGpuKkyDYdLJo8hcmTzvlasZKGmT+s7+1mFOP3c8Ek037CmY5+3eDJyJ+wm5oeWEJff8Oilwbq9tX6WglLNWWFoBoxWjuzamO6T7ngGw5DW0akvkwBu4zHcatQRXfGZK6DXlJebP94BmFeW702btQYMZvOw2AMGc6p0JNS68zh/4eRrmFrMhdOHDi1BpTIplBd2r7CudC+aTZtOmtJgdAylAyRHl/gHBSSGQB5pBAJXTMmV7nY5NORX2snJX85B3omO79/6JzuPtC3Rj7Evk0h5QyOEdFzwFQV2OOzsJvK8E3sr3sIILraeKdZRxw+rJ2qpoiBcftgZJnwe+1FY2DHbP4rhDwGM3A4A6cH+nJczaW5zEz7e7y3FITy5tHIhVBl11Hl+UwssV9tsl2ojCcHouF66r84JNQvQJhElFhfexUgFVVlptAuCh6lGMxD+I+c4Be51GHrWYG1T29t7J33lZ0oOn2SF5xC/mUrB/IC8vPhH8O/n5khwdfz7Cdo2+oNpjclbXJfuFTX7i5uDZ4dPsKDt6Sh799Obju7cjfPdHll/Jxz4Q6uDoODsk7+SEl+zg6Onro5MX5JJOqeIHzw6hutaGF+9t7jOcaDM8xsTd7vsWrTLuZzv/pb+LXUgST3V2OGDFYSE6837wiCSxPR4dIAOH4qEFxEMLiAhrDy0gHlpAPLSAWLlB/9+1gPg2tMi0Gkrc4uxb8vHnVz+fDvW5dGbWA5brA8z6OTh6/iKRUPEm7bT+GkLBijV1G3u5m9lBdsmuIda5L7QuGGgwlQxBU70FfaoLqyBOeckmjJoDzvWBc37SPJdQeMdXEukL3FlNTYgW3WJBF/azIdExFjoGpqu4CG3Ltpjunf3sNtPRX281nf3sFtOh3LL9fLHsE+IbvBC0Yi6pB1YXRSZus7RhaWbFpL0d3GDSoe3rT/rNvkXXKbF0/E2Q7/6M/xoY+qVzZ0CbXCngu2Ad8IYksJGUrq6Q63P2TdreMISyMmoywyv2eyu14hJpyUPWZ03N/NSZDjovV3ymKEIIZtRkdJwxGVZOfmW5F9jwH5+3IJuwfiBN38wTFu0j9xMImFKdrYtFwxWTvLYfdYRiqCZVFNyV67IiMuQSuPwxmCekDaxqJNlJzLpNlgiAFqUzJRvZ49T9TbQMPX5v7f7BoINXQH/gwfuiO7qj9ryUTdGS+0v7T2/chywsWlBDh0/AO/cr3g158qm2W9SmJNKi+AwvfPZD+rqKUsUHIlkzfJDVSlrSbMtthive/bL/ZQv+hp9YevlRylnJcMXhMjyzyMQs3rKID02Iv2eGZgEwWOoNuzH48tq9jubwWZRtttP6aUImb3h/65k2ILDOXJvScDSbS2z9HB3D9ZO5D7Log03ncsyYl9wsP2/AXNd/temsjtI23bgelW86D4aZbjRH8uoKflDI/Aqo1DGEV/7fA4cLf4PMxm56oPvNHm09l8p8xvuhtT5Qkc+l8vPtB2aw4nIMYJG1dkx/5ONgdsoFuB563D5GU4Sq4U8Gt2PFVBWd9e+WG2ezX3WtX1vM2vlys0lvP11JJ6zUrSLwRi6IkaSiteWzmv1jD5ZE3CDrRQ5yQ3ifxRVBEDJPuc4s5ej2Df5rYJBzKy9E1Oq8GPZzn2+fRQRqnw+RJ/nP//YzXzUTqx5iGpGb/6f42QAU7e/hkk1vzHZQEs++/jS1H914ohKgtztVtSyGyW2rTYwwUMsCbWWDUzUDZ/e2M13Ignw6fzVsvtc1ze9vUe2I/clk0Tvqd5zMW7v6k+Exufk4bjaRO/cVHYg2Bc8sViy9r+miIYfnvIEB3hafYdgVSL2J2999XhzXcZi2UUmvScnAuL7afmAsQY4dYgSdJigbcwH2ZdP7xldQH2yPsEIOmbq08FQb/yF9Gq89Wt3/CwAA//8xEhzs" + return "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" } From 11d8ba48a0507be84f0d450ddd32c0eef0aa1550 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Fri, 1 Feb 2019 14:57:11 -0800 Subject: [PATCH 65/66] Updating stack versions to latest in docker images used for tests (#10499) Updates Elastic stack docker images being used in tests to the latest released version, 6.6.0. --- metricbeat/module/elasticsearch/_meta/Dockerfile | 2 +- metricbeat/module/kibana/_meta/Dockerfile | 2 +- metricbeat/module/logstash/_meta/Dockerfile | 2 +- testing/environments/latest.yml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/metricbeat/module/elasticsearch/_meta/Dockerfile b/metricbeat/module/elasticsearch/_meta/Dockerfile index 535344e910b3..ec61f1c31603 100644 --- a/metricbeat/module/elasticsearch/_meta/Dockerfile +++ b/metricbeat/module/elasticsearch/_meta/Dockerfile @@ -1,2 +1,2 @@ -FROM docker.elastic.co/elasticsearch/elasticsearch:6.5.1 +FROM docker.elastic.co/elasticsearch/elasticsearch:6.6.0 HEALTHCHECK --interval=1s --retries=300 CMD curl -f http://localhost:9200/_xpack/license diff --git a/metricbeat/module/kibana/_meta/Dockerfile b/metricbeat/module/kibana/_meta/Dockerfile index ce77bb67674e..f94f858d7f16 100644 --- a/metricbeat/module/kibana/_meta/Dockerfile +++ b/metricbeat/module/kibana/_meta/Dockerfile @@ -1,2 +1,2 @@ -FROM docker.elastic.co/kibana/kibana:6.5.1 +FROM docker.elastic.co/kibana/kibana:6.6.0 HEALTHCHECK --interval=1s --retries=300 CMD curl -f http://localhost:5601/api/status | grep '"disconnects"' diff --git a/metricbeat/module/logstash/_meta/Dockerfile b/metricbeat/module/logstash/_meta/Dockerfile index 4c47a068ed15..4c30c288cc27 100644 --- a/metricbeat/module/logstash/_meta/Dockerfile +++ b/metricbeat/module/logstash/_meta/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.elastic.co/logstash/logstash:6.3.0 +FROM docker.elastic.co/logstash/logstash:6.6.0 COPY healthcheck.sh / ENV XPACK_MONITORING_ENABLED=FALSE diff --git a/testing/environments/latest.yml b/testing/environments/latest.yml index 4eab4441e98e..7ecc80ece0b8 100644 --- a/testing/environments/latest.yml +++ b/testing/environments/latest.yml @@ -3,7 +3,7 @@ version: '2.3' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4 + image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200"] retries: 300 @@ -16,7 +16,7 @@ services: - "xpack.security.enabled=false" logstash: - image: docker.elastic.co/logstash/logstash:6.5.4 + image: docker.elastic.co/logstash/logstash:6.6.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9600/_node/stats"] retries: 300 @@ -26,7 +26,7 @@ services: - ./docker/logstash/pki:/etc/pki:ro kibana: - image: docker.elastic.co/kibana/kibana:6.5.4 + image: docker.elastic.co/kibana/kibana:6.6.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5601"] retries: 300 From b70fdcd5108ca1ec1c1c51f206e324b4a9ad29d6 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Fri, 1 Feb 2019 14:59:28 -0800 Subject: [PATCH 66/66] Ingest structured ES deprecation logs (#10445) * parse structed ES deprecation logs * Adding CHANGELOG entry * Add breaking change CHANGELOG entry * Regenerating generated files --- CHANGELOG.next.asciidoc | 2 + filebeat/docs/fields.asciidoc | 2 + .../module/elasticsearch/_meta/fields.yml | 1 + .../elasticsearch/deprecation/config/log.yml | 2 +- .../deprecation/ingest/pipeline-json.json | 102 ++++++++ .../ingest/pipeline-plaintext.json | 24 ++ .../deprecation/ingest/pipeline.json | 51 ++-- .../elasticsearch/deprecation/manifest.yml | 8 +- ...lasticsearch_deprecation.log-expected.json | 8 +- ...lasticsearch_deprecation.log-expected.json | 32 +-- .../deprecation/test/test-json.log | 13 + .../test/test-json.log-expected.json | 223 ++++++++++++++++++ filebeat/module/elasticsearch/fields.go | 2 +- 13 files changed, 431 insertions(+), 39 deletions(-) create mode 100755 filebeat/module/elasticsearch/deprecation/ingest/pipeline-json.json create mode 100755 filebeat/module/elasticsearch/deprecation/ingest/pipeline-plaintext.json mode change 100755 => 100644 filebeat/module/elasticsearch/deprecation/ingest/pipeline.json create mode 100644 filebeat/module/elasticsearch/deprecation/test/test-json.log create mode 100644 filebeat/module/elasticsearch/deprecation/test/test-json.log-expected.json diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 8a70e12d8d50..46a95df13b4d 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -73,6 +73,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Several text fields in the Logstash module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10417[10417] - Several text fields in the Elasticsearch module are now indexed as `keyword` fields with `text` multi-fields (ECS). {pull}10414[10414] - Move dissect pattern for traefik.access fileset from Filbeat to Elasticsearch. {pull}10442[10442] +- The `elasticsearch/deprecation` fileset now indexes the `component` field under `elasticsearch` instead of `elasticsearch.server`. {pull}10445[10445] *Heartbeat* @@ -231,6 +232,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add support for Percona in the `slowlog` fileset of `mysql` module. {issue}6665[6665] {pull}10227[10227] - Added support for ingesting structured Elasticsearch audit logs {pull}10352[10352] - Added support for ingesting structured Elasticsearch slow logs {pull}10445[10445] +- Added support for ingesting structured Elasticsearch deprecation logs {pull}10445[10445] *Heartbeat* diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 2345851cd844..752d9ffa424e 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4342,6 +4342,8 @@ UUID of the cluster *`elasticsearch.cluster.name`*:: + -- +type: keyword + example: docker-cluster Name of the cluster diff --git a/filebeat/module/elasticsearch/_meta/fields.yml b/filebeat/module/elasticsearch/_meta/fields.yml index aaeb1037eb18..02f9f4cac1bf 100644 --- a/filebeat/module/elasticsearch/_meta/fields.yml +++ b/filebeat/module/elasticsearch/_meta/fields.yml @@ -18,6 +18,7 @@ - name: cluster.name description: "Name of the cluster" example: "docker-cluster" + type: keyword - name: node.id description: "ID of the node" example: "DSiWcTyeThWtUXLB9J0BMw" diff --git a/filebeat/module/elasticsearch/deprecation/config/log.yml b/filebeat/module/elasticsearch/deprecation/config/log.yml index 95c6d1bd6bfa..e7c07ee6ec2e 100644 --- a/filebeat/module/elasticsearch/deprecation/config/log.yml +++ b/filebeat/module/elasticsearch/deprecation/config/log.yml @@ -5,7 +5,7 @@ paths: {{ end }} exclude_files: [".gz$","_slowlog.log$","_access.log$"] multiline: - pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}' + pattern: '^(\[[0-9]{4}-[0-9]{2}-[0-9]{2}|{)' negate: true match: after diff --git a/filebeat/module/elasticsearch/deprecation/ingest/pipeline-json.json b/filebeat/module/elasticsearch/deprecation/ingest/pipeline-json.json new file mode 100755 index 000000000000..e8a74768c281 --- /dev/null +++ b/filebeat/module/elasticsearch/deprecation/ingest/pipeline-json.json @@ -0,0 +1,102 @@ +{ + "description": "Pipeline for parsing the Elasticsearch deprecation log file in JSON format.", + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ], + "processors": [ + { + "json": { + "field": "message", + "target_field": "elasticsearch.deprecation" + } + }, + { + "drop": { + "if": "ctx.elasticsearch.deprecation.type != 'deprecation'" + } + }, + { + "remove": { + "field": "elasticsearch.deprecation.type" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.level", + "target_field": "log.level" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.component", + "target_field": "elasticsearch.component" + } + }, + { + "dot_expander": { + "field": "cluster.name", + "path": "elasticsearch.deprecation" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.cluster.name", + "target_field": "elasticsearch.cluster.name" + } + }, + { + "dot_expander": { + "field": "node.name", + "path": "elasticsearch.deprecation" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.node.name", + "target_field": "elasticsearch.node.name" + } + }, + { + "dot_expander": { + "field": "cluster.uuid", + "path": "elasticsearch.deprecation" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.cluster.uuid", + "target_field": "elasticsearch.cluster.uuid", + "ignore_missing": true + } + }, + { + "dot_expander": { + "field": "node.id", + "path": "elasticsearch.deprecation" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.node.id", + "target_field": "elasticsearch.node.id", + "ignore_missing": true + } + }, + { + "remove": { + "field": "message" + } + }, + { + "rename": { + "field": "elasticsearch.deprecation.message", + "target_field": "message" + } + } + ] +} diff --git a/filebeat/module/elasticsearch/deprecation/ingest/pipeline-plaintext.json b/filebeat/module/elasticsearch/deprecation/ingest/pipeline-plaintext.json new file mode 100755 index 000000000000..6fdb52514e8e --- /dev/null +++ b/filebeat/module/elasticsearch/deprecation/ingest/pipeline-plaintext.json @@ -0,0 +1,24 @@ +{ + "description": "Pipeline for parsing the Elasticsearch deprecation log file in plaintext format.", + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ], + "processors": [ + { + "grok": { + "field": "message", + "pattern_definitions": { + "GREEDYMULTILINE": "(.|\n)*" + }, + "patterns": [ + "\\[%{TIMESTAMP_ISO8601:elasticsearch.deprecation.timestamp}\\]\\[%{LOGLEVEL:log.level}%{SPACE}*\\]\\[%{DATA:elasticsearch.component}%{SPACE}*\\] %{GREEDYMULTILINE:message}" + ] + } + } + ] +} diff --git a/filebeat/module/elasticsearch/deprecation/ingest/pipeline.json b/filebeat/module/elasticsearch/deprecation/ingest/pipeline.json old mode 100755 new mode 100644 index 8f126f11e2f0..3c9169194548 --- a/filebeat/module/elasticsearch/deprecation/ingest/pipeline.json +++ b/filebeat/module/elasticsearch/deprecation/ingest/pipeline.json @@ -1,13 +1,5 @@ { - "description": "Pipeline for parsing the Elasticsearch deprecation log file.", - "on_failure": [ - { - "set": { - "field": "error.message", - "value": "{{ _ingest.on_failure_message }}" - } - } - ], + "description": "Pipeline for parsing elasticsearch deprecation logs", "processors": [ { "rename": { @@ -18,17 +10,29 @@ { "grok": { "field": "message", - "pattern_definitions": { - "GREEDYMULTILINE": "(.|\n)*" - }, "patterns": [ - "\\[%{TIMESTAMP_ISO8601:timestamp}\\]\\[%{LOGLEVEL:log.level}%{SPACE}*\\]\\[%{DATA:elasticsearch.server.component}%{SPACE}*\\] %{GREEDYMULTILINE:message}" - ] + "^%{CHAR:first_char}" + ], + "pattern_definitions": { + "CHAR": "." + } + } + }, + { + "pipeline": { + "if": "ctx.first_char != '{'", + "name": "{< IngestPipeline "pipeline-plaintext" >}" + } + }, + { + "pipeline": { + "if": "ctx.first_char == '{'", + "name": "{< IngestPipeline "pipeline-json" >}" } }, { "date": { - "field": "timestamp", + "field": "elasticsearch.deprecation.timestamp", "target_field": "@timestamp", "formats": [ "ISO8601" @@ -39,7 +43,22 @@ }, { "remove": { - "field": "timestamp" + "field": "elasticsearch.deprecation.timestamp" + } + }, + { + "remove": { + "field": [ + "first_char" + ] + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" } } ] diff --git a/filebeat/module/elasticsearch/deprecation/manifest.yml b/filebeat/module/elasticsearch/deprecation/manifest.yml index 28525f4f3da3..46389067c5ff 100644 --- a/filebeat/module/elasticsearch/deprecation/manifest.yml +++ b/filebeat/module/elasticsearch/deprecation/manifest.yml @@ -4,10 +4,13 @@ var: - name: paths default: - /var/log/elasticsearch/*_deprecation.log + - /var/log/elasticsearch/*_deprecation.json os.darwin: - /usr/local/var/lib/elasticsearch/*_deprecation.log + - /usr/local/var/lib/elasticsearch/*_deprecation.json os.windows: - c:/ProgramData/Elastic/Elasticsearch/logs/*_deprecation.log + - c:/ProgramData/Elastic/Elasticsearch/logs/*_deprecation.json - name: convert_timezone default: false # if ES < 6.1.0, this flag switches to false automatically when evaluating the @@ -16,5 +19,8 @@ var: version: 6.1.0 value: false -ingest_pipeline: ingest/pipeline.json +ingest_pipeline: + - ingest/pipeline.json + - ingest/pipeline-plaintext.json + - ingest/pipeline-json.json input: config/log.yml diff --git a/filebeat/module/elasticsearch/deprecation/test/elasticsearch_deprecation.log-expected.json b/filebeat/module/elasticsearch/deprecation/test/elasticsearch_deprecation.log-expected.json index 9324b6c97e85..156c28f746e9 100644 --- a/filebeat/module/elasticsearch/deprecation/test/elasticsearch_deprecation.log-expected.json +++ b/filebeat/module/elasticsearch/deprecation/test/elasticsearch_deprecation.log-expected.json @@ -2,7 +2,7 @@ { "@timestamp": "2018-04-23T16:40:13.737Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", + "elasticsearch.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -15,7 +15,7 @@ { "@timestamp": "2018-04-23T16:40:13.862Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", + "elasticsearch.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -28,7 +28,7 @@ { "@timestamp": "2018-04-23T16:40:14.792Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", + "elasticsearch.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -41,7 +41,7 @@ { "@timestamp": "2018-04-23T16:40:15.127Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", + "elasticsearch.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", diff --git a/filebeat/module/elasticsearch/deprecation/test/other_elasticsearch_deprecation.log-expected.json b/filebeat/module/elasticsearch/deprecation/test/other_elasticsearch_deprecation.log-expected.json index 2f00331f2c1c..1241db9006e8 100644 --- a/filebeat/module/elasticsearch/deprecation/test/other_elasticsearch_deprecation.log-expected.json +++ b/filebeat/module/elasticsearch/deprecation/test/other_elasticsearch_deprecation.log-expected.json @@ -2,7 +2,7 @@ { "@timestamp": "2017-11-30T13:38:16.911Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.c.ParseField", + "elasticsearch.component": "o.e.d.c.ParseField", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -15,7 +15,7 @@ { "@timestamp": "2017-11-30T13:38:16.941Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.c.ParseField", + "elasticsearch.component": "o.e.d.c.ParseField", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -28,7 +28,7 @@ { "@timestamp": "2017-11-30T13:39:28.986Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -41,7 +41,7 @@ { "@timestamp": "2017-11-30T13:39:36.339Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -54,7 +54,7 @@ { "@timestamp": "2017-11-30T13:40:49.540Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -67,7 +67,7 @@ { "@timestamp": "2017-11-30T14:08:37.413Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -80,7 +80,7 @@ { "@timestamp": "2017-11-30T14:08:37.413Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -93,7 +93,7 @@ { "@timestamp": "2017-11-30T14:08:46.006Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -106,7 +106,7 @@ { "@timestamp": "2017-11-30T14:08:46.006Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.UidFieldMapper", + "elasticsearch.component": "o.e.d.i.m.UidFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -119,7 +119,7 @@ { "@timestamp": "2017-12-01T14:05:54.017Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.AllFieldMapper", + "elasticsearch.component": "o.e.d.i.m.AllFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -132,7 +132,7 @@ { "@timestamp": "2017-12-01T14:05:54.019Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.AllFieldMapper", + "elasticsearch.component": "o.e.d.i.m.AllFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -145,7 +145,7 @@ { "@timestamp": "2017-12-01T14:06:52.059Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.AllFieldMapper", + "elasticsearch.component": "o.e.d.i.m.AllFieldMapper", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -158,7 +158,7 @@ { "@timestamp": "2017-12-01T14:46:10.428Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.s.a.InternalOrder$Parser", + "elasticsearch.component": "o.e.d.s.a.InternalOrder$Parser", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -171,7 +171,7 @@ { "@timestamp": "2017-12-04T16:17:18.271Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", + "elasticsearch.component": "o.e.d.a.a.i.t.p.PutIndexTemplateRequest", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -184,7 +184,7 @@ { "@timestamp": "2017-12-04T16:17:18.282Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.MapperService", + "elasticsearch.component": "o.e.d.i.m.MapperService", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", @@ -197,7 +197,7 @@ { "@timestamp": "2017-12-04T16:20:43.248Z", "ecs.version": "1.0.0-beta2", - "elasticsearch.server.component": "o.e.d.i.m.MapperService", + "elasticsearch.component": "o.e.d.i.m.MapperService", "event.dataset": "elasticsearch.deprecation", "event.module": "elasticsearch", "fileset.name": "deprecation", diff --git a/filebeat/module/elasticsearch/deprecation/test/test-json.log b/filebeat/module/elasticsearch/deprecation/test/test-json.log new file mode 100644 index 000000000000..c6852de59d29 --- /dev/null +++ b/filebeat/module/elasticsearch/deprecation/test/test-json.log @@ -0,0 +1,13 @@ +{"type": "deprecation", "timestamp": "2019-01-30T14:16:20,233-0800", "level": "WARN", "component": "o.e.d.r.a.d.RestGetAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in document get requests is deprecated, use the /{index}/_doc/{id} endpoint instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:16:22,388-0800", "level": "WARN", "component": "o.e.d.a.b.BulkRequest", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in bulk requests is deprecated." } +{"type": "deprecation", "timestamp": "2019-01-30T14:16:22,566-0800", "level": "WARN", "component": "o.e.d.r.a.d.RestUpdateAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:16:24,538-0800", "level": "WARN", "component": "o.e.d.r.a.s.RestSearchAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in search requests is deprecated." } +{"type": "deprecation", "timestamp": "2019-01-30T14:16:59,311-0800", "level": "WARN", "component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:16:59,922-0800", "level": "WARN", "component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:17:00,095-0800", "level": "WARN", "component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:17:13,226-0800", "level": "WARN", "component": "o.e.d.r.a.d.RestGetAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in document get requests is deprecated, use the /{index}/_doc/{id} endpoint instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:17:14,747-0800", "level": "WARN", "component": "o.e.d.a.b.BulkRequest", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in bulk requests is deprecated." } +{"type": "deprecation", "timestamp": "2019-01-30T14:17:14,801-0800", "level": "WARN", "component": "o.e.d.r.a.d.RestUpdateAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead." } +{"type": "deprecation", "timestamp": "2019-01-30T14:17:17,546-0800", "level": "WARN", "component": "o.e.d.r.a.s.RestSearchAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in search requests is deprecated." } +{"type": "deprecation", "timestamp": "2019-01-30T14:18:33,367-0800", "level": "WARN", "component": "o.e.d.x.w.a.i.IndexAction", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Specifying types in a watcher index action is deprecated." } +{"type": "deprecation", "timestamp": "2019-01-30T14:18:46,493-0800", "level": "WARN", "component": "o.e.d.i.q.QueryShardContext", "cluster.name": "es1", "node.name": "es1_1", "cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", "node.id": "gCoNXf3qSQ6a190zBKr7Bw", "message": "[types removal] Using the _type field in queries and aggregations is deprecated, prefer to use a field instead." } diff --git a/filebeat/module/elasticsearch/deprecation/test/test-json.log-expected.json b/filebeat/module/elasticsearch/deprecation/test/test-json.log-expected.json new file mode 100644 index 000000000000..8664764a21ac --- /dev/null +++ b/filebeat/module/elasticsearch/deprecation/test/test-json.log-expected.json @@ -0,0 +1,223 @@ +[ + { + "@timestamp": "2019-01-30T22:16:20.233Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.d.RestGetAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 0, + "message": "[types removal] Specifying types in document get requests is deprecated, use the /{index}/_doc/{id} endpoint instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:16:22.388Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.a.b.BulkRequest", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 387, + "message": "[types removal] Specifying types in bulk requests is deprecated.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:16:22.566Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.d.RestUpdateAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 717, + "message": "[types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:16:24.538Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.s.RestSearchAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 1113, + "message": "[types removal] Specifying types in search requests is deprecated.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:16:59.311Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 1452, + "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:16:59.922Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 1856, + "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:17:00.095Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.x.s.r.a.u.RestChangePasswordAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 2260, + "message": "[PUT /_xpack/security/user/{username}/_password] is deprecated! Use [PUT /_security/user/{username}/_password] instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:17:13.226Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.d.RestGetAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 2664, + "message": "[types removal] Specifying types in document get requests is deprecated, use the /{index}/_doc/{id} endpoint instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:17:14.747Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.a.b.BulkRequest", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 3051, + "message": "[types removal] Specifying types in bulk requests is deprecated.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:17:14.801Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.d.RestUpdateAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 3381, + "message": "[types removal] Specifying types in document update requests is deprecated, use the endpoint /{index}/_update/{id} instead.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:17:17.546Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.r.a.s.RestSearchAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 3777, + "message": "[types removal] Specifying types in search requests is deprecated.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:18:33.367Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.x.w.a.i.IndexAction", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 4116, + "message": "[types removal] Specifying types in a watcher index action is deprecated.", + "service.type": "elasticsearch" + }, + { + "@timestamp": "2019-01-30T22:18:46.493Z", + "ecs.version": "1.0.0-beta2", + "elasticsearch.cluster.name": "es1", + "elasticsearch.cluster.uuid": "S4dWw65ZT1eu3SltmAr84A", + "elasticsearch.component": "o.e.d.i.q.QueryShardContext", + "elasticsearch.node.id": "gCoNXf3qSQ6a190zBKr7Bw", + "elasticsearch.node.name": "es1_1", + "event.dataset": "elasticsearch.deprecation", + "event.module": "elasticsearch", + "fileset.name": "deprecation", + "input.type": "log", + "log.level": "WARN", + "log.offset": 4459, + "message": "[types removal] Using the _type field in queries and aggregations is deprecated, prefer to use a field instead.", + "service.type": "elasticsearch" + } +] \ No newline at end of file diff --git a/filebeat/module/elasticsearch/fields.go b/filebeat/module/elasticsearch/fields.go index 9796731ed2e7..3a822014be64 100644 --- a/filebeat/module/elasticsearch/fields.go +++ b/filebeat/module/elasticsearch/fields.go @@ -32,5 +32,5 @@ func init() { // AssetElasticsearch returns asset data. // This is the base64 encoded gzipped contents of module/elasticsearch. func AssetElasticsearch() string { - return "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" + return "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" }