From 8cf8f036b522f049d6ac07301b4832a20fb3b96b Mon Sep 17 00:00:00 2001 From: milan-elastic Date: Wed, 1 May 2024 15:45:16 +0530 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit e2a688fbb1c8712ba0cad243713146867ac2f986 Author: milan-elastic Date: Wed May 1 15:43:52 2024 +0530 Squashed commit of the following: commit a17de73aa84608f67a1baca4c094819b562e42e0 Author: milan-elastic <“milan.parmar@elastic.co”> Date: Wed May 1 15:29:41 2024 +0530 Squashed commit of the following: commit fccdb1f83f0048b07df6ee82fbd91ca432c799b9 Author: milan-elastic Date: Wed May 1 14:58:41 2024 +0530 add global filter on dashboard level for hadoop commit 686e49be78dc980b2f12d365580cb800fd7cf330 Merge: 024d864b4 01201a7b4 Author: “milan-elastic” <“milan.parmar@elastic.co”> Date: Wed May 1 11:38:59 2024 +0530 Merge branch 'main' of github.com:milan-elastic/integrations into mongodb-atlas-database-logs commit 01201a7b4193a019be02b2abeae16f86958a113f Author: Eric Forte <119343520+eric-forte-elastic@users.noreply.github.com> Date: Tue Apr 30 10:46:55 2024 -0400 [Security Rules] Update security rules package to v8.13.5 (#9762) * [Security Rules] Update security rules package to v8.13.5 * Add changelog entry for 8.13.5 --------- Co-authored-by: protectionsmachine <72879786+protectionsmachine@users.noreply.github.com> commit c9d1f1b7f0812c5b2f3ea641ff5a33a3d8435dce Author: Eric Forte <119343520+eric-forte-elastic@users.noreply.github.com> Date: Tue Apr 30 09:30:30 2024 -0400 [Security Rules] Update security rules package to v8.13.5-beta.1 (#9758) * [Security Rules] Update security rules package to v8.13.5-beta.1 * Add changelog entry for 8.13.5-beta.1 --------- Co-authored-by: protectionsmachine <72879786+protectionsmachine@users.noreply.github.com> commit a79f813fcca0bc4df01e0ffa0aff54ea2370ca65 Author: Tetiana Kravchenko Date: Tue Apr 30 11:32:37 2024 +0200 [kubernetes] Remove deprecated fields, add missing status.last_terminated_reason metric (#9736) * remove deprecated fields Signed-off-by: Tetiana Kravchenko * Update changelog.yml * add missing metric: last_terminated_reason; update description of the status.reason field Signed-off-by: Tetiana Kravchenko --------- Signed-off-by: Tetiana Kravchenko commit b1627a367284930c2ebc5e76b5090cbeb39073a5 Author: ShourieG <105607378+ShourieG@users.noreply.github.com> Date: Tue Apr 30 13:03:29 2024 +0530 [integrations][http_endpoint] - Converted HTTP Endpoint Integration to input type (#9732) * converted http_endpoint to input package type * updated changelog * updated original event in sample event commit 3a9b508a67b9d6ed97ff95010652c1e3dd72cc11 Author: Lalit Satapathy <69236064+lalit-satapathy@users.noreply.github.com> Date: Tue Apr 30 11:49:09 2024 +0530 Remove separate codeowners for system package kibana paths. (#9731) commit c90e8173ebe6f951ac7c3ccb3178c6d5af29a3a2 Author: Krishna Chaitanya Reddy Burri Date: Tue Apr 30 11:32:17 2024 +0530 [Crowdstrike,Azure] Fix flaky tests with ECS fields (#9738) * Fix flaky pipeline tests. * `azure.graphactivitylogs`: Add missing ECS field definitions. * `crowdstrike.falcon`: Update `geoip` processor to `destination` instead of `source`. commit ace8fb46d7b49542f7b3eb49b20d787dcb1583b2 Author: Aliabbas Attarwala <124054599+aliabbas-elastic@users.noreply.github.com> Date: Mon Apr 29 16:37:23 2024 +0530 [O11y][AWS] Rally benchmark `aws.cloudtrail` (#9448) commit d4e4aa4059abf84b935d1cc5ea3f36e9b8ced2cb Author: niraj-elastic <124254029+niraj-elastic@users.noreply.github.com> Date: Mon Apr 29 14:45:46 2024 +0530 [Apache] Update grok pattern for accepting user-identity (#9632) * update grok pattern * update changelog * address review comments * address review comments Co-authored-by: muthu-mps <101238137+muthu-mps@users.noreply.github.com> * address review comments * address review comment --------- Co-authored-by: muthu-mps <101238137+muthu-mps@users.noreply.github.com> commit dce569999afd64619dcddfc03850020f24306c53 Author: Mario Rodriguez Molins Date: Mon Apr 29 10:33:19 2024 +0200 Enable publishing packages from integrations-publish pipeline (#9712) Enable publishing packages from integrations-publish pipeline, and remove corresponding step from the main pipeline. commit c7bc53023288c7d34afd631c0c3e3552f6219419 Author: Chema Martínez Date: Sat Apr 27 08:57:55 2024 +0200 [zscaler_zia] Fix mapping of source.ip and source.nat.ip (#9727) * Fix mapping of source.ip and source.nat.ip * Update changelog * updated web datastream pipeline tests --------- Co-authored-by: Shourie Ganguly commit 4750ea85d2e6e62b7c9f5ffc2ae33edd53f07a9a Author: Mario Rodriguez Molins Date: Fri Apr 26 13:09:53 2024 +0200 [nginx] Update nginx config to listen in ipv6 too (#9720) commit 25b0988fa991ffda7f9ab69316e570cafe278b38 Author: Mario Rodriguez Molins Date: Fri Apr 26 10:45:03 2024 +0200 [Buildkite] Update filter to use api source (#9717) commit 45327cf8b3a89350db4dfd7aadde3dabd6b5b9c3 Author: Mario Rodriguez Molins Date: Fri Apr 26 10:13:22 2024 +0200 [Buildkite] Update filter condition to allow just from webhook source (#9714) commit 024d864b49f1dd333529f96e06de6dec15aac703 Author: milan-elastic Date: Fri Apr 26 13:00:47 2024 +0530 add dashboard level filter for apache tomcat commit 1cb5fadd838d8cfc75972dda9bd4ade8ca7f97f9 Author: Dan Kortschak Date: Fri Apr 26 16:23:35 2024 +0930 entityanalytics_ad: new package for Active Directory user collection (#9485) commit 37c598f076e9f90b63dbd69082bf029e57ef3998 Author: CarsonHrusovsky <95260807+CarsonHrusovsky@users.noreply.github.com> Date: Thu Apr 25 18:13:26 2024 -0500 [BBOT] New integration for Black Lantern Security scanner (#9651) commit d13e47472ee56854d83df1695bd5d53c998e0021 Author: Mario Rodriguez Molins Date: Thu Apr 25 11:55:39 2024 +0200 [Buildkite] Skip install package command in serverless builds for some packages (#9686) commit 0c2198b46b7cd6c16bac296df3389161263d26f0 Author: Mario Rodriguez Molins Date: Thu Apr 25 11:41:42 2024 +0200 [Buildkite] Add retry suffix for logs (#9703) commit d932e799c704ef21632da953b8bba3c5ac65d2c7 Author: Simon Kötting <145989254+SimonKoetting@users.noreply.github.com> Date: Thu Apr 25 07:35:45 2024 +0200 [Exchange Server] GA of Integration, Add Dashbord Panel Titles & System Tests (#9560) * Add Dashboard Titles * Add Dashboard Titles * Change Version to GA * adjust PR in Changelog * Add System Tests to all datstreams * fix imap system test config * remove Folder structure out of system tests sample logs * Fix mapping * Add convert for inode field * specify numeric_keyword_fields in system tests commit dba2901594dae1c35cf37d458526fb4d14df9903 Author: Dan Kortschak Date: Thu Apr 25 10:21:30 2024 +0930 rapid7_insightvm: canonicalize host.name to lower case and map subdomain to host.hostname (#9665) commit 4284262d5e0f669d3d632c5df72809e6f803255f Author: Panos Koutsovasilis Date: Wed Apr 24 20:34:13 2024 +0300 fix(fim): add auto option for backend and make it the default one (#9702) commit c563bb38d636fa1d5ac20947371ba776bf462719 Author: Panos Koutsovasilis Date: Wed Apr 24 19:40:04 2024 +0300 [juniper_netscreen]: include log.file.device_id and log.file.inode in base-fields (#9658) * fix(juniper_netscreen): include log.file.device_id and log.file.inode in base-fields.yml * fix(juniper_netscreen): update README.md commit f187d0d667d0c9c20f57cdc72b47e8a944e640a6 Author: Panos Koutsovasilis Date: Wed Apr 24 19:11:28 2024 +0300 [juniper_junos]: include log.file.device_id and log.file.inode in base-fields (#9657) * fix(juniper_junos): include log.file.device_id and log.file.inode in base-fields.yml * fix(juniper_junos): update README.md --- .buildkite/pipeline.publish.yml | 3 +- .buildkite/pipeline.yml | 17 - .buildkite/scripts/common.sh | 28 +- .github/CODEOWNERS | 3 +- catalog-info.yaml | 10 +- packages/apache/changelog.yml | 5 + .../_dev/test/pipeline/test-access-basic.log | 3 +- .../test-access-basic.log-expected.json | 69 +- .../test-access-darwin.log-expected.json | 12 +- .../test-access-ssl-request.log-expected.json | 4 +- .../test-access-ubuntu.log-expected.json | 18 +- .../test-access-vhost.log-expected.json | 2 +- .../elasticsearch/ingest_pipeline/default.yml | 7 +- .../data_stream/access/fields/fields.yml | 4 + .../data_stream/access/sample_event.json | 28 +- .../apache/data_stream/status/manifest.yml | 2 +- packages/apache/docs/README.md | 1 + packages/apache/manifest.yml | 2 +- packages/apache_tomcat/changelog.yml | 5 + ...-2a331270-b8cd-11ed-a099-3791d000f969.json | 202 +- ...-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223.json | 321 +-- ...-5b24a9c0-0e86-11ee-8c11-879004e1a267.json | 213 +- ...-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8.json | 296 +- ...-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195.json | 270 +- ...-9f21d4e0-b837-11ed-8008-cf66df3fb6bf.json | 26 +- ...-af7759b0-0a75-11ee-a8d8-d15950a587f6.json | 131 +- ...-c2e71320-bccb-11ed-8065-19219c0d55ab.json | 198 +- ...-c8ec7280-1a57-11ee-8c1a-099fb2bcb823.json | 336 +-- ...-c97374d0-bb78-11ed-812e-b1288b469a47.json | 70 +- ...-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195.json | 111 - ...-4d39c820-ddcd-11ed-8080-ddad81fe2c3c.json | 111 - ...-d0957a70-eda4-11ed-909a-2baec7270d1f.json | 124 - packages/apache_tomcat/manifest.yml | 2 +- .../benchmark/rally/cloudtrail-benchmark.yml | 14 + .../rally/cloudtrail-benchmark/config.yml | 156 + .../rally/cloudtrail-benchmark/fields.yml | 148 + .../cloudtrail-benchmark/template.ndjson | 116 + packages/azure/changelog.yml | 5 + .../_dev/test/pipeline/test-common-config.yml | 1 - .../graphactivitylogs/fields/ecs.yml | 8 + packages/azure/docs/graphactivitylogs.md | 6 + packages/azure/manifest.yml | 2 +- packages/bbot/LICENSE.txt | 21 + packages/bbot/_dev/build/build.yml | 4 + packages/bbot/_dev/build/docs/README.md | 37 + .../_dev/deploy/docker/docker-compose.yml | 7 + .../_dev/deploy/docker/sample_logs/log.log | 7 + packages/bbot/changelog.yml | 6 + .../_dev/test/pipeline/test-bbot-ndjson.log | 10 + .../test-bbot-ndjson.log-expected.json | 430 +++ .../_dev/test/pipeline/test-common-config.yml | 3 + .../_dev/test/system/test-default-config.yml | 9 + .../asm_intel/agent/stream/stream.yml.hbs | 19 + .../elasticsearch/ingest_pipeline/default.yml | 170 ++ .../asm_intel/fields/base-fields.yml | 12 + .../data_stream/asm_intel/fields/beats.yml | 9 + .../bbot/data_stream/asm_intel/fields/ecs.yml | 16 + .../data_stream/asm_intel/fields/fields.yml | 244 ++ .../bbot/data_stream/asm_intel/manifest.yml | 24 + .../data_stream/asm_intel/sample_event.json | 72 + packages/bbot/docs/README.md | 182 ++ packages/bbot/img/BBOT-Dashboard.png | Bin 0 -> 484528 bytes packages/bbot/img/BlackLantern-LOGO.svg | 145 + ...-8abcb381-42b3-4d99-a177-c103255eedd9.json | 1265 ++++++++ ...-45ce1599-99e3-4c4e-9c1a-07254be0e274.json | 109 + packages/bbot/manifest.yml | 43 + packages/bbot/validation.yml | 3 + packages/crowdstrike/changelog.yml | 5 + .../elasticsearch/ingest_pipeline/default.yml | 2 +- packages/crowdstrike/manifest.yml | 2 +- .../entityanalytics_ad/_dev/build/build.yml | 4 + .../_dev/build/docs/README.md | 69 + packages/entityanalytics_ad/changelog.yml | 6 + .../_dev/test/pipeline/test-common-config.yml | 3 + .../user/_dev/test/pipeline/test-user.json | 359 +++ .../pipeline/test-user.json-expected.json | 504 ++++ .../agent/stream/entity-analytics.yml.hbs | 22 + .../elasticsearch/ingest_pipeline/default.yml | 49 + .../elasticsearch/ingest_pipeline/entity.yml | 208 ++ .../elasticsearch/ingest_pipeline/marker.yml | 35 + .../data_stream/user/fields/base-fields.yml | 20 + .../data_stream/user/fields/beats.yml | 6 + .../data_stream/user/fields/ecs.yml | 104 + .../data_stream/user/fields/fields.yml | 124 + .../data_stream/user/manifest.yml | 85 + .../data_stream/user/sample_event.json | 53 + packages/entityanalytics_ad/docs/README.md | 234 ++ packages/entityanalytics_ad/img/logo.svg | 1248 ++++++++ packages/entityanalytics_ad/manifest.yml | 30 + packages/entityanalytics_ad/validation.yml | 5 + packages/fim/changelog.yml | 5 + packages/fim/manifest.yml | 18 +- packages/hadoop/changelog.yml | 5 + ...-3e16f2c0-cd28-11ec-be30-1d9331f0b107.json | 1280 +++++---- ...-70125ec0-cf78-11ec-bc3e-6faca2b11df2.json | 1126 ++++---- ...-c06fb680-cf76-11ec-bc3e-6faca2b11df2.json | 2257 ++++++++------- ...-cb235590-cd24-11ec-be30-1d9331f0b107.json | 2539 +++++++++-------- packages/hadoop/manifest.yml | 2 +- .../http_endpoint/_dev/build/docs/README.md | 18 - .../_dev/test/system/test-http-config.yml | 13 + .../agent/stream => agent/input}/http.yml.hbs | 8 +- packages/http_endpoint/changelog.yml | 5 + .../_dev/test/system/test-http-config.yml | 12 - .../data_stream/generic/manifest.yml | 182 -- packages/http_endpoint/fields/agent.yml | 35 + .../generic => }/fields/base-fields.yml | 1 - .../generic => }/fields/beats.yml | 0 .../{data_stream/generic => }/fields/ecs.yml | 4 + packages/http_endpoint/manifest.yml | 187 +- .../generic => }/sample_event.json | 23 +- packages/juniper_junos/changelog.yml | 5 + .../data_stream/log/fields/base-fields.yml | 6 + packages/juniper_junos/docs/README.md | 2 + packages/juniper_junos/manifest.yml | 2 +- packages/juniper_netscreen/changelog.yml | 5 + .../data_stream/log/fields/base-fields.yml | 6 + packages/juniper_netscreen/docs/README.md | 2 + packages/juniper_netscreen/manifest.yml | 2 +- packages/kubernetes/changelog.yml | 5 + .../state_container/fields/fields.yml | 19 +- .../kubernetes/docs/kube-state-metrics.md | 5 +- packages/kubernetes/manifest.yml | 2 +- .../_dev/deploy/docker/docker-compose.yml | 8 + .../docker/sample_logs/imappop_Imap4.log | 1 + .../docker/sample_logs/imappop_Pop3.log | 1 + .../docker/sample_logs/smtp_SmtpRecive.log | 1 + .../docker/sample_logs/smtp_SmtpSend.log | 1 + .../docker/sample_logs/test-httpproxy.log | 1 + .../sample_logs/test-messagetracking.log | 4 + .../microsoft_exchange_server/changelog.yml | 5 + .../_dev/test/system/test-default-config.yml | 11 + .../data_stream/httpproxy/fields/ecs.yml | 4 + .../data_stream/httpproxy/fields/fields.yml | 8 + .../_dev/test/system/test-default-config.yml | 11 + .../data_stream/imap4_pop3/fields/ecs.yml | 2 + .../data_stream/imap4_pop3/fields/fields.yml | 8 + .../_dev/test/system/test-default-config.yml | 11 + .../messagetracking/fields/ecs.yml | 4 + .../messagetracking/fields/fields.yml | 10 +- .../_dev/test/system/test-default-config.yml | 11 + .../data_stream/smtp/fields/ecs.yml | 2 + .../data_stream/smtp/fields/fields.yml | 8 + ...66a4ce40-1a00-4ced-9547-7e96def93f02.json} | 113 +- ...-75b14bd0-c034-11ee-a682-0f218cc418af.json | 2 +- .../microsoft_exchange_server/manifest.yml | 2 +- packages/nginx/_dev/deploy/docker/nginx.conf | 1 + packages/rapid7_insightvm/changelog.yml | 5 + .../asset/_dev/test/pipeline/test-asset.log | 2 +- .../pipeline/test-asset.log-expected.json | 8 +- .../elasticsearch/ingest_pipeline/default.yml | 22 +- packages/rapid7_insightvm/manifest.yml | 2 +- .../security_detection_engine/changelog.yml | 10 + ...5d917c4-aa3c-4111-974c-286c0312ff95_4.json | 122 + ...8f6f34b-8e16-487a-b5fd-9d22eb903db8_1.json | 113 + ...ee947e9-de7e-4281-a55d-09289bdf947e_7.json | 99 + ...ffbd37c-d4c5-46f8-9181-5afdd9172b4c_1.json | 93 + .../security_detection_engine/manifest.yml | 2 +- .../docker/sample_logs/web-http_endpoint.log | 2 +- packages/zscaler_zia/changelog.yml | 5 + .../test-web-http-endpoint.log-expected.json | 16 +- .../test/pipeline/test-web.log-expected.json | 88 +- .../elasticsearch/ingest_pipeline/default.yml | 8 +- .../data_stream/web/sample_event.json | 6 +- packages/zscaler_zia/docs/README.md | 6 +- packages/zscaler_zia/manifest.yml | 2 +- 165 files changed, 11855 insertions(+), 5881 deletions(-) delete mode 100644 packages/apache_tomcat/kibana/search/apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195.json delete mode 100644 packages/apache_tomcat/kibana/search/apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c.json delete mode 100644 packages/apache_tomcat/kibana/search/apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f.json create mode 100644 packages/aws/_dev/benchmark/rally/cloudtrail-benchmark.yml create mode 100644 packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/config.yml create mode 100644 packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/fields.yml create mode 100644 packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/template.ndjson create mode 100644 packages/bbot/LICENSE.txt create mode 100644 packages/bbot/_dev/build/build.yml create mode 100644 packages/bbot/_dev/build/docs/README.md create mode 100644 packages/bbot/_dev/deploy/docker/docker-compose.yml create mode 100644 packages/bbot/_dev/deploy/docker/sample_logs/log.log create mode 100644 packages/bbot/changelog.yml create mode 100644 packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log create mode 100644 packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log-expected.json create mode 100644 packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/bbot/data_stream/asm_intel/_dev/test/system/test-default-config.yml create mode 100644 packages/bbot/data_stream/asm_intel/agent/stream/stream.yml.hbs create mode 100644 packages/bbot/data_stream/asm_intel/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/bbot/data_stream/asm_intel/fields/base-fields.yml create mode 100644 packages/bbot/data_stream/asm_intel/fields/beats.yml create mode 100644 packages/bbot/data_stream/asm_intel/fields/ecs.yml create mode 100644 packages/bbot/data_stream/asm_intel/fields/fields.yml create mode 100644 packages/bbot/data_stream/asm_intel/manifest.yml create mode 100644 packages/bbot/data_stream/asm_intel/sample_event.json create mode 100644 packages/bbot/docs/README.md create mode 100644 packages/bbot/img/BBOT-Dashboard.png create mode 100644 packages/bbot/img/BlackLantern-LOGO.svg create mode 100644 packages/bbot/kibana/dashboard/bbot-8abcb381-42b3-4d99-a177-c103255eedd9.json create mode 100644 packages/bbot/kibana/search/bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274.json create mode 100644 packages/bbot/manifest.yml create mode 100644 packages/bbot/validation.yml create mode 100644 packages/entityanalytics_ad/_dev/build/build.yml create mode 100644 packages/entityanalytics_ad/_dev/build/docs/README.md create mode 100644 packages/entityanalytics_ad/changelog.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json create mode 100644 packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json-expected.json create mode 100644 packages/entityanalytics_ad/data_stream/user/agent/stream/entity-analytics.yml.hbs create mode 100644 packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/entity.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/marker.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/fields/base-fields.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/fields/beats.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/fields/ecs.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/fields/fields.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/manifest.yml create mode 100644 packages/entityanalytics_ad/data_stream/user/sample_event.json create mode 100644 packages/entityanalytics_ad/docs/README.md create mode 100644 packages/entityanalytics_ad/img/logo.svg create mode 100644 packages/entityanalytics_ad/manifest.yml create mode 100644 packages/entityanalytics_ad/validation.yml delete mode 100644 packages/http_endpoint/_dev/build/docs/README.md create mode 100644 packages/http_endpoint/_dev/test/system/test-http-config.yml rename packages/http_endpoint/{data_stream/generic/agent/stream => agent/input}/http.yml.hbs (94%) delete mode 100644 packages/http_endpoint/data_stream/generic/_dev/test/system/test-http-config.yml delete mode 100644 packages/http_endpoint/data_stream/generic/manifest.yml create mode 100644 packages/http_endpoint/fields/agent.yml rename packages/http_endpoint/{data_stream/generic => }/fields/base-fields.yml (94%) rename packages/http_endpoint/{data_stream/generic => }/fields/beats.yml (100%) rename packages/http_endpoint/{data_stream/generic => }/fields/ecs.yml (65%) rename packages/http_endpoint/{data_stream/generic => }/sample_event.json (50%) create mode 100644 packages/microsoft_exchange_server/_dev/deploy/docker/docker-compose.yml create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Imap4.log create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Pop3.log create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpRecive.log create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpSend.log create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-httpproxy.log create mode 100755 packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-messagetracking.log create mode 100644 packages/microsoft_exchange_server/data_stream/httpproxy/_dev/test/system/test-default-config.yml create mode 100644 packages/microsoft_exchange_server/data_stream/imap4_pop3/_dev/test/system/test-default-config.yml create mode 100644 packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/system/test-default-config.yml create mode 100644 packages/microsoft_exchange_server/data_stream/smtp/_dev/test/system/test-default-config.yml rename packages/microsoft_exchange_server/kibana/dashboard/{microsoft_exchange_server-8e9d55c5-637a-4fd8-b53b-9501e98a8e88.json => microsoft_exchange_server-66a4ce40-1a00-4ced-9547-7e96def93f02.json} (94%) create mode 100644 packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_4.json create mode 100644 packages/security_detection_engine/kibana/security_rule/28f6f34b-8e16-487a-b5fd-9d22eb903db8_1.json create mode 100644 packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_7.json create mode 100644 packages/security_detection_engine/kibana/security_rule/dffbd37c-d4c5-46f8-9181-5afdd9172b4c_1.json diff --git a/.buildkite/pipeline.publish.yml b/.buildkite/pipeline.publish.yml index ba49e5edda14..9f699c2364c7 100644 --- a/.buildkite/pipeline.publish.yml +++ b/.buildkite/pipeline.publish.yml @@ -37,7 +37,8 @@ steps: memory: "8G" env: ARTIFACTS_FOLDER: "artifacts-to-sign" - DRY_RUN: "true" + # by default it will publish packages + DRY_RUN: "${DRY_RUN:-false}" depends_on: - step: "check" allow_failure: false diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index df3e5f0c7788..c6f9df1cc691 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,5 +1,4 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json - env: SETUP_GVM_VERSION: "v0.5.2" LINUX_AGENT_IMAGE: "golang:${GO_VERSION}" @@ -29,22 +28,6 @@ steps: cpu: "8" memory: "4G" - - label: ":package: Build packages" - key: "build-packages" - command: ".buildkite/scripts/build_packages.sh" - agents: - image: "${LINUX_AGENT_IMAGE}" - cpu: "8" - memory: "8G" - env: - ARTIFACTS_FOLDER: "artifacts-to-sign" - DRY_RUN: "false" - depends_on: - - step: "check" - allow_failure: false - artifact_paths: - - artifacts-to-sign/*.zip - - label: "Trigger integrations" key: "test-integrations" command: ".buildkite/scripts/trigger_integrations_in_parallel.sh" diff --git a/.buildkite/scripts/common.sh b/.buildkite/scripts/common.sh index 37dfdfc7565b..deccf8aaac8b 100755 --- a/.buildkite/scripts/common.sh +++ b/.buildkite/scripts/common.sh @@ -309,7 +309,6 @@ create_kind_cluster() { kind create cluster --config "${WORKSPACE}/kind-config.yaml" --image "kindest/node:${K8S_VERSION}" } - delete_kind_cluster() { echo "--- Delete kind cluster" kind delete cluster || true @@ -410,7 +409,6 @@ is_package_excluded() { return 1 } - is_supported_capability() { if [ "${SERVERLESS_PROJECT}" == "" ]; then return 0 @@ -755,6 +753,19 @@ build_zip_package() { return 0 } +skip_installation_step() { + local package=$1 + if ! is_serverless ; then + return 1 + fi + + if [[ "$package" == "security_detection_engine" ]]; then + return 0 + fi + + return 1 +} + install_package() { local package=$1 echo "Install package: ${package}" @@ -814,10 +825,13 @@ run_tests_package() { fi fi - echo "--- [${package}] test installation" - if ! install_package "${package}" ; then - return 1 + if ! skip_installation_step "${package}" ; then + echo "--- [${package}] test installation" + if ! install_package "${package}" ; then + return 1 + fi fi + echo "--- [${package}] run test suites" if is_serverless; then if ! test_package_in_serverless "${package}" ; then @@ -877,6 +891,10 @@ upload_safe_logs_from_package() { fi local package=$1 + local retry_count="${BUILDKITE_RETRY_COUNT:-"0"}" + if [[ "${retry_count}" -ne 0 ]]; then + package="${package}_retry_${retry_count}" + fi local build_directory=$2 local parent_folder="insecure-logs" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 90c974ce35a0..9f7ee4c8d53c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -97,6 +97,7 @@ /packages/azure_metrics/data_stream/storage_account @elastic/obs-ds-hosted-services /packages/barracuda @elastic/security-service-integrations /packages/barracuda_cloudgen_firewall @elastic/security-service-integrations +/packages/bbot @elastic/security-service-integrations /packages/beaconing @elastic/ml-ui @elastic/sec-applied-ml /packages/beat @elastic/stack-monitoring /packages/bitdefender @elastic/security-service-integrations @@ -146,6 +147,7 @@ /packages/elastic_package_registry @elastic/ecosystem /packages/elasticsearch @elastic/stack-monitoring /packages/enterprisesearch @elastic/stack-monitoring +/packages/entityanalytics_ad @elastic/security-service-integrations /packages/entityanalytics_entra_id @elastic/security-service-integrations /packages/entityanalytics_okta @elastic/security-service-integrations /packages/eset_protect @elastic/security-service-integrations @@ -302,7 +304,6 @@ /packages/system/changelog.yml @elastic/obs-infraobs-integrations @elastic/sec-linux-platform @elastic/sec-windows-platform /packages/system/data_stream/auth @elastic/sec-windows-platform /packages/system/data_stream/security @elastic/sec-linux-platform @elastic/sec-windows-platform -/packages/system/kibana @elastic/elastic-agent-data-plane @elastic/kibana-visualizations /packages/system/manifest.yml @elastic/obs-infraobs-integrations @elastic/sec-linux-platform @elastic/sec-windows-platform /packages/system_audit @elastic/sec-linux-platform /packages/tanium @elastic/security-service-integrations diff --git a/catalog-info.yaml b/catalog-info.yaml index 58de250ff584..3793c8207d57 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -50,7 +50,7 @@ spec: build_tags: false filter_enabled: true filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null && build.source == 'api') repository: elastic/integrations cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: '!main !backport-*' @@ -99,7 +99,7 @@ spec: build_tags: false filter_enabled: true filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null && build.source == 'api') repository: elastic/integrations cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: '!main' @@ -146,7 +146,7 @@ spec: build_tags: false filter_enabled: true filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null && build.source == 'api') repository: elastic/integrations cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: '!main' @@ -188,7 +188,7 @@ spec: build_tags: false filter_enabled: true filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null && build.source == 'api') repository: elastic/integrations cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: '!main' @@ -232,7 +232,7 @@ spec: build_tags: false filter_enabled: true filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null && build.source == 'api') repository: elastic/integrations cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: '!main !backport-*' diff --git a/packages/apache/changelog.yml b/packages/apache/changelog.yml index 1f8dcedb1664..7ba6a86de02f 100644 --- a/packages/apache/changelog.yml +++ b/packages/apache/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.1" + changes: + - description: Update grok for accepting user-identity. + type: bugfix + link: https://github.com/elastic/integrations/pull/9632 - version: "1.17.0" changes: - description: Limit request tracer log count to five. diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log index 6f995c73596b..04d6db9c240b 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log @@ -7,4 +7,5 @@ monitoring-server - - [29/May/2017:19:02:48 +0000] "GET /status HTTP/1.1" 200 61 monitoring-server - - [29/May/2017:19:02:48 +0000] "GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" X-Forwarded-For="-" 89.160.20.112 - - [29/May/2017:19:02:48 +0000] "GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" X-Forwarded-For="10.0.0.2,10.0.0.1" 2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6 - - [29/May/2017:19:02:48 +0000] "GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2" X-Forwarded-For="10.225.192.17, 10.2.2.121" -monitoring-server - - [17/May/2022:21:41:43 +0000] "GET / HTTP/1.1" 200 45 "-" "curl/7.79.1" X-Forwarded-For="192.168.0.2" \ No newline at end of file +monitoring-server - - [17/May/2022:21:41:43 +0000] "GET / HTTP/1.1" 200 45 "-" "curl/7.79.1" X-Forwarded-For="192.168.0.2" +127.0.0.1 user-identity frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 \ No newline at end of file diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log-expected.json b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log-expected.json index 539f364378fa..a67b4876efa0 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log-expected.json +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-basic.log-expected.json @@ -15,7 +15,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409634501Z", + "ingested": "2024-04-26T05:46:25.296250288Z", "kind": "event", "original": "::1 - - [26/Dec/2016:16:16:29 +0200] \"GET /favicon.ico HTTP/1.1\" 404 209", "outcome": "failure" @@ -63,7 +63,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409644668Z", + "ingested": "2024-04-26T05:46:25.296284705Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:13 +0000] \"GET /hello HTTP/1.1\" 404 499 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" @@ -124,7 +124,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409645876Z", + "ingested": "2024-04-26T05:46:25.296289743Z", "kind": "event", "original": "::1 - - [26/Dec/2016:16:16:48 +0200] \"-\" 408 -", "outcome": "failure" @@ -160,7 +160,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409646876Z", + "ingested": "2024-04-26T05:46:25.296293311Z", "kind": "event", "original": "172.17.0.1 - - [29/May/2017:19:02:48 +0000] \"GET /stringpatch HTTP/1.1\" 404 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2\" \"-\"", "outcome": "failure" @@ -221,7 +221,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409647793Z", + "ingested": "2024-04-26T05:46:25.296296691Z", "kind": "event", "original": "monitoring-server - - [29/May/2017:19:02:48 +0000] \"GET /status HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2\" \"-\"", "outcome": "success" @@ -282,7 +282,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409648793Z", + "ingested": "2024-04-26T05:46:25.296300048Z", "kind": "event", "original": "127.0.0.1 - - [02/Feb/2019:05:38:45 +0100] \"-\" 408 152 \"-\" \"-\"", "outcome": "failure" @@ -331,7 +331,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409649793Z", + "ingested": "2024-04-26T05:46:25.296303835Z", "kind": "event", "original": "monitoring-server - - [29/May/2017:19:02:48 +0000] \"GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2\" X-Forwarded-For=\"-\"", "outcome": "success" @@ -398,7 +398,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409650668Z", + "ingested": "2024-04-26T05:46:25.296310193Z", "kind": "event", "original": "89.160.20.112 - - [29/May/2017:19:02:48 +0000] \"GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2\" X-Forwarded-For=\"10.0.0.2,10.0.0.1\"", "outcome": "success" @@ -486,7 +486,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409651543Z", + "ingested": "2024-04-26T05:46:25.296313609Z", "kind": "event", "original": "2a02:cf40:add:4002:91f2:a9b2:e09a:6fc6 - - [29/May/2017:19:02:48 +0000] \"GET /A%20Beka%20G1%20Howe/029_AND_30/15%20reading%20elephants.mp4 HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2\" X-Forwarded-For=\"10.225.192.17, 10.2.2.121\"", "outcome": "success" @@ -564,7 +564,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.409652876Z", + "ingested": "2024-04-26T05:46:25.296316938Z", "kind": "event", "original": "monitoring-server - - [17/May/2022:21:41:43 +0000] \"GET / HTTP/1.1\" 200 45 \"-\" \"curl/7.79.1\" X-Forwarded-For=\"192.168.0.2\"", "outcome": "success" @@ -607,6 +607,55 @@ "original": "curl/7.79.1", "version": "7.79.1" } + }, + { + "@timestamp": "2000-10-10T20:55:36.000Z", + "apache": { + "access": { + "identity": "user-identity", + "remote_addresses": [ + "127.0.0.1" + ] + } + }, + "ecs": { + "version": "8.5.1" + }, + "event": { + "category": "web", + "created": "2020-04-28T11:07:58.223Z", + "ingested": "2024-04-26T05:46:25.296320274Z", + "kind": "event", + "original": "127.0.0.1 user-identity frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326", + "outcome": "success" + }, + "http": { + "request": { + "method": "GET" + }, + "response": { + "body": { + "bytes": 2326 + }, + "status_code": 200 + }, + "version": "1.0" + }, + "source": { + "address": "127.0.0.1", + "ip": "127.0.0.1" + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "extension": "gif", + "original": "/apache_pb.gif", + "path": "/apache_pb.gif" + }, + "user": { + "name": "frank" + } } ] } \ No newline at end of file diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-darwin.log-expected.json b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-darwin.log-expected.json index 04feb1dc8ae5..5204fface780 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-darwin.log-expected.json +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-darwin.log-expected.json @@ -15,7 +15,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483539043Z", + "ingested": "2024-04-26T05:46:25.447843628Z", "kind": "event", "original": "::1 - - [26/Dec/2016:16:16:28 +0200] \"GET / HTTP/1.1\" 200 45", "outcome": "success" @@ -62,7 +62,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483550209Z", + "ingested": "2024-04-26T05:46:25.447895323Z", "kind": "event", "original": "::1 - - [26/Dec/2016:16:16:29 +0200] \"GET /favicon.ico HTTP/1.1\" 404 209", "outcome": "failure" @@ -110,7 +110,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483551501Z", + "ingested": "2024-04-26T05:46:25.447905030Z", "kind": "event", "original": "::1 - - [26/Dec/2016:16:16:48 +0200] \"-\" 408 -", "outcome": "failure" @@ -146,7 +146,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483552501Z", + "ingested": "2024-04-26T05:46:25.447912585Z", "kind": "event", "original": "89.160.20.156 - - [26/Dec/2016:18:23:35 +0200] \"GET / HTTP/1.1\" 200 45", "outcome": "success" @@ -211,7 +211,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483553418Z", + "ingested": "2024-04-26T05:46:25.447919912Z", "kind": "event", "original": "89.160.20.156 - - [26/Dec/2016:18:23:41 +0200] \"GET /notfound HTTP/1.1\" 404 206", "outcome": "failure" @@ -276,7 +276,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.483554501Z", + "ingested": "2024-04-26T05:46:25.447927217Z", "kind": "event", "original": "89.160.20.156 - - [26/Dec/2016:18:23:45 +0200] \"GET /hmm HTTP/1.1\" 404 201", "outcome": "failure" diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ssl-request.log-expected.json b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ssl-request.log-expected.json index 6c618cc57938..dd593dfa2ed8 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ssl-request.log-expected.json +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ssl-request.log-expected.json @@ -19,7 +19,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.533303168Z", + "ingested": "2024-04-26T05:46:25.568940509Z", "kind": "event", "original": "[10/Aug/2018:09:45:56 +0200] 172.30.0.119 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 \"GET /nagiosxi/ajaxhelper.php?cmd=getxicoreajax\u0026amp;opts=%7B%22func%22%3A%22get_admin_tasks_html%22%2C%22args%22%3A%22%22%7D\u0026amp;nsp=b5c7d5d4b6f7d0cf0c92f9cbdf737f6a5c838218425e6ae21 HTTP/1.1\" 1375" }, @@ -72,7 +72,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.533318376Z", + "ingested": "2024-04-26T05:46:25.568967013Z", "kind": "event", "original": "[16/Oct/2019:11:53:47 +0200] 89.160.20.156 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 \"GET /appl/ajaxhelper.php?cmd=getxicoreajax\u0026opts=%7B%22func%22%3A%22get_pagetop_alert_content_html%22%2C%22args%22%3A%22%22%7D\u0026nsp=c2700eab9797eda8a9f65a3ab17a6adbceccd60a6cca7708650a5923950d HTTP/1.1\" -" }, diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ubuntu.log-expected.json b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ubuntu.log-expected.json index 50a75ea6b312..828594c5c619 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ubuntu.log-expected.json +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-ubuntu.log-expected.json @@ -15,7 +15,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577647543Z", + "ingested": "2024-04-26T05:46:25.677798830Z", "kind": "event", "original": "127.0.0.1 - - [26/Dec/2016:16:18:09 +0000] \"GET / HTTP/1.1\" 200 491 \"-\" \"Wget/1.13.4 (linux-gnu)\"", "outcome": "success" @@ -74,7 +74,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577659626Z", + "ingested": "2024-04-26T05:46:25.677841187Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:00 +0000] \"GET / HTTP/1.1\" 200 484 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\"", "outcome": "success" @@ -135,7 +135,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577660959Z", + "ingested": "2024-04-26T05:46:25.677846439Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:00 +0000] \"GET /favicon.ico HTTP/1.1\" 404 504 \"http://192.168.33.72/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\"", "outcome": "failure" @@ -197,7 +197,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577662126Z", + "ingested": "2024-04-26T05:46:25.677850179Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:08 +0000] \"GET / HTTP/1.1\" 200 484 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "success" @@ -258,7 +258,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577663126Z", + "ingested": "2024-04-26T05:46:25.677853779Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:08 +0000] \"GET /favicon.ico HTTP/1.1\" 404 504 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" @@ -320,7 +320,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577664043Z", + "ingested": "2024-04-26T05:46:25.677857034Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:08 +0000] \"GET /favicon.ico HTTP/1.1\" 404 504 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" @@ -382,7 +382,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577664918Z", + "ingested": "2024-04-26T05:46:25.677860896Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:10 +0000] \"GET /test HTTP/1.1\" 404 498 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" @@ -443,7 +443,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577665918Z", + "ingested": "2024-04-26T05:46:25.677864153Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:13 +0000] \"GET /hello HTTP/1.1\" 404 499 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" @@ -504,7 +504,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.577666793Z", + "ingested": "2024-04-26T05:46:25.677867406Z", "kind": "event", "original": "192.168.33.1 - - [26/Dec/2016:16:22:17 +0000] \"GET /crap HTTP/1.1\" 404 499 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" diff --git a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-vhost.log-expected.json b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-vhost.log-expected.json index 84b329493a60..67cce22859d8 100644 --- a/packages/apache/data_stream/access/_dev/test/pipeline/test-access-vhost.log-expected.json +++ b/packages/apache/data_stream/access/_dev/test/pipeline/test-access-vhost.log-expected.json @@ -18,7 +18,7 @@ "event": { "category": "web", "created": "2020-04-28T11:07:58.223Z", - "ingested": "2022-12-08T15:09:52.634020126Z", + "ingested": "2024-04-26T05:46:25.815837486Z", "kind": "event", "original": "vhost1.domaine.fr 192.168.33.2 - - [26/Dec/2016:16:22:14 +0000] \"GET /hello HTTP/1.1\" 404 499 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0\"", "outcome": "failure" diff --git a/packages/apache/data_stream/access/elasticsearch/ingest_pipeline/default.yml b/packages/apache/data_stream/access/elasticsearch/ingest_pipeline/default.yml index 556390d4a14d..706702f436ac 100644 --- a/packages/apache/data_stream/access/elasticsearch/ingest_pipeline/default.yml +++ b/packages/apache/data_stream/access/elasticsearch/ingest_pipeline/default.yml @@ -18,7 +18,7 @@ processors: - grok: field: event.original patterns: - - '(%{IPORHOST:destination.domain} )?%{IPORHOST:source.address} - %{DATA:user.name} \[%{HTTPDATE:apache.access.time}\] + - '(%{IPORHOST:destination.domain} )?%{IPORHOST:source.address} %{DATA:apache.access.identity} %{DATA:user.name} \[%{HTTPDATE:apache.access.time}\] "(?:%{WORD:http.request.method} %{DATA:_tmp.url_orig} HTTP/%{NUMBER:http.version}|-)?" %{NUMBER:http.response.status_code:long} (?:%{NUMBER:http.response.body.bytes:long}|-)( "%{DATA:http.request.referrer}")?( "%{DATA:user_agent.original}")?( X-Forwarded-For="%{ADDRESS_LIST:apache.access.remote_addresses}")?' @@ -197,6 +197,11 @@ processors: if: "ctx.tags == null || !(ctx.tags.contains('preserve_original_event'))" ignore_failure: true ignore_missing: true + - remove: + field: apache.access.identity + if: ctx.apache?.access?.identity == "-" + ignore_failure: true + ignore_missing: true on_failure: - set: field: error.message diff --git a/packages/apache/data_stream/access/fields/fields.yml b/packages/apache/data_stream/access/fields/fields.yml index f9dc5e7bd4e6..aed9cb815b7e 100644 --- a/packages/apache/data_stream/access/fields/fields.yml +++ b/packages/apache/data_stream/access/fields/fields.yml @@ -14,3 +14,7 @@ type: keyword description: | An array of remote addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. + - name: identity + type: keyword + description: | + The client's identity, as specified in RFC 1413, determined by the identd on the client's machine. diff --git a/packages/apache/data_stream/access/sample_event.json b/packages/apache/data_stream/access/sample_event.json index 24a799813f9d..c8763b303e54 100644 --- a/packages/apache/data_stream/access/sample_event.json +++ b/packages/apache/data_stream/access/sample_event.json @@ -1,11 +1,11 @@ { - "@timestamp": "2022-12-09T03:54:22.000Z", + "@timestamp": "2024-04-26T05:43:59.000Z", "agent": { - "ephemeral_id": "d14551cd-5fc4-4f19-8a0e-5897ecaefbf7", - "id": "46343e0c-0d8c-464b-a216-cacf63027d6f", + "ephemeral_id": "70424ab1-cd93-4ec9-bc96-18818e5a0e4d", + "id": "2d90e456-ced7-419b-89a1-3f9bbbad454f", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.5.0" + "version": "8.13.0" }, "apache": { "access": { @@ -23,39 +23,39 @@ "version": "8.5.1" }, "elastic_agent": { - "id": "46343e0c-0d8c-464b-a216-cacf63027d6f", + "id": "2d90e456-ced7-419b-89a1-3f9bbbad454f", "snapshot": false, - "version": "8.5.0" + "version": "8.13.0" }, "event": { "agent_id_status": "verified", "category": "web", - "created": "2022-12-09T03:54:39.182Z", + "created": "2024-04-26T05:44:18.354Z", "dataset": "apache.access", - "ingested": "2022-12-09T03:54:40Z", + "ingested": "2024-04-26T05:44:30Z", "kind": "event", "outcome": "success" }, "host": { "architecture": "x86_64", - "containerized": false, + "containerized": true, "hostname": "docker-fleet-agent", - "id": "66392b0697b84641af8006d87aeb89f1", + "id": "8259e024976a406e8a54cdbffeb84fec", "ip": [ - "172.18.0.7" + "192.168.248.7" ], "mac": [ - "02-42-AC-12-00-07" + "02-42-C0-A8-F8-07" ], "name": "docker-fleet-agent", "os": { "codename": "focal", "family": "debian", - "kernel": "5.15.49-linuxkit", + "kernel": "3.10.0-1160.99.1.el7.x86_64", "name": "Ubuntu", "platform": "ubuntu", "type": "linux", - "version": "20.04.5 LTS (Focal Fossa)" + "version": "20.04.6 LTS (Focal Fossa)" } }, "http": { diff --git a/packages/apache/data_stream/status/manifest.yml b/packages/apache/data_stream/status/manifest.yml index 69fcead5c7ab..cf869260e2d8 100644 --- a/packages/apache/data_stream/status/manifest.yml +++ b/packages/apache/data_stream/status/manifest.yml @@ -20,4 +20,4 @@ streams: title: Apache status metrics description: Collect Apache status metrics elasticsearch: - index_mode: "time_series" \ No newline at end of file + index_mode: "time_series" diff --git a/packages/apache/docs/README.md b/packages/apache/docs/README.md index 55d098ecb526..039244c8214f 100644 --- a/packages/apache/docs/README.md +++ b/packages/apache/docs/README.md @@ -19,6 +19,7 @@ Access logs collects the Apache access logs. | Field | Description | Type | |---|---|---| | @timestamp | Event timestamp. | date | +| apache.access.identity | The client's identity, as specified in RFC 1413, determined by the identd on the client's machine. | keyword | | apache.access.remote_addresses | An array of remote addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. | keyword | | apache.access.ssl.cipher | SSL cipher name. - name: nginx.access | keyword | | apache.access.ssl.protocol | SSL protocol version. | keyword | diff --git a/packages/apache/manifest.yml b/packages/apache/manifest.yml index 991b4cef8f8c..f932adfa97dc 100644 --- a/packages/apache/manifest.yml +++ b/packages/apache/manifest.yml @@ -1,7 +1,7 @@ format_version: 1.0.0 name: apache title: Apache HTTP Server -version: "1.17.0" +version: "1.17.1" license: basic source: license: Elastic-2.0 diff --git a/packages/apache_tomcat/changelog.yml b/packages/apache_tomcat/changelog.yml index 9bbc5974ce48..166eb7a7a732 100644 --- a/packages/apache_tomcat/changelog.yml +++ b/packages/apache_tomcat/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Add global filter on data_stream.dataset to improve performance. + type: enhancement + link: https://github.com/elastic/integrations/pull/1 #Fix ME - version: "1.4.0" changes: - description: Enable secrets for sensitive fields. For more details, refer https://www.elastic.co/guide/en/fleet/current/agent-policy.html#agent-policy-secret-values diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-2a331270-b8cd-11ed-a099-3791d000f969.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-2a331270-b8cd-11ed-a099-3791d000f969.json index 1bc2443c4519..823dde6a4486 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-2a331270-b8cd-11ed-a099-3791d000f969.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-2a331270-b8cd-11ed-a099-3791d000f969.json @@ -17,9 +17,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.session" @@ -28,7 +28,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.session" + "data_stream.dataset": "apache_tomcat.session" } } } @@ -55,11 +55,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-0175242f-2671-474a-a828-deff61e43fb6", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "34b8c32b-1aaf-45de-bdb4-09081617f0c8", - "type": "index-pattern" } ], "state": { @@ -145,29 +140,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "34b8c32b-1aaf-45de-bdb4-09081617f0c8", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -221,8 +194,7 @@ }, "panelIndex": "a39adf70-8e40-4d80-a127-a1747a75be1f", "title": "Created sessions over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -232,11 +204,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-85bb5555-4581-4120-ab66-6ce66aeb4066", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "fa5f9b9a-65b0-452a-bcd0-1df3a33b1b3e", - "type": "index-pattern" } ], "state": { @@ -322,29 +289,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "fa5f9b9a-65b0-452a-bcd0-1df3a33b1b3e", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -421,8 +366,7 @@ }, "panelIndex": "91d26f64-351f-420e-a37b-88a882ecba0e", "title": "Expired sessions per application [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -432,11 +376,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-57b12f03-6995-4072-8994-d512e5700ee4", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "de6b5c32-5630-4877-8b24-be30c47ee9c1", - "type": "index-pattern" } ], "state": { @@ -522,29 +461,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "de6b5c32-5630-4877-8b24-be30c47ee9c1", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -603,8 +520,7 @@ }, "panelIndex": "5922510e-e6a2-4f9c-aceb-83715cc3b539", "title": "Current active sessions over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -615,11 +531,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-9b0dd57c-eb2b-434c-a7d6-21a8e5e83e8b", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "efe32f1b-651c-4ce4-a1e9-06cb0cf2d5af", - "type": "index-pattern" } ], "state": { @@ -685,29 +596,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "efe32f1b-651c-4ce4-a1e9-06cb0cf2d5af", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -772,8 +661,7 @@ }, "panelIndex": "2d408e1c-da52-4aed-b760-812f89f48184", "title": "Session expiration processing time [Metric Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -783,11 +671,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-8533f30a-f59a-4f19-8a60-2231660778cf", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "1df29502-1178-4b06-b0c8-3009d0c3271b", - "type": "index-pattern" } ], "state": { @@ -904,29 +787,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "1df29502-1178-4b06-b0c8-3009d0c3271b", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -985,20 +846,17 @@ }, "panelIndex": "8ce83532-0623-4974-9280-b6c56c6b0c27", "title": "Sessions overview [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Session", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-06-09T11:27:22.150Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T08:47:19.036Z", "id": "apache_tomcat-2a331270-b8cd-11ed-a099-3791d000f969", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -1010,51 +868,26 @@ "name": "a39adf70-8e40-4d80-a127-a1747a75be1f:indexpattern-datasource-layer-0175242f-2671-474a-a828-deff61e43fb6", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "a39adf70-8e40-4d80-a127-a1747a75be1f:34b8c32b-1aaf-45de-bdb4-09081617f0c8", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "91d26f64-351f-420e-a37b-88a882ecba0e:indexpattern-datasource-layer-85bb5555-4581-4120-ab66-6ce66aeb4066", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "91d26f64-351f-420e-a37b-88a882ecba0e:fa5f9b9a-65b0-452a-bcd0-1df3a33b1b3e", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "5922510e-e6a2-4f9c-aceb-83715cc3b539:indexpattern-datasource-layer-57b12f03-6995-4072-8994-d512e5700ee4", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "5922510e-e6a2-4f9c-aceb-83715cc3b539:de6b5c32-5630-4877-8b24-be30c47ee9c1", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "2d408e1c-da52-4aed-b760-812f89f48184:indexpattern-datasource-layer-9b0dd57c-eb2b-434c-a7d6-21a8e5e83e8b", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "2d408e1c-da52-4aed-b760-812f89f48184:efe32f1b-651c-4ce4-a1e9-06cb0cf2d5af", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "8ce83532-0623-4974-9280-b6c56c6b0c27:indexpattern-datasource-layer-8533f30a-f59a-4f19-8a60-2231660778cf", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "8ce83532-0623-4974-9280-b6c56c6b0c27:1df29502-1178-4b06-b0c8-3009d0c3271b", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "controlGroup_48036e6b-bb5f-4779-8ff2-a0affc20a119:optionsListDataView", @@ -1066,5 +899,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223.json index 4df83671119a..431dbf19ec2a 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223.json @@ -11,9 +11,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.access" @@ -22,7 +22,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.access" + "data_stream.dataset": "apache_tomcat.access" } } } @@ -52,12 +52,7 @@ }, { "id": "logs-*", - "name": "167c0497-503a-417c-a30c-768525e8b8dc", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "8c6e9f3c-a1db-4cf0-8b30-1d860be11d98", + "name": "9e014f3c-d19f-4e8c-9992-0053e2cff960", "type": "index-pattern" } ], @@ -125,27 +120,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "167c0497-503a-417c-a30c-768525e8b8dc", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -154,7 +128,7 @@ "alias": null, "disabled": false, "field": "http.response.status_code", - "index": "8c6e9f3c-a1db-4cf0-8b30-1d860be11d98", + "index": "9e014f3c-d19f-4e8c-9992-0053e2cff960", "key": "http.response.status_code", "negate": false, "params": { @@ -242,8 +216,7 @@ }, "panelIndex": "af3cd65d-02e9-477c-8b3b-45f4b717a982", "title": "Top 10 client IPs with most client errors [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -256,12 +229,7 @@ }, { "id": "logs-*", - "name": "0a1fad48-e8d5-4a9b-b8bb-fc7067521d7a", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "758d6656-914a-4304-bbe7-f85474ef30b9", + "name": "5d4ff327-4d18-4187-8e53-d6216c07701f", "type": "index-pattern" } ], @@ -329,27 +297,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "0a1fad48-e8d5-4a9b-b8bb-fc7067521d7a", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -358,7 +305,7 @@ "alias": null, "disabled": false, "field": "http.response.status_code", - "index": "758d6656-914a-4304-bbe7-f85474ef30b9", + "index": "5d4ff327-4d18-4187-8e53-d6216c07701f", "key": "http.response.status_code", "negate": false, "params": { @@ -445,8 +392,7 @@ }, "panelIndex": "30187e6e-f500-4abd-b7c7-ebc64d84e2d9", "title": "Top 10 client IPs with most server errors [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -459,12 +405,7 @@ }, { "id": "logs-*", - "name": "54abd3e5-f8e0-40b6-b458-c1a6906bf3f5", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "72bc9598-8105-4c02-b17a-8d8e8acae300", + "name": "514f5bf9-1cf9-4864-8398-945d0168d126", "type": "index-pattern" } ], @@ -530,28 +471,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "54abd3e5-f8e0-40b6-b458-c1a6906bf3f5", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -560,7 +479,7 @@ "alias": null, "disabled": false, "field": "apache_tomcat.access.response_time", - "index": "72bc9598-8105-4c02-b17a-8d8e8acae300", + "index": "514f5bf9-1cf9-4864-8398-945d0168d126", "key": "apache_tomcat.access.response_time", "negate": false, "type": "exists", @@ -616,8 +535,7 @@ }, "panelIndex": "56ec99b7-5962-4037-b99b-522e2b02882e", "title": "Distribution of average response time by URL [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -627,11 +545,6 @@ "id": "logs-*", "name": "indexpattern-datasource-layer-f4afc69c-a9d0-4b77-be15-d391fcbfe495", "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "2e2072ab-084c-42d9-8d7e-c9171319f95a", - "type": "index-pattern" } ], "state": { @@ -720,29 +633,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "2e2072ab-084c-42d9-8d7e-c9171319f95a", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -785,8 +676,7 @@ }, "panelIndex": "2b880159-9649-4c31-a5c0-a1d93fcdfad3", "title": "Distribution of access events by OS name and version [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -800,12 +690,7 @@ }, { "id": "logs-*", - "name": "4b8a9e86-71d4-4b03-9049-bf28ec63ac90", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "8d346bac-67c0-4aed-ad35-3a5693fc2836", + "name": "5cadfb38-6e24-4b34-8946-c384933cfd78", "type": "index-pattern" } ], @@ -873,27 +758,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "4b8a9e86-71d4-4b03-9049-bf28ec63ac90", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -902,7 +766,7 @@ "alias": null, "disabled": false, "field": "http.response.status_code", - "index": "8d346bac-67c0-4aed-ad35-3a5693fc2836", + "index": "5cadfb38-6e24-4b34-8946-c384933cfd78", "key": "http.response.status_code", "negate": false, "params": { @@ -967,8 +831,7 @@ }, "panelIndex": "911f0638-46a9-4967-b588-a05fddc3ed62", "title": "Distribution by HTTP Client(4xx) and Server(5xx) error status code [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -978,11 +841,6 @@ "id": "logs-*", "name": "indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", - "type": "index-pattern" } ], "state": { @@ -1048,29 +906,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -1113,8 +949,7 @@ }, "panelIndex": "ddb0844d-afd9-45d7-af40-d2153f020847", "title": "Distribution by HTTP status code [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -1235,37 +1070,84 @@ }, "panelIndex": "3cccb19d-989d-4942-b1c6-5b122c0e0f2b", "title": "Distribution of access events by connection status [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": false + "attributes": { + "columns": [ + "source.ip", + "url.original", + "http.response.status_code" + ], + "grid": { + "columns": { + "http.response.status_code": { + "width": 183 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"data_stream.dataset\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"apache_tomcat.access\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"apache_tomcat.access\"}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"http.response.status_code\",\"key\":\"http.response.status_code\",\"negate\":false,\"params\":{\"gte\":\"400\",\"lt\":\"599\"},\"type\":\"range\",\"value\":{\"gte\":\"400\",\"lt\":\"599\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"range\":{\"http.response.status_code\":{\"gte\":\"400\",\"lt\":\"599\"}}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + } + ], + "refreshInterval": { + "pause": true, + "value": 60000 + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRange": { + "from": "now-1y/d", + "to": "now" + }, + "timeRestore": false, + "usesAdHocDataView": false + }, + "enhancements": {} }, "gridData": { "h": 15, - "i": "5e9ce033-01e7-4c67-b228-becf11b14785", + "i": "43acabc9-d503-4215-8115-9b32976409ae", "w": 24, "x": 24, "y": 45 }, - "panelIndex": "5e9ce033-01e7-4c67-b228-becf11b14785", - "panelRefName": "panel_5e9ce033-01e7-4c67-b228-becf11b14785", - "type": "search", - "version": "8.7.0" + "panelIndex": "43acabc9-d503-4215-8115-9b32976409ae", + "title": "Client and Server HTTP error details [Logs Apache Tomcat]", + "type": "search" } ], "timeRestore": false, "title": "[Logs Apache Tomcat] Access", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T12:48:07.116Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:17:00.658Z", "id": "apache_tomcat-44a8e0d0-b8f5-11ed-ac9b-cb6bcd97d223", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -1279,12 +1161,7 @@ }, { "id": "logs-*", - "name": "af3cd65d-02e9-477c-8b3b-45f4b717a982:167c0497-503a-417c-a30c-768525e8b8dc", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "af3cd65d-02e9-477c-8b3b-45f4b717a982:8c6e9f3c-a1db-4cf0-8b30-1d860be11d98", + "name": "af3cd65d-02e9-477c-8b3b-45f4b717a982:9e014f3c-d19f-4e8c-9992-0053e2cff960", "type": "index-pattern" }, { @@ -1294,12 +1171,7 @@ }, { "id": "logs-*", - "name": "30187e6e-f500-4abd-b7c7-ebc64d84e2d9:0a1fad48-e8d5-4a9b-b8bb-fc7067521d7a", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "30187e6e-f500-4abd-b7c7-ebc64d84e2d9:758d6656-914a-4304-bbe7-f85474ef30b9", + "name": "30187e6e-f500-4abd-b7c7-ebc64d84e2d9:5d4ff327-4d18-4187-8e53-d6216c07701f", "type": "index-pattern" }, { @@ -1309,12 +1181,7 @@ }, { "id": "logs-*", - "name": "56ec99b7-5962-4037-b99b-522e2b02882e:54abd3e5-f8e0-40b6-b458-c1a6906bf3f5", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "56ec99b7-5962-4037-b99b-522e2b02882e:72bc9598-8105-4c02-b17a-8d8e8acae300", + "name": "56ec99b7-5962-4037-b99b-522e2b02882e:514f5bf9-1cf9-4864-8398-945d0168d126", "type": "index-pattern" }, { @@ -1324,44 +1191,40 @@ }, { "id": "logs-*", - "name": "2b880159-9649-4c31-a5c0-a1d93fcdfad3:2e2072ab-084c-42d9-8d7e-c9171319f95a", + "name": "911f0638-46a9-4967-b588-a05fddc3ed62:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", "type": "index-pattern" }, { "id": "logs-*", - "name": "911f0638-46a9-4967-b588-a05fddc3ed62:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", + "name": "911f0638-46a9-4967-b588-a05fddc3ed62:5cadfb38-6e24-4b34-8946-c384933cfd78", "type": "index-pattern" }, { "id": "logs-*", - "name": "911f0638-46a9-4967-b588-a05fddc3ed62:4b8a9e86-71d4-4b03-9049-bf28ec63ac90", + "name": "ddb0844d-afd9-45d7-af40-d2153f020847:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", "type": "index-pattern" }, { "id": "logs-*", - "name": "911f0638-46a9-4967-b588-a05fddc3ed62:8d346bac-67c0-4aed-ad35-3a5693fc2836", + "name": "3cccb19d-989d-4942-b1c6-5b122c0e0f2b:indexpattern-datasource-layer-1dd41a44-76bb-4cc0-adca-9acc7307125b", "type": "index-pattern" }, { "id": "logs-*", - "name": "ddb0844d-afd9-45d7-af40-d2153f020847:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", + "name": "43acabc9-d503-4215-8115-9b32976409ae:kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" }, { "id": "logs-*", - "name": "ddb0844d-afd9-45d7-af40-d2153f020847:b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", + "name": "43acabc9-d503-4215-8115-9b32976409ae:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", "type": "index-pattern" }, { "id": "logs-*", - "name": "3cccb19d-989d-4942-b1c6-5b122c0e0f2b:indexpattern-datasource-layer-1dd41a44-76bb-4cc0-adca-9acc7307125b", + "name": "43acabc9-d503-4215-8115-9b32976409ae:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", "type": "index-pattern" - }, - { - "id": "apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f", - "name": "5e9ce033-01e7-4c67-b228-becf11b14785:panel_5e9ce033-01e7-4c67-b228-becf11b14785", - "type": "search" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-5b24a9c0-0e86-11ee-8c11-879004e1a267.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-5b24a9c0-0e86-11ee-8c11-879004e1a267.json index 9bb4ee02c9cf..866adc2a1153 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-5b24a9c0-0e86-11ee-8c11-879004e1a267.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-5b24a9c0-0e86-11ee-8c11-879004e1a267.json @@ -17,9 +17,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.thread_pool" @@ -28,7 +28,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" + "data_stream.dataset": "apache_tomcat.thread_pool" } } } @@ -56,11 +56,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-05b7c993-53aa-433b-9754-7c1d297dbbad", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "37c53ea7-8de0-4acb-955f-38c67bd51b0a", - "type": "index-pattern" } ], "state": { @@ -99,30 +94,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "37c53ea7-8de0-4acb-955f-38c67bd51b0a", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -153,8 +125,7 @@ }, "panelIndex": "f9c94977-dd52-43b4-922f-4341aacacf07", "title": "Total threads [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -165,11 +136,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-a6c3093d-5a17-4f06-831e-4bc8428628cf", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "5b583af7-2a44-43ac-b787-9d6fc93f6374", - "type": "index-pattern" } ], "state": { @@ -290,30 +256,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "5b583af7-2a44-43ac-b787-9d6fc93f6374", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -366,12 +309,11 @@ "i": "29239466-a1a0-456b-a1f8-5209e6c26339", "w": 39, "x": 9, - "y": 4 + "y": 0 }, "panelIndex": "29239466-a1a0-456b-a1f8-5209e6c26339", "title": "Threads count by state over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -387,11 +329,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-e1e0cfc0-ff9f-4f4c-924a-a4d5ebc4d2ee", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "2a8c013c-a759-4b11-81f2-65a7797491c7", - "type": "index-pattern" } ], "state": { @@ -484,30 +421,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "2a8c013c-a759-4b11-81f2-65a7797491c7", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -590,12 +504,11 @@ "i": "a4b1a059-57c5-469a-9c83-936263c4c73c", "w": 48, "x": 0, - "y": 11 + "y": 10 }, "panelIndex": "a4b1a059-57c5-469a-9c83-936263c4c73c", "title": "Number of connections over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -605,11 +518,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-76459985-8ced-4307-8994-b36fcde849cc", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d2a87cd7-ddfb-45b0-81cd-64a63f6b2290", - "type": "index-pattern" } ], "state": { @@ -668,29 +576,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "d2a87cd7-ddfb-45b0-81cd-64a63f6b2290", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -750,12 +636,11 @@ "i": "31540e97-068b-4767-b7bd-373d35f8c6fe", "w": 48, "x": 0, - "y": 22 + "y": 21 }, "panelIndex": "31540e97-068b-4767-b7bd-373d35f8c6fe", "title": "Allocated bytes in current threads over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -766,11 +651,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-b6e6d14b-5440-4a1c-882f-a698d66eacfb", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "9bb893c7-c116-49ed-99b8-2e35efd24bf3", - "type": "index-pattern" } ], "state": { @@ -823,29 +703,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "9bb893c7-c116-49ed-99b8-2e35efd24bf3", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -888,24 +746,21 @@ "i": "5756b1ad-a32f-4248-8337-9cce4fb74b3e", "w": 48, "x": 0, - "y": 33 + "y": 32 }, "panelIndex": "5756b1ad-a32f-4248-8337-9cce4fb74b3e", "title": "Processing threads termination time over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Thread Pool", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-19T08:01:33.946Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T08:51:28.183Z", "id": "apache_tomcat-5b24a9c0-0e86-11ee-8c11-879004e1a267", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -917,21 +772,11 @@ "name": "f9c94977-dd52-43b4-922f-4341aacacf07:indexpattern-datasource-layer-05b7c993-53aa-433b-9754-7c1d297dbbad", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "f9c94977-dd52-43b4-922f-4341aacacf07:37c53ea7-8de0-4acb-955f-38c67bd51b0a", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "29239466-a1a0-456b-a1f8-5209e6c26339:indexpattern-datasource-layer-a6c3093d-5a17-4f06-831e-4bc8428628cf", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "29239466-a1a0-456b-a1f8-5209e6c26339:5b583af7-2a44-43ac-b787-9d6fc93f6374", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "a4b1a059-57c5-469a-9c83-936263c4c73c:indexpattern-datasource-layer-1f96fdb7-93b8-4ced-9765-f891869c6b47", @@ -942,31 +787,16 @@ "name": "a4b1a059-57c5-469a-9c83-936263c4c73c:indexpattern-datasource-layer-e1e0cfc0-ff9f-4f4c-924a-a4d5ebc4d2ee", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "a4b1a059-57c5-469a-9c83-936263c4c73c:2a8c013c-a759-4b11-81f2-65a7797491c7", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "31540e97-068b-4767-b7bd-373d35f8c6fe:indexpattern-datasource-layer-76459985-8ced-4307-8994-b36fcde849cc", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "31540e97-068b-4767-b7bd-373d35f8c6fe:d2a87cd7-ddfb-45b0-81cd-64a63f6b2290", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "5756b1ad-a32f-4248-8337-9cce4fb74b3e:indexpattern-datasource-layer-b6e6d14b-5440-4a1c-882f-a698d66eacfb", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "5756b1ad-a32f-4248-8337-9cce4fb74b3e:9bb893c7-c116-49ed-99b8-2e35efd24bf3", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "controlGroup_77e2e883-4872-4992-80ef-ad4bce414173:optionsListDataView", @@ -978,5 +808,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8.json index 71bf9e6dd495..3f5a884f0eb4 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8.json @@ -17,18 +17,37 @@ "meta": { "alias": null, "disabled": false, - "field": "event.module", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.module", + "key": "data_stream.dataset", "negate": false, - "params": { - "query": "apache_tomcat" - }, - "type": "phrase" + "params": [ + "apache_tomcat.access", + "apache_tomcat.catalina", + "apache_tomcat.localhost" + ], + "type": "phrases" }, "query": { - "match_phrase": { - "event.module": "apache_tomcat" + "bool": { + "minimum_should_match": 1, + "should": [ + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.access" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.catalina" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.localhost" + } + } + ] } } } @@ -55,11 +74,6 @@ "id": "logs-*", "name": "indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", - "type": "index-pattern" } ], "state": { @@ -125,29 +139,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -190,8 +182,7 @@ }, "panelIndex": "b089289a-38be-4f6f-8519-ef9b20a77409", "title": "Distribution by HTTP status code [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -205,12 +196,7 @@ }, { "id": "logs-*", - "name": "25ce66fb-534d-42a3-9baf-e3c7768ee2d6", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "adb3c9a7-d289-4c05-9c2b-0791a5c482ff", + "name": "27726488-c222-4017-9646-dc2a3a3438e8", "type": "index-pattern" } ], @@ -278,27 +264,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "25ce66fb-534d-42a3-9baf-e3c7768ee2d6", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -307,7 +272,7 @@ "alias": null, "disabled": false, "field": "http.response.status_code", - "index": "adb3c9a7-d289-4c05-9c2b-0791a5c482ff", + "index": "27726488-c222-4017-9646-dc2a3a3438e8", "key": "http.response.status_code", "negate": false, "params": { @@ -372,8 +337,7 @@ }, "panelIndex": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d", "title": "Distribution by HTTP Client(4xx) and Server(5xx) error status code [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -386,12 +350,7 @@ }, { "id": "logs-*", - "name": "44d71f68-2675-4ed4-adb5-9f2bdce23a3a", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "cfb45038-17c1-40f9-b31e-916d1eefc5c6", + "name": "9ac46d7b-7d38-4e7c-b723-2ace8d3a1c52", "type": "index-pattern" } ], @@ -482,28 +441,6 @@ } }, "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "44d71f68-2675-4ed4-adb5-9f2bdce23a3a", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, { "$state": { "store": "appState" @@ -512,7 +449,7 @@ "alias": null, "disabled": false, "field": "http.response.status_code", - "index": "cfb45038-17c1-40f9-b31e-916d1eefc5c6", + "index": "9ac46d7b-7d38-4e7c-b723-2ace8d3a1c52", "key": "http.response.status_code", "negate": false, "params": { @@ -586,56 +523,141 @@ }, "panelIndex": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7", "title": "Top error causing URLs with hosts [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": false + "attributes": { + "columns": [ + "apache_tomcat.catalina.subsystem", + "log.level", + "message" + ], + "grid": { + "columns": { + "apache_tomcat.catalina.subsystem": { + "width": 240 + }, + "log.level": { + "width": 78 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"data_stream.dataset\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"apache_tomcat.catalina\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"apache_tomcat.catalina\"}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"log.level\",\"key\":\"log.level\",\"negate\":true,\"params\":{\"query\":\"info\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"log.level\":\"info\"}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + } + ], + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRestore": false, + "usesAdHocDataView": false + }, + "enhancements": {} }, "gridData": { "h": 15, - "i": "f02e494c-1b62-407e-a402-7799e9fab580", + "i": "74487d6a-9478-485f-b6da-91f9f5b974d0", "w": 48, "x": 0, "y": 30 }, - "panelIndex": "f02e494c-1b62-407e-a402-7799e9fab580", - "panelRefName": "panel_f02e494c-1b62-407e-a402-7799e9fab580", - "title": "Catalina Logs overview [Logs Apache Tomcat]", - "type": "search", - "version": "8.7.0" + "panelIndex": "74487d6a-9478-485f-b6da-91f9f5b974d0", + "title": "Catalina logs overview [Logs Apache Tomcat]", + "type": "search" }, { "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": false + "attributes": { + "columns": [ + "apache_tomcat.localhost.subsystem", + "log.level", + "message" + ], + "grid": { + "columns": { + "apache_tomcat.localhost.subsystem": { + "width": 248 + }, + "log.level": { + "width": 75 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"data_stream.dataset\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"apache_tomcat.localhost\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"apache_tomcat.localhost\"}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"log.level\",\"key\":\"log.level\",\"negate\":true,\"params\":{\"query\":\"info\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"log.level\":\"info\"}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + } + ], + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRestore": false, + "usesAdHocDataView": false + }, + "enhancements": {} }, "gridData": { "h": 15, - "i": "9940557b-4932-4f76-8aec-029ddac34539", + "i": "1cb8c14e-fcc5-428d-8d3c-95fcd031e0b8", "w": 48, "x": 0, "y": 45 }, - "panelIndex": "9940557b-4932-4f76-8aec-029ddac34539", - "panelRefName": "panel_9940557b-4932-4f76-8aec-029ddac34539", - "title": "Localhost Logs overview [Logs Apache Tomcat]", - "type": "search", - "version": "8.7.0" + "panelIndex": "1cb8c14e-fcc5-428d-8d3c-95fcd031e0b8", + "title": "Localhost logs overview [Logs Apache Tomcat]", + "type": "search" } ], "timeRestore": false, "title": "[Logs Apache Tomcat] Overview", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T12:48:07.116Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:02:01.512Z", "id": "apache_tomcat-8fd54a20-1f0d-11ee-9d6b-bb41d08322c8", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -649,48 +671,53 @@ }, { "id": "logs-*", - "name": "b089289a-38be-4f6f-8519-ef9b20a77409:b6532743-79d3-4ab0-bdfa-fff8aa69c7a9", + "name": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", "type": "index-pattern" }, { "id": "logs-*", - "name": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d:indexpattern-datasource-layer-55ba9c87-2de6-468b-ae00-ab24cdb6c2d7", + "name": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d:27726488-c222-4017-9646-dc2a3a3438e8", "type": "index-pattern" }, { "id": "logs-*", - "name": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d:25ce66fb-534d-42a3-9baf-e3c7768ee2d6", + "name": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7:indexpattern-datasource-layer-d30a1b56-5918-4732-850a-381fab2c59fb", "type": "index-pattern" }, { "id": "logs-*", - "name": "2f7de9ea-b38c-4a20-9f50-2c50f76f450d:adb3c9a7-d289-4c05-9c2b-0791a5c482ff", + "name": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7:9ac46d7b-7d38-4e7c-b723-2ace8d3a1c52", "type": "index-pattern" }, { "id": "logs-*", - "name": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7:indexpattern-datasource-layer-d30a1b56-5918-4732-850a-381fab2c59fb", + "name": "74487d6a-9478-485f-b6da-91f9f5b974d0:kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" }, { "id": "logs-*", - "name": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7:44d71f68-2675-4ed4-adb5-9f2bdce23a3a", + "name": "74487d6a-9478-485f-b6da-91f9f5b974d0:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", "type": "index-pattern" }, { "id": "logs-*", - "name": "e87fc489-df1a-4f67-9d91-7b3383fcb8c7:cfb45038-17c1-40f9-b31e-916d1eefc5c6", + "name": "74487d6a-9478-485f-b6da-91f9f5b974d0:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", "type": "index-pattern" }, { - "id": "apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195", - "name": "f02e494c-1b62-407e-a402-7799e9fab580:panel_f02e494c-1b62-407e-a402-7799e9fab580", - "type": "search" + "id": "logs-*", + "name": "1cb8c14e-fcc5-428d-8d3c-95fcd031e0b8:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "1cb8c14e-fcc5-428d-8d3c-95fcd031e0b8:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" }, { - "id": "apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c", - "name": "9940557b-4932-4f76-8aec-029ddac34539:panel_9940557b-4932-4f76-8aec-029ddac34539", - "type": "search" + "id": "logs-*", + "name": "1cb8c14e-fcc5-428d-8d3c-95fcd031e0b8:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" }, { "id": "logs-*", @@ -698,5 +725,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195.json index 3e2812e74495..d88c450d4329 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195.json @@ -11,52 +11,33 @@ "meta": { "alias": null, "disabled": false, + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", "negate": false, "params": [ - { - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "logs-*", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.catalina" - }, - "type": "phrase" - }, - "query": { + "apache_tomcat.catalina", + "apache_tomcat.localhost" + ], + "type": "phrases" + }, + "query": { + "bool": { + "minimum_should_match": 1, + "should": [ + { "match_phrase": { - "event.dataset": "apache_tomcat.catalina" + "data_stream.dataset": "apache_tomcat.catalina" } - } - }, - { - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "logs-*", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.localhost" - }, - "type": "phrase" }, - "query": { + { "match_phrase": { - "event.dataset": "apache_tomcat.localhost" + "data_stream.dataset": "apache_tomcat.localhost" } } - } - ], - "relation": "OR", - "type": "combined" - }, - "query": {} + ] + } + } } ], "query": { @@ -81,11 +62,6 @@ "id": "logs-*", "name": "indexpattern-datasource-layer-e970fe93-30db-448b-b159-3d0afe1b7953", "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "be7a31fc-fdbf-4791-81bc-e7c6f7fd4e72", - "type": "index-pattern" } ], "state": { @@ -147,30 +123,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "be7a31fc-fdbf-4791-81bc-e7c6f7fd4e72", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.catalina" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.catalina" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -213,8 +166,7 @@ }, "panelIndex": "ce217a0a-1038-4867-b22b-c51765d12c99", "title": "Distribution of Catalina events by log level [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -225,11 +177,6 @@ "id": "logs-*", "name": "indexpattern-datasource-layer-996302ea-5ca4-458a-b92b-8b1c8e76adf6", "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "1fb283e4-af20-4f0b-b875-baaaacd84281", - "type": "index-pattern" } ], "state": { @@ -291,30 +238,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "1fb283e4-af20-4f0b-b875-baaaacd84281", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.localhost" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.localhost" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -357,56 +281,143 @@ }, "panelIndex": "e48f4633-1502-44e1-b093-2b9bc378d24c", "title": "Distribution of Localhost events by log level [Logs Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { + "attributes": { + "columns": [ + "apache_tomcat.catalina.subsystem", + "log.level", + "message" + ], + "grid": { + "columns": { + "apache_tomcat.catalina.subsystem": { + "width": 240 + }, + "log.level": { + "width": 78 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"data_stream.dataset\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"apache_tomcat.catalina\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"apache_tomcat.catalina\"}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"log.level\",\"key\":\"log.level\",\"negate\":true,\"params\":{\"query\":\"info\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"log.level\":\"info\"}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + } + ], + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRestore": false, + "usesAdHocDataView": false + }, "enhancements": {}, "hidePanelTitles": false }, "gridData": { "h": 14, - "i": "e9897b3c-32b2-4c12-9510-4e1685ecb611", + "i": "2b6abb8b-9434-489f-b900-ef03efa9fc8f", "w": 48, "x": 0, "y": 14 }, - "panelIndex": "e9897b3c-32b2-4c12-9510-4e1685ecb611", - "panelRefName": "panel_e9897b3c-32b2-4c12-9510-4e1685ecb611", + "panelIndex": "2b6abb8b-9434-489f-b900-ef03efa9fc8f", "title": "Catalina Logs overview [Logs Apache Tomcat]", - "type": "search", - "version": "8.7.0" + "type": "search" }, { "embeddableConfig": { + "attributes": { + "columns": [ + "apache_tomcat.localhost.subsystem", + "log.level", + "message" + ], + "grid": { + "columns": { + "apache_tomcat.localhost.subsystem": { + "width": 248 + }, + "log.level": { + "width": 75 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"data_stream.dataset\",\"key\":\"data_stream.dataset\",\"negate\":false,\"params\":{\"query\":\"apache_tomcat.localhost\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"data_stream.dataset\":\"apache_tomcat.localhost\"}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"alias\":null,\"disabled\":false,\"field\":\"log.level\",\"key\":\"log.level\",\"negate\":true,\"params\":{\"query\":\"info\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"log.level\":\"info\"}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + } + ], + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRestore": false, + "usesAdHocDataView": false + }, "enhancements": {}, "hidePanelTitles": false }, "gridData": { "h": 14, - "i": "8901474e-f646-4eb9-b734-667804d70207", + "i": "3f40d201-41dd-44ad-9f5d-9280b0e31dfd", "w": 48, "x": 0, "y": 28 }, - "panelIndex": "8901474e-f646-4eb9-b734-667804d70207", - "panelRefName": "panel_8901474e-f646-4eb9-b734-667804d70207", + "panelIndex": "3f40d201-41dd-44ad-9f5d-9280b0e31dfd", "title": "Localhost Logs overview [Logs Apache Tomcat]", - "type": "search", - "version": "8.7.0" + "type": "search" } ], "timeRestore": false, "title": "[Logs Apache Tomcat] Catalina and Localhost", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T10:47:18.401Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:02:35.037Z", "id": "apache_tomcat-9c66eb10-dd0c-11ed-9f4f-d97c9f37d195", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "logs-*", @@ -420,29 +431,40 @@ }, { "id": "logs-*", - "name": "ce217a0a-1038-4867-b22b-c51765d12c99:be7a31fc-fdbf-4791-81bc-e7c6f7fd4e72", + "name": "e48f4633-1502-44e1-b093-2b9bc378d24c:indexpattern-datasource-layer-996302ea-5ca4-458a-b92b-8b1c8e76adf6", "type": "index-pattern" }, { "id": "logs-*", - "name": "e48f4633-1502-44e1-b093-2b9bc378d24c:indexpattern-datasource-layer-996302ea-5ca4-458a-b92b-8b1c8e76adf6", + "name": "2b6abb8b-9434-489f-b900-ef03efa9fc8f:kibanaSavedObjectMeta.searchSourceJSON.index", "type": "index-pattern" }, { "id": "logs-*", - "name": "e48f4633-1502-44e1-b093-2b9bc378d24c:1fb283e4-af20-4f0b-b875-baaaacd84281", + "name": "2b6abb8b-9434-489f-b900-ef03efa9fc8f:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", "type": "index-pattern" }, { - "id": "apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195", - "name": "e9897b3c-32b2-4c12-9510-4e1685ecb611:panel_e9897b3c-32b2-4c12-9510-4e1685ecb611", - "type": "search" + "id": "logs-*", + "name": "2b6abb8b-9434-489f-b900-ef03efa9fc8f:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "3f40d201-41dd-44ad-9f5d-9280b0e31dfd:kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" }, { - "id": "apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c", - "name": "8901474e-f646-4eb9-b734-667804d70207:panel_8901474e-f646-4eb9-b734-667804d70207", - "type": "search" + "id": "logs-*", + "name": "3f40d201-41dd-44ad-9f5d-9280b0e31dfd:kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "3f40d201-41dd-44ad-9f5d-9280b0e31dfd:kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", + "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9f21d4e0-b837-11ed-8008-cf66df3fb6bf.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9f21d4e0-b837-11ed-8008-cf66df3fb6bf.json index e54937504969..3e0b5bfc3c1b 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9f21d4e0-b837-11ed-8008-cf66df3fb6bf.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-9f21d4e0-b837-11ed-8008-cf66df3fb6bf.json @@ -17,9 +17,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.cache" @@ -28,7 +28,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.cache" + "data_stream.dataset": "apache_tomcat.cache" } } } @@ -201,8 +201,7 @@ }, "panelIndex": "36ae155c-4005-4d73-b475-8988477e226d", "title": "Cache size over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -354,8 +353,7 @@ }, "panelIndex": "9f922f1f-c807-461d-894f-84236ab8cbd8", "title": "Total requests processed through cache over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -507,20 +505,17 @@ }, "panelIndex": "93820318-a84d-43c0-97a0-65731001cf06", "title": "Total requests over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Cache", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-05-05T07:24:12.119Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:03:38.064Z", "id": "apache_tomcat-9f21d4e0-b837-11ed-8008-cf66df3fb6bf", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -553,5 +548,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-af7759b0-0a75-11ee-a8d8-d15950a587f6.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-af7759b0-0a75-11ee-a8d8-d15950a587f6.json index dde26173ef34..0360ec660fa1 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-af7759b0-0a75-11ee-a8d8-d15950a587f6.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-af7759b0-0a75-11ee-a8d8-d15950a587f6.json @@ -17,9 +17,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.connection_pool" @@ -28,7 +28,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.connection_pool" + "data_stream.dataset": "apache_tomcat.connection_pool" } } } @@ -55,11 +55,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-e325a4cc-4f13-45e6-ad1d-ab520a86078f", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d754c647-0a3e-4949-b974-ae09a1bc847d", - "type": "index-pattern" } ], "state": { @@ -129,30 +124,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "d754c647-0a3e-4949-b974-ae09a1bc847d", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.connection_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.connection_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -220,8 +192,7 @@ }, "panelIndex": "8379c1c8-9392-4af4-a7f4-e625811a8f12", "title": "Connections over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -231,11 +202,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-bf37fdfd-568b-4d88-8698-f487013d0e7a", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "c82a919f-342a-40fb-b752-e7d04fed8ff7", - "type": "index-pattern" } ], "state": { @@ -274,30 +240,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "c82a919f-342a-40fb-b752-e7d04fed8ff7", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.connection_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.connection_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -327,8 +270,7 @@ }, "panelIndex": "f170f694-3b15-4d7f-8d02-93721b07841a", "title": "Active connections [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -338,11 +280,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-bf37fdfd-568b-4d88-8698-f487013d0e7a", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "18d6b810-b483-4c38-8003-439a9795566e", - "type": "index-pattern" } ], "state": { @@ -381,30 +318,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "18d6b810-b483-4c38-8003-439a9795566e", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.connection_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.connection_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -434,20 +348,17 @@ }, "panelIndex": "4ba1c352-1167-4214-a1e0-a8acb13e59aa", "title": "Idle connections [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Connection Pool", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-06-30T05:14:49.407Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:04:43.666Z", "id": "apache_tomcat-af7759b0-0a75-11ee-a8d8-d15950a587f6", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -459,31 +370,16 @@ "name": "8379c1c8-9392-4af4-a7f4-e625811a8f12:indexpattern-datasource-layer-e325a4cc-4f13-45e6-ad1d-ab520a86078f", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "8379c1c8-9392-4af4-a7f4-e625811a8f12:d754c647-0a3e-4949-b974-ae09a1bc847d", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "f170f694-3b15-4d7f-8d02-93721b07841a:indexpattern-datasource-layer-bf37fdfd-568b-4d88-8698-f487013d0e7a", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "f170f694-3b15-4d7f-8d02-93721b07841a:c82a919f-342a-40fb-b752-e7d04fed8ff7", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "4ba1c352-1167-4214-a1e0-a8acb13e59aa:indexpattern-datasource-layer-bf37fdfd-568b-4d88-8698-f487013d0e7a", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "4ba1c352-1167-4214-a1e0-a8acb13e59aa:18d6b810-b483-4c38-8003-439a9795566e", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "controlGroup_3503af0f-80d1-487e-8fa3-e470f20f9f8b:optionsListDataView", @@ -495,5 +391,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c2e71320-bccb-11ed-8065-19219c0d55ab.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c2e71320-bccb-11ed-8065-19219c0d55ab.json index 30ac4e11b58a..305e74c9ab49 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c2e71320-bccb-11ed-8065-19219c0d55ab.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c2e71320-bccb-11ed-8065-19219c0d55ab.json @@ -61,11 +61,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-7a97f25c-2c29-43be-a9d9-227e78aa4824", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "424f182e-1baf-4bc9-a7a6-74f1ca6881ef", - "type": "index-pattern" } ], "state": { @@ -154,29 +149,7 @@ } } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "424f182e-1baf-4bc9-a7a6-74f1ca6881ef", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -210,12 +183,12 @@ "y": 0 }, "panelIndex": "7249a3d9-803b-4ddd-952f-0021fcfe7f58", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { "attributes": { + "description": "When the value for the maximum memory size (in bytes) is set to -1 for heap memory configurations, it indicates that the user has not specified a predefined size for the memory allocation", "references": [ { "id": "metrics-*", @@ -226,11 +199,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-ce5c86d1-5778-457d-a66f-8d2be35fdd09", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "1be63b2a-edae-4674-a21f-4cc44d7ef2a4", - "type": "index-pattern" } ], "state": { @@ -375,29 +343,7 @@ } } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "1be63b2a-edae-4674-a21f-4cc44d7ef2a4", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -483,8 +429,7 @@ }, "panelIndex": "ff461eaa-d936-4fbd-af56-72a528fdf515", "title": "Heap memory over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -500,11 +445,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-b9cb687d-7e05-469a-bc47-e9b07685a0d8", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "8708baa5-febb-4d77-9857-ba124b9c91f8", - "type": "index-pattern" } ], "state": { @@ -593,29 +533,7 @@ } } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "8708baa5-febb-4d77-9857-ba124b9c91f8", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -649,12 +567,12 @@ }, "panelIndex": "3b18802f-5ac5-48f1-8ba3-c46d37f86d47", "title": "", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { "attributes": { + "description": "When the value for the maximum memory size (in bytes) is set to -1 for non-heap memory configurations, it indicates that the user has not specified a predefined size for the memory allocation", "references": [ { "id": "metrics-*", @@ -665,11 +583,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-ce5c86d1-5778-457d-a66f-8d2be35fdd09", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "4fba9f55-18c8-458c-9ee5-83936d0402ac", - "type": "index-pattern" } ], "state": { @@ -814,29 +727,7 @@ } } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "4fba9f55-18c8-458c-9ee5-83936d0402ac", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -922,8 +813,7 @@ }, "panelIndex": "1c7a5509-3841-40a3-9b00-fd11ee6db933", "title": "Non-heap memory over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -939,11 +829,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-9664f1c8-ab27-4919-9805-e22529ee1f2c", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "f7dd40ff-6ab5-4c72-9c14-3d9a3a1459c0", - "type": "index-pattern" } ], "state": { @@ -1030,29 +915,7 @@ } } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "f7dd40ff-6ab5-4c72-9c14-3d9a3a1459c0", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -1141,20 +1004,17 @@ }, "panelIndex": "af80afbb-07f6-4f69-b475-2e5f19cfa60d", "title": "Garbage collection over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Memory", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-18T10:55:22.442Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:05:56.186Z", "id": "apache_tomcat-c2e71320-bccb-11ed-8065-19219c0d55ab", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -1171,11 +1031,6 @@ "name": "7249a3d9-803b-4ddd-952f-0021fcfe7f58:indexpattern-datasource-layer-7a97f25c-2c29-43be-a9d9-227e78aa4824", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "7249a3d9-803b-4ddd-952f-0021fcfe7f58:424f182e-1baf-4bc9-a7a6-74f1ca6881ef", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "ff461eaa-d936-4fbd-af56-72a528fdf515:indexpattern-datasource-layer-832a1cf4-a2fb-4da0-a1a9-e2e4ad75cf0b", @@ -1186,11 +1041,6 @@ "name": "ff461eaa-d936-4fbd-af56-72a528fdf515:indexpattern-datasource-layer-ce5c86d1-5778-457d-a66f-8d2be35fdd09", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "ff461eaa-d936-4fbd-af56-72a528fdf515:1be63b2a-edae-4674-a21f-4cc44d7ef2a4", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "3b18802f-5ac5-48f1-8ba3-c46d37f86d47:indexpattern-datasource-layer-603b89be-e03d-4ed5-83b6-4ca7c19f41aa", @@ -1201,11 +1051,6 @@ "name": "3b18802f-5ac5-48f1-8ba3-c46d37f86d47:indexpattern-datasource-layer-b9cb687d-7e05-469a-bc47-e9b07685a0d8", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "3b18802f-5ac5-48f1-8ba3-c46d37f86d47:8708baa5-febb-4d77-9857-ba124b9c91f8", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "1c7a5509-3841-40a3-9b00-fd11ee6db933:indexpattern-datasource-layer-832a1cf4-a2fb-4da0-a1a9-e2e4ad75cf0b", @@ -1216,11 +1061,6 @@ "name": "1c7a5509-3841-40a3-9b00-fd11ee6db933:indexpattern-datasource-layer-ce5c86d1-5778-457d-a66f-8d2be35fdd09", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "1c7a5509-3841-40a3-9b00-fd11ee6db933:4fba9f55-18c8-458c-9ee5-83936d0402ac", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "af80afbb-07f6-4f69-b475-2e5f19cfa60d:indexpattern-datasource-layer-88daef46-ca28-45c1-b7cc-8f7ccff4842d", @@ -1231,16 +1071,12 @@ "name": "af80afbb-07f6-4f69-b475-2e5f19cfa60d:indexpattern-datasource-layer-9664f1c8-ab27-4919-9805-e22529ee1f2c", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "af80afbb-07f6-4f69-b475-2e5f19cfa60d:f7dd40ff-6ab5-4c72-9c14-3d9a3a1459c0", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "controlGroup_40090461-b167-4b82-8ae3-e1326133b845:optionsListDataView", "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c8ec7280-1a57-11ee-8c1a-099fb2bcb823.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c8ec7280-1a57-11ee-8c1a-099fb2bcb823.json index ab28ff8c7f7b..657ece9f8ba5 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c8ec7280-1a57-11ee-8c1a-099fb2bcb823.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c8ec7280-1a57-11ee-8c1a-099fb2bcb823.json @@ -17,18 +17,55 @@ "meta": { "alias": null, "disabled": false, - "field": "event.module", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.module", + "key": "data_stream.dataset", "negate": false, - "params": { - "query": "apache_tomcat" - }, - "type": "phrase" + "params": [ + "apache_tomcat.session", + "apache_tomcat.cache", + "apache_tomcat.connection_pool", + "apache_tomcat.memory", + "apache_tomcat.request", + "apache_tomcat.thread_pool" + ], + "type": "phrases" }, "query": { - "match_phrase": { - "event.module": "apache_tomcat" + "bool": { + "minimum_should_match": 1, + "should": [ + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.session" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.cache" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.connection_pool" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.memory" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.request" + } + }, + { + "match_phrase": { + "data_stream.dataset": "apache_tomcat.thread_pool" + } + } + ] } } } @@ -51,11 +88,6 @@ "embeddableConfig": { "attributes": { "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-99998251-2f00-4a88-bf98-07e7d8e3ac81", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "indexpattern-datasource-layer-207a8774-23b1-43df-831f-56cb6d093dc0", @@ -63,7 +95,7 @@ }, { "id": "metrics-*", - "name": "f3e87a81-2a03-49e7-b465-ae2e5540cfd7", + "name": "indexpattern-datasource-layer-99998251-2f00-4a88-bf98-07e7d8e3ac81", "type": "index-pattern" } ], @@ -137,30 +169,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "f3e87a81-2a03-49e7-b465-ae2e5540cfd7", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.session" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.session" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -193,8 +202,7 @@ }, "panelIndex": "06854553-1f37-41b0-972c-380acf5cb39f", "title": "Number of Applications [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -204,11 +212,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-e6ec4f57-529c-490f-86c3-5ae4140dc908", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "791b20c2-6ace-42e3-a393-51b4f378bd2a", - "type": "index-pattern" } ], "state": { @@ -288,30 +291,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "791b20c2-6ace-42e3-a393-51b4f378bd2a", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.cache" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.cache" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -380,8 +360,7 @@ }, "panelIndex": "b8716edd-6941-4cba-9f1a-b3a08c7fc647", "title": "Top 5 requests per application over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -397,11 +376,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-e4ff0e97-e884-4a2e-859a-f16a579acd75", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "e03e36e7-2153-4e6b-ad73-0b3f58c89969", - "type": "index-pattern" } ], "state": { @@ -604,30 +578,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "e03e36e7-2153-4e6b-ad73-0b3f58c89969", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.request" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.request" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -660,8 +611,7 @@ }, "panelIndex": "9e8b29e7-3679-4e44-a585-f4cf7f17044f", "title": "Average request processing time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -671,11 +621,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-7c4da97e-7d47-4847-87ae-0fbdcc983343", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "38cc0910-5849-444d-ba26-a9dab625f549", - "type": "index-pattern" } ], "state": { @@ -745,30 +690,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "38cc0910-5849-444d-ba26-a9dab625f549", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.connection_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.connection_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -836,8 +758,7 @@ }, "panelIndex": "ba5d9b2e-689c-4472-aa89-bc355a5cc780", "title": "Connections over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -847,11 +768,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-b09c20e6-d7d3-4fe2-8490-2c6feedb02c9", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "44b26cb6-1625-4950-9cd5-a079004b991b", - "type": "index-pattern" } ], "state": { @@ -933,30 +849,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "44b26cb6-1625-4950-9cd5-a079004b991b", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.memory" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.memory" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -1009,8 +902,7 @@ }, "panelIndex": "38423062-d16c-4911-a9e9-dfdfba9d19b5", "title": "Memory usage over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -1020,11 +912,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-365e11cb-9eed-4fd4-a335-2b8ee3f454c5", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "c9861b14-6ccb-4a1a-b38f-4d7c01febfc8", - "type": "index-pattern" } ], "state": { @@ -1106,30 +993,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "c9861b14-6ccb-4a1a-b38f-4d7c01febfc8", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.request" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.request" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -1182,8 +1046,7 @@ }, "panelIndex": "5862d24f-ecf5-41fd-93b4-3d214e834361", "title": "Throughput over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" }, { "embeddableConfig": { @@ -1194,11 +1057,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-bdd64b4a-4147-4624-8e56-78dbbddd5986", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "1a9a387d-da2b-46c0-9d67-d84642c4450d", - "type": "index-pattern" } ], "state": { @@ -1319,30 +1177,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "1a9a387d-da2b-46c0-9d67-d84642c4450d", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.thread_pool" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.thread_pool" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -1395,35 +1230,27 @@ "i": "8d71c0de-16f1-4231-97ff-0bf7e1af5db0", "w": 24, "x": 0, - "y": 34 + "y": 28 }, "panelIndex": "8d71c0de-16f1-4231-97ff-0bf7e1af5db0", "title": "Thread distribution by server over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.8.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Overview ", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-19T08:01:33.946Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:09:11.916Z", "id": "apache_tomcat-c8ec7280-1a57-11ee-8c1a-099fb2bcb823", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "06854553-1f37-41b0-972c-380acf5cb39f:indexpattern-datasource-layer-99998251-2f00-4a88-bf98-07e7d8e3ac81", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "06854553-1f37-41b0-972c-380acf5cb39f:indexpattern-datasource-layer-207a8774-23b1-43df-831f-56cb6d093dc0", @@ -1431,7 +1258,7 @@ }, { "id": "metrics-*", - "name": "06854553-1f37-41b0-972c-380acf5cb39f:f3e87a81-2a03-49e7-b465-ae2e5540cfd7", + "name": "06854553-1f37-41b0-972c-380acf5cb39f:indexpattern-datasource-layer-99998251-2f00-4a88-bf98-07e7d8e3ac81", "type": "index-pattern" }, { @@ -1439,11 +1266,6 @@ "name": "b8716edd-6941-4cba-9f1a-b3a08c7fc647:indexpattern-datasource-layer-e6ec4f57-529c-490f-86c3-5ae4140dc908", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "b8716edd-6941-4cba-9f1a-b3a08c7fc647:791b20c2-6ace-42e3-a393-51b4f378bd2a", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "9e8b29e7-3679-4e44-a585-f4cf7f17044f:indexpattern-datasource-layer-041c5a9d-e816-4c77-ae9f-e31b81d15a8a", @@ -1454,56 +1276,32 @@ "name": "9e8b29e7-3679-4e44-a585-f4cf7f17044f:indexpattern-datasource-layer-e4ff0e97-e884-4a2e-859a-f16a579acd75", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "9e8b29e7-3679-4e44-a585-f4cf7f17044f:e03e36e7-2153-4e6b-ad73-0b3f58c89969", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "ba5d9b2e-689c-4472-aa89-bc355a5cc780:indexpattern-datasource-layer-7c4da97e-7d47-4847-87ae-0fbdcc983343", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "ba5d9b2e-689c-4472-aa89-bc355a5cc780:38cc0910-5849-444d-ba26-a9dab625f549", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "38423062-d16c-4911-a9e9-dfdfba9d19b5:indexpattern-datasource-layer-b09c20e6-d7d3-4fe2-8490-2c6feedb02c9", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "38423062-d16c-4911-a9e9-dfdfba9d19b5:44b26cb6-1625-4950-9cd5-a079004b991b", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "5862d24f-ecf5-41fd-93b4-3d214e834361:indexpattern-datasource-layer-365e11cb-9eed-4fd4-a335-2b8ee3f454c5", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "5862d24f-ecf5-41fd-93b4-3d214e834361:c9861b14-6ccb-4a1a-b38f-4d7c01febfc8", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "8d71c0de-16f1-4231-97ff-0bf7e1af5db0:indexpattern-datasource-layer-bdd64b4a-4147-4624-8e56-78dbbddd5986", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "8d71c0de-16f1-4231-97ff-0bf7e1af5db0:1a9a387d-da2b-46c0-9d67-d84642c4450d", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "controlGroup_389cb789-1fc8-43c8-b276-08d02bae4cee:optionsListDataView", "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c97374d0-bb78-11ed-812e-b1288b469a47.json b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c97374d0-bb78-11ed-812e-b1288b469a47.json index 378b5d3c072e..dd74b4f746a8 100644 --- a/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c97374d0-bb78-11ed-812e-b1288b469a47.json +++ b/packages/apache_tomcat/kibana/dashboard/apache_tomcat-c97374d0-bb78-11ed-812e-b1288b469a47.json @@ -17,9 +17,9 @@ "meta": { "alias": null, "disabled": false, - "field": "event.dataset", + "field": "data_stream.dataset", "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", + "key": "data_stream.dataset", "negate": false, "params": { "query": "apache_tomcat.request" @@ -28,7 +28,7 @@ }, "query": { "match_phrase": { - "event.dataset": "apache_tomcat.request" + "data_stream.dataset": "apache_tomcat.request" } } } @@ -131,8 +131,7 @@ }, "panelIndex": "df3b5039-6960-47fe-a408-8c59b82d0a83", "title": "Maximum time to process a request [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -142,11 +141,6 @@ "id": "metrics-*", "name": "indexpattern-datasource-layer-528b2da5-ff7d-4fb7-a62c-e3d64b70df91", "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "00da956e-dc3c-45f9-ab7f-2a3e0e1bb1e0", - "type": "index-pattern" } ], "state": { @@ -246,30 +240,7 @@ "layers": {} } }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "index": "00da956e-dc3c-45f9-ab7f-2a3e0e1bb1e0", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.request" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.request" - } - } - } - ], + "filters": [], "internalReferences": [], "query": { "language": "kuery", @@ -315,8 +286,7 @@ }, "panelIndex": "77e484b6-3cf9-4226-a80f-c5100ac0a0af", "title": "Distribution of NIO connectors by total process time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -402,8 +372,7 @@ }, "panelIndex": "df3f56d0-2f45-44e0-b343-2404e987527b", "title": "Total time to process the requests [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -546,8 +515,7 @@ }, "panelIndex": "b43d4e14-e451-4025-9d4e-4cf781f94fba", "title": "Data transferred over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -654,8 +622,7 @@ }, "panelIndex": "5b8374fa-485f-469f-8118-a8d8abc20bfd", "title": "Requests processed over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" }, { "embeddableConfig": { @@ -768,20 +735,17 @@ }, "panelIndex": "53358c42-fbc0-4329-8a1f-7330324cf827", "title": "Number of errors over time [Metrics Apache Tomcat]", - "type": "lens", - "version": "8.7.0" + "type": "lens" } ], "timeRestore": false, "title": "[Metrics Apache Tomcat] Request", "version": 1 }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-05-05T07:24:00.465Z", + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-13T09:10:03.496Z", "id": "apache_tomcat-c97374d0-bb78-11ed-812e-b1288b469a47", - "migrationVersion": { - "dashboard": "8.7.0" - }, + "managed": false, "references": [ { "id": "metrics-*", @@ -798,11 +762,6 @@ "name": "77e484b6-3cf9-4226-a80f-c5100ac0a0af:indexpattern-datasource-layer-528b2da5-ff7d-4fb7-a62c-e3d64b70df91", "type": "index-pattern" }, - { - "id": "metrics-*", - "name": "77e484b6-3cf9-4226-a80f-c5100ac0a0af:00da956e-dc3c-45f9-ab7f-2a3e0e1bb1e0", - "type": "index-pattern" - }, { "id": "metrics-*", "name": "df3f56d0-2f45-44e0-b343-2404e987527b:indexpattern-datasource-layer-cb8d60de-f6ec-4c20-932f-5869a496730f", @@ -829,5 +788,6 @@ "type": "index-pattern" } ], - "type": "dashboard" + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/search/apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195.json b/packages/apache_tomcat/kibana/search/apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195.json deleted file mode 100644 index 422f73d8e2c8..000000000000 --- a/packages/apache_tomcat/kibana/search/apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "attributes": { - "columns": [ - "apache_tomcat.catalina.subsystem", - "log.level", - "message" - ], - "description": "", - "grid": { - "columns": { - "apache_tomcat.catalina.subsystem": { - "width": 240 - }, - "log.level": { - "width": 78 - } - } - }, - "hideChart": false, - "isTextBasedQuery": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.catalina" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.catalina" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "log.level", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "key": "log.level", - "negate": true, - "params": { - "query": "info" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "log.level": "info" - } - } - } - ], - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", - "query": { - "language": "kuery", - "query": "" - } - } - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "timeRestore": false, - "title": "Catalina logs overview [Logs Apache Tomcat]", - "usesAdHocDataView": false - }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T12:48:07.116Z", - "id": "apache_tomcat-1f3c6e30-dd11-11ed-9f4f-d97c9f37d195", - "migrationVersion": { - "dashboard": "8.0.0", - "search": "8.0.0" - }, - "references": [ - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "type": "index-pattern" - } - ], - "type": "search" -} \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/search/apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c.json b/packages/apache_tomcat/kibana/search/apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c.json deleted file mode 100644 index 8109ba8161e1..000000000000 --- a/packages/apache_tomcat/kibana/search/apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "attributes": { - "columns": [ - "apache_tomcat.localhost.subsystem", - "log.level", - "message" - ], - "description": "", - "grid": { - "columns": { - "apache_tomcat.localhost.subsystem": { - "width": 248 - }, - "log.level": { - "width": 75 - } - } - }, - "hideChart": false, - "isTextBasedQuery": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.localhost" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.localhost" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "log.level", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "key": "log.level", - "negate": true, - "params": { - "query": "info" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "log.level": "info" - } - } - } - ], - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", - "query": { - "language": "kuery", - "query": "" - } - } - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "timeRestore": false, - "title": "Localhost logs overview [Logs Apache Tomcat]", - "usesAdHocDataView": false - }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T12:48:07.116Z", - "id": "apache_tomcat-4d39c820-ddcd-11ed-8080-ddad81fe2c3c", - "migrationVersion": { - "dashboard": "8.0.0", - "search": "8.0.0" - }, - "references": [ - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "type": "index-pattern" - } - ], - "type": "search" -} \ No newline at end of file diff --git a/packages/apache_tomcat/kibana/search/apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f.json b/packages/apache_tomcat/kibana/search/apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f.json deleted file mode 100644 index 0d905f587a72..000000000000 --- a/packages/apache_tomcat/kibana/search/apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "attributes": { - "columns": [ - "source.ip", - "url.original", - "http.response.status_code" - ], - "description": "", - "grid": { - "columns": { - "http.response.status_code": { - "width": 183 - } - } - }, - "hideChart": false, - "isTextBasedQuery": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "event.dataset", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "key": "event.dataset", - "negate": false, - "params": { - "query": "apache_tomcat.access" - }, - "type": "phrase" - }, - "query": { - "match_phrase": { - "event.dataset": "apache_tomcat.access" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "field": "http.response.status_code", - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "key": "http.response.status_code", - "negate": false, - "params": { - "gte": "400", - "lt": "599" - }, - "type": "range", - "value": { - "gte": "400", - "lt": "599" - } - }, - "query": { - "range": { - "http.response.status_code": { - "gte": "400", - "lt": "599" - } - } - } - } - ], - "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", - "query": { - "language": "kuery", - "query": "" - } - } - }, - "refreshInterval": { - "pause": true, - "value": 60000 - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "timeRange": { - "from": "now-1y/d", - "to": "now" - }, - "timeRestore": true, - "title": "Client and Server HTTP error details [Logs Apache Tomcat]", - "usesAdHocDataView": false - }, - "coreMigrationVersion": "8.7.0", - "created_at": "2023-07-24T12:48:07.116Z", - "id": "apache_tomcat-d0957a70-eda4-11ed-909a-2baec7270d1f", - "migrationVersion": { - "dashboard": "8.0.0", - "search": "8.0.0" - }, - "references": [ - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index", - "type": "index-pattern" - } - ], - "type": "search" -} \ No newline at end of file diff --git a/packages/apache_tomcat/manifest.yml b/packages/apache_tomcat/manifest.yml index 82cc50383321..1294b00064e6 100644 --- a/packages/apache_tomcat/manifest.yml +++ b/packages/apache_tomcat/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: apache_tomcat title: Apache Tomcat -version: "1.4.0" +version: "1.5.0" description: Collect and parse logs and metrics from Apache Tomcat servers with Elastic Agent. categories: ["web", "observability"] type: integration diff --git a/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark.yml b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark.yml new file mode 100644 index 000000000000..4f103e193e46 --- /dev/null +++ b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark.yml @@ -0,0 +1,14 @@ +--- +description: Benchmark of 20000 aws.cloudtrail events ingested +data_stream: + name: cloudtrail +corpora: + generator: + total_events: 20000 + template: + type: gotext + path: ./cloudtrail-benchmark/template.ndjson + config: + path: ./cloudtrail-benchmark/config.yml + fields: + path: ./cloudtrail-benchmark/fields.yml diff --git a/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/config.yml b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/config.yml new file mode 100644 index 000000000000..5a451e236002 --- /dev/null +++ b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/config.yml @@ -0,0 +1,156 @@ +fields: + - name: timestamp + period: -24h + - name: digest_previous_s3_bucket + value: "alice-bucket" + - name: digest_s3_object + value: "AWSLogs/123456789123/CloudTrail-Digest/us-west-2/2020/09/11/123456789123_CloudTrail-Digest_us-west-2_leh-ct-test_us-west-2_20200911T193649Z.json.gz" + - name: digest_public_Key_fingerprint + value: "47aaa19f7eec22e9bd0b5e58cfade8cb" + - name: digest_signature_algorithm + value: "SHA256withRSA" + - name: previous_digest_s3_object + value: "AWSLogs/123456789123/CloudTrail-Digest/us-west-2/2020/09/11/123456789123_CloudTrail-Digest_us-west-2_leh-ct-test_us-west-2_20200911T183649Z.json.gz" + - name: previous_digest_hash_value + value: "531914fcfa0dbacf0c9dd1475a1fdcb5dea6e85921409f3c3ec0ba39063c860" + - name: digest_previous_hash_algorithm + value: "SHA-256" + - name: previous_digest_signature + value: "10e0872f32fa1d299d0cc98e94d4c88a6a2eada9d9fc3ae6d53dfe8d54c7caf807072f1e1eec47efdeecfcc22483887f8fddfc954ae587fba43e7676b5547f432fa8722ba1c5baa6b233bcb528ce7c01e3748aab8f28c16c024de79da820128b4c9e5ce65e98a9c4e631687ecc89c224a11bb3df06ce441ff740e4ac9fbd41159e77f5863550118284121f193e357866fbd0463faffb56e194af196e35a7675c3bbd0a398f43159343c3f59129d6339a281a8fdb3192f3fffea9bd21dbb0a705ebfae1921f2133aab0ad29522aea6df0828c1780d3f3ed6b8270ab3ba24459916b0fbbe82fba6ff9677bafe7306e0f5edcc0f1508cdb4e36f3e3b30e653e9987" + - name: eventCategory + value: "Insight" + - name: eventId + value: "11ea990b-4678-4bcd-8fbe-625EXAMPLE" + - name: userIdentity_accountId + range: + min: 1000000000000 + max: 2000000000000 + - name: userIdentity_type + enum: ["Root", "IAMUser", "AssumedRole", "Role", "FederatedUser", "AWSAccount"] + - name: userIdentity_arn + value: "arn:aws:iam::123456789012:user/Alice" + - name: userIdentity_eventSource + value: "iam.amazonaws.com" + - name: userIdentity_eventName + value: "UpdateUser" + - name: userIdentity_eventTime + value: "2014-07-08T17:35:27Z" + - name: newestEventTime + value: "2020-09-11T19:26:24.000Z" + - name: oldestEventTime + value: "2020-09-11T18:32:04.000Z" + - name: userIdentity_awsregion + enum: ["us-east-1", "us-east-2", "us-west-1", "us-west-2", "ap-south-1", "ap-northeast-3", "ap-northeast-2", "ap-southeast-1", "ap-southeast-2", "ap-northeast-1", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-north-1", "sa-east-1", "af-south-1", "ap-east-1", "ap-south-2", "ap-southeast-3", "eu-south-2", "eu-central-2", "me-south-1", "me-central-1"] + cardinality: 25 + - name: userIdentity_sourceIPAddress + value: 127.0.0.1 + - name: userIdentity_useragent + value: "aws-cli/1.16.310 Python/3.8.1 Darwin/18.7.0 botocore/1.13.46" + - name: requestID + value: "3a6b3260-739d-465e-9406-bcEXAMPLE" + - name: event_id + value: "9150d546-3564-4262-8e62-110EXAMPLE" + - name: logFiles + value: "https://elastic-package-aws-bucket-64547.s3.us-east-1.amazonaws.com/cloudtrail-digest.log" + - name: eventType + value: "AwsApiCall" + - name: userIdentity_requestparameters_username + value: "username" + - name: userIdentity_requestparameters_newusername + value: "newusername" + - name: recipientAccountId + value: "123456789012" + - name: digest_start_time + value: "2020-09-11T18:36:49.000Z" + - name: userIdentity_sessionContext_mfaauthenticated + enum: ["true", "false"] + - name: userIdentity_sessionContext_creationDate + value: "2020-09-11T18:12:52.000Z" + - name: invokedBy + value: "signin.amazonaws.com" + - name: sharedEventId + value: "123456789012" + - name: vpcEndpointId + value: "123456789012" + - name: userIdentity_sessionContext_sessionIssuer_type + enum: ["Root", "IAMUser", "Role"] + - name: userIdentity_sessionContext_sessionIssuer_principalId + value: "AROAIDPPEZS35WEXAMPLE" + - name: userIdentity_sessionContext_sessionIssuer_arn + value: "arn:aws:iam::123456789012:role/RoleToBeAssumed" + - name: userIdentity_sessionContext_sessionIssuer_accountId + range: + min: 1000000000000 + max: 2000000000000 + - name: userIdentity_sessionContext_sessionIssuer_userName + value: "RoleToBeAssumed" + - name: errorMessage + value: "Failed authentication" + - name: errorCode + value: "AccessDeniedException" + - name: apiVersion + value: "api1.1" + - name: responseElements_ConsoleLogin + enum: ["Failure", "Success"] + - name: additionalEventData_MobileVersion + enum: ["Yes", "No"] + - name: additionalEventData_LoginTo + value: "https://console.aws.amazon.com/sns" + - name: additionalEventData_MFAUsed + enum: ["Yes", "No"] + - name: aws_Account_Id + value: "hdbcskndcl123y2873y" + - name: digest_start_time + value: "2020-09-11T18:36:49Z" + - name: digest_end_time + value: "2020-09-12T19:13:56Z" + - name: digest_s3_bucket + value: "alice-bucket" + - name: resources_type + value: "AWS::IAM::Role" + - name: resources_ARN + value: "arn:aws:iam::111122223333:role/JohnRole2" + - name: resources_accountId + value: "111111100000011111" + - name: readOnly + enum: ["true", "false"] + - name: managementEvent + value: "cloudtrail event is genearted" + - name: insightDetails_state + enum: ["End", "start"] + - name: insightDetails_eventSource + value: "iam.amazonaws.com" + - name: insightDetails_eventName + value: "AttachUserPolicy" + - name: insightDetails_insightType + value: "ApiCallRateInsight" + - name: insightDetails_insffightContext_statistics_baseline_average + range: + min: 1 + max: 1000 + - name: insightDetails_insffightContext_statistics_insight_average + range: + min: 1 + max: 1000 + - name: insightDetails_insffightContext_statistics_insightDuration + range: + min: 1 + max: 100 + - name: insightDetails_insffightContext_statistics_baselineDuration + range: + min: 1 + max: 100000 + - name: insightDetails_insffightContext_attributions_attribute + value: "userIdentityArn" + - name: insightDetails_insffightContext_attributions_insight_value + value: "arn:aws:iam::123456789012:user/Alice" + - name: insightDetails_insffightContext_attributions_insight_average + range: + min: 1 + max: 100 + - name: insightDetails_insffightContext_attributions_baseline + value: [] + - name: bucket_num + range: + min: 63461 + max: 63471 diff --git a/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/fields.yml b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/fields.yml new file mode 100644 index 000000000000..0cc86ab86c91 --- /dev/null +++ b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/fields.yml @@ -0,0 +1,148 @@ +- name: timestamp + type: date +- name: aws_Account_Id + type: keyword +- name: file_hash_sha256 + type: keyword +- name: file_path + type: keyword +- name: digest_start_time + type: date +- name: digest_end_time + type: date +- name: digest_previous_s3_bucket + type: keyword +- name: digest_s3_bucket + type: keyword +- name: digest_s3_object + type: keyword +- name: digest_public_Key_fingerprint + type: keyword +- name: digest_signature_algorithm + type: keyword +- name: newestEventTime + type: date +- name: oldestEventTime + type: date +- name: previous_digest_s3_object + type: keyword +- name: previous_digest_hash_value + type: keyword +- name: digest_previous_hash_algorithm + type: keyword +- name: logFiles + type: keyword +- name: previous_digest_signature + type: keyword +- name: eventCategory + type: keyword +- name: eventId + type: keyword +- name: userIdentity_type + type: keyword +- name: userIdentity_principalId + type: keyword +- name: userIdentity_arn + type: keyword +- name: userIdentity_accountId + type: long +- name: userIdentity_accesskeyId + type: keyword + example: example_key +- name: userIdentity_userName + type: keyword +- name: userIdentity_eventTime + type: date +- name: userIdentity_eventSource + type: keyword +- name: userIdentity_eventName + type: keyword +- name: userIdentity_awsregion + type: keyword +- name: userIdentity_sourceIPAddress + type: ip +- name: userIdentity_useragent + type: keyword +- name: userIdentity_requestparameters_username + type: keyword +- name: userIdentity_requestparameters_newusername + type: keyword +- name: requestID + type: keyword +- name: eventType + type: keyword +- name: recipientAccountId + type: keyword +- name: userIdentity_sessionContext_mfaauthenticated + type: boolean +- name: userIdentity_sessionContext_creationDate + type: date +- name: sharedEventId + type: keyword +- name: vpcEndpointId + type: keyword +- name: invokedBy + type: keyword +- name: userIdentity_sessionContext_sessionIssuer_type + type: keyword +- name: userIdentity_sessionContext_sessionIssuer_principalId + type: keyword +- name: userIdentity_sessionContext_sessionIssuer_arn + type: keyword +- name: userIdentity_sessionContext_sessionIssuer_accountId + type: keyword +- name: userIdentity_sessionContext_sessionIssuer_userName + type: keyword +- name: errorMessage + type: keyword +- name: errorCode + type: keyword +- name: apiVersion + type: keyword +- name: responseElements_ConsoleLogin + type: keyword +- name: additionalEventData_MobileVersion + type: boolean +- name: additionalEventData_LoginTo + type: keyword +- name: additionalEventData_MFAUsed + type: boolean +- name: resources_type + type: keyword +- name: resources_ARN + type: keyword +- name: resources_accountId + type: keyword +- name: readOnly + type: boolean +- name: managementEvent + type: keyword +- name: insightDetails_state + type: boolean +- name: insightDetails_eventSource + type: "iam.amazonaws.com" +- name: insightDetails_eventName + type: "AttachUserPolicy" +- name: insightDetails_insightType + type: "ApiCallRateInsight" +- name: insightDetails_insffightContext_statistics_baseline_average + type: float +- name: insightDetails_insffightContext_statistics_insight_average + type: float +- name: insightDetails_insffightContext_statistics_insightDuration + type: long +- name: insightDetails_insffightContext_statistics_baselineDuration + type: long +- name: insightDetails_insffightContext_attributions_attribute + type: keyword +- name: insightDetails_insffightContext_attributions_insight_value + type: keyword +- name: insightDetails_insffightContext_attributions_insight_average + type: float +- name: insightDetails_insffightContext_attributions_baseline + type: keyword +- name: file_name + type: keyword + example: extra-samples +- name: bucket_num + type: long diff --git a/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/template.ndjson b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/template.ndjson new file mode 100644 index 000000000000..37729917652b --- /dev/null +++ b/packages/aws/_dev/benchmark/rally/cloudtrail-benchmark/template.ndjson @@ -0,0 +1,116 @@ +{{- $timestamp := generate "timestamp" }} +{{- $aws_Account_Id := generate "aws_Account_Id" }} +{{- $digest_start_time := generate "digest_start_time" }} +{{- $digest_end_time := generate "digest_end_time" }} +{{- $digest_previous_s3_bucket := generate "digest_previous_s3_bucket" }} +{{- $digest_s3_bucket := generate "digest_s3_bucket" }} +{{- $digest_s3_object := generate "digest_s3_object" }} +{{- $digest_public_Key_fingerprint := generate "digest_public_Key_fingerprint" }} +{{- $digest_signature_algorithm := generate "digest_signature_algorithm" }} +{{- $newestEventTime := generate "newestEventTime" }} +{{- $oldestEventTime := generate "oldestEventTime" }} +{{- $previous_digest_s3_object := generate "previous_digest_s3_object" }} +{{- $previous_digest_hash_value := generate "previous_digest_hash_value" }} +{{- $digest_previous_hash_algorithm := generate "digest_previous_hash_algorithm" }} +{{- $previous_digest_signature := generate "previous_digest_signature" }} +{{- $eventCategory := generate "eventCategory" }} +{{- $eventId := generate "eventId" }} +{{- $userIdentity_type := generate "userIdentity_type" }} +{{- $userIdentity_principalId := generate "userIdentity_principalId" }} +{{- $userIdentity_arn := generate "userIdentity_arn" }} +{{- $userIdentity_accountId := generate "userIdentity_accountId" }} +{{- $userIdentity_accesskeyId := generate "userIdentity_accesskeyId" }} +{{- $userIdentity_userName := generate "userIdentity_userName" }} +{{- $userIdentity_eventTime := generate "userIdentity_eventTime" }} +{{- $userIdentity_eventSource := generate "userIdentity_eventSource" }} +{{- $userIdentity_eventName := generate "userIdentity_eventName" }} +{{- $userIdentity_awsregion := generate "userIdentity_awsregion" }} +{{- $userIdentity_sourceIPAddress := generate "userIdentity_sourceIPAddress" }} +{{- $userIdentity_useragent := generate "userIdentity_useragent" }} +{{- $userIdentity_requestparameters_username := generate "userIdentity_requestparameters_username" }} +{{- $userIdentity_requestparameters_newusername := generate "userIdentity_requestparameters_newusername" }} +{{- $requestID := generate "requestID" }} +{{- $eventType := generate "eventType" }} +{{- $recipientAccountId := generate "recipientAccountId" }} +{{- $userIdentity_sessionContext_mfaauthenticated := generate "userIdentity_sessionContext_mfaauthenticated" }} +{{- $userIdentity_sessionContext_creationDate := generate "userIdentity_sessionContext_creationDate" }} +{{- $invokedBy := generate "invokedBy" }} +{{- $sharedEventId := generate "sharedEventId" }} +{{- $vpcEndpointId := generate "vpcEndpointId" }} +{{- $userIdentity_sessionContext_sessionIssuer_type := generate "userIdentity_sessionContext_sessionIssuer_type" }} +{{- $userIdentity_sessionContext_sessionIssuer_principalId := generate "userIdentity_sessionContext_sessionIssuer_principalId" }} +{{- $userIdentity_sessionContext_sessionIssuer_arn := generate "userIdentity_sessionContext_sessionIssuer_arn" }} +{{- $userIdentity_sessionContext_sessionIssuer_accountId := generate "userIdentity_sessionContext_sessionIssuer_accountId" }} +{{- $userIdentity_sessionContext_sessionIssuer_userName := generate "userIdentity_sessionContext_sessionIssuer_userName" }} +{{- $errorMessage := generate "errorMessage" }} +{{- $errorCode := generate "errorCode" }} +{{- $apiVersion := generate "apiVersion" }} +{{- $responseElements_ConsoleLogin := generate "responseElements_ConsoleLogin" }} +{{- $additionalEventData_MobileVersion := generate "additionalEventData_MobileVersion" }} +{{- $additionalEventData_LoginTo := generate "additionalEventData_LoginTo" }} +{{- $additionalEventData_MFAUsed := generate "additionalEventData_MFAUsed" }} +{{- $resources_accountId := generate "resources_accountId" }} +{{- $resources_ARN := generate "resources_ARN" }} +{{- $resources_type := generate "resources_type" }} +{{- $readOnly := generate "readOnly" }} +{{- $logFiles := generate "logFiles" }} +{{- $managementEvent := generate "managementEvent" }} +{{- $insightDetails_state := generate "insightDetails_state" }} +{{- $insightDetails_eventSource := generate "insightDetails_eventSource" }} +{{- $insightDetails_eventName := generate "insightDetails_eventName" }} +{{- $insightDetails_insightType := generate "insightDetails_insightType" }} +{{- $insightDetails_insffightContext_statistics_baseline_average := generate "insightDetails_insffightContext_statistics_baseline_average" }} +{{- $insightDetails_insffightContext_attributions_attribute := generate "insightDetails_insffightContext_attributions_attribute" }} +{{- $insightDetails_insffightContext_attributions_insight_value := generate "insightDetails_insffightContext_attributions_insight_value" }} +{{- $insightDetails_insffightContext_attributions_insight_average := generate "insightDetails_insffightContext_attributions_insight_average" }} +{{- $insightDetails_insffightContext_attributions_baseline := generate "insightDetails_insffightContext_attributions_baseline" }} +{{- $insightDetails_insffightContext_statistics_insight_average := generate "insightDetails_insffightContext_statistics_insight_average" }} +{{- $insightDetails_insffightContext_statistics_insightDuration := generate "insightDetails_insffightContext_statistics_insightDuration" }} +{{- $insightDetails_insffightContext_statistics_baselineDuration := generate "insightDetails_insffightContext_statistics_baselineDuration" }} +{{- $bucket_num := generate "bucket_num" }} +{{- $file_name := generate "file_name" }} +{ + "@timestamp": "{{ $timestamp.Format "2006-01-02T15:04:05.000Z07:00" }}", + "agent": { + "ephemeral_id": "22ed892c-43bd-408a-9121-65e2f5b6a56e", + "id": "de42127b-4db8-4471-824e-a7b14f478663", + "name": "aws-scale-123456", + "type": "filebeat", + "version": "8.8.0" + }, + "s3": { + "bucket": { + "arn": "arn:aws:s3:::elastic-package-aws-bucket-{{ $bucket_num }}", + "name": "elastic-package-aws-bucket-{{ $bucket_num }}" + }, + "object": { + "key": "{{ $file_name }}.log" + } + }, + "data_stream": { + "dataset": "aws.cloudtrail", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.8.0" + }, + "elastic_agent": { + "id": "de42127b-4db8-4471-824e-a7b14f478663", + "snapshot": false, + "version": "8.8.0" + }, + "message": "{ \"eventVersion\": \"1.05\", \"userIdentity\": { \"type\": \"IAMUser\", \"principalId\": \"EXAMPLE_ID\", \"arn\": \"arn:aws:iam::0123456789012:user/Alice\", \"accountId\": \"0123456789012\", \"accessKeyId\": \"EXAMPLE_KEY\", \"userName\": \"Alice\", \"sessionContext\": { \"attributes\": { \"mfaAuthenticated\": \"true\", \"creationDate\": \"2020-01-10T14:38:30Z\" }, \"sessionIssuer\": { \"accountId\": \"111111111111\", \"arn\": \"arn:aws:iam::111111111111:role/JohnRole1\", \"principalId\": \"AROAIN5ATK5U7KEXAMPLE\", \"type\": \"Role\" } }, \"invokedBy\": \"signin.amazonaws.com\" }, \"eventTime\": \"2020-01-10T16:06:40Z\", \"eventSource\": \"iam.amazonaws.com\", \"eventName\": \"UploadSSHPublicKey\", \"awsRegion\": \"us-east-1\", \"sourceIPAddress\": \"127.0.0.1\", \"userAgent\": \"signin.amazonaws.com\", \"requestParameters\": { \"sSHPublicKeyBody\": \"ssh-rsa AAAAdeadcodedeadcode Alice@localhost.domain\", \"userName\": \"Alice\" }, \"responseElements\": { \"sSHPublicKey\": { \"fingerprint\": \"de:ad:c0:de:de:ad:c0:de:de:ad:c0:de:de:ad:c0:de\", \"status\": \"Active\", \"uploadDate\": \"Jan 10, 2020 4:06:40 PM\", \"userName\": \"Alice\", \"sSHPublicKeyId\": \"EXAMPLE_KEY_ID\", \"sSHPublicKeyBody\": \"ssh-rsa AAAAdeadcodedeadcode Alice@localhost.domain\" } }, \"requestID\": \"EXAMPLE-44b9-41cd-90f2-EXAMPLE\", \"eventID\": \"EXAMPLE-9a9d-4da4-9998-EXAMPLE\", \"eventType\": \"AwsApiCall\", \"recipientAccountId\": \"0123456789012\" }", + "event": { + "dataset": "aws.cloudtrail" + }, + "input": { + "type": "aws-s3" + }, + "offset": 0, + "tags": [ + "preserve_original_event", + "forwarded", + "aws-cloudtrail" + ] +} \ No newline at end of file diff --git a/packages/azure/changelog.yml b/packages/azure/changelog.yml index 643fdecc9096..bc13cd00b176 100644 --- a/packages/azure/changelog.yml +++ b/packages/azure/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.11.2" + changes: + - description: Add missing ECS field definitions. + type: bugfix + link: https://github.com/elastic/integrations/pull/9738 - version: "1.11.1" changes: - description: Update description for event hub parameter name recommendations. diff --git a/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml index 0dfb4300ff0f..f00b11ca2b69 100644 --- a/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml +++ b/packages/azure/data_stream/graphactivitylogs/_dev/test/pipeline/test-common-config.yml @@ -1,7 +1,6 @@ fields: tags: - preserve_original_event - dynamic_fields: # This can be removed after ES 8.14 is the minimum version. # Relates: https://github.com/elastic/elasticsearch/pull/105689 diff --git a/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml b/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml index b8b7c4f4bfa9..1a4e00bc06ef 100644 --- a/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml +++ b/packages/azure/data_stream/graphactivitylogs/fields/ecs.yml @@ -1,3 +1,7 @@ +- name: client.as.number + external: ecs +- name: client.as.organization.name + external: ecs - name: client.ip external: ecs - name: client.geo.city_name @@ -56,6 +60,10 @@ external: ecs - name: source.address external: ecs +- name: source.as.number + external: ecs +- name: source.as.organization.name + external: ecs - name: source.geo.city_name external: ecs - name: source.geo.continent_name diff --git a/packages/azure/docs/graphactivitylogs.md b/packages/azure/docs/graphactivitylogs.md index 4f6d123ff0a6..08fc03545b80 100644 --- a/packages/azure/docs/graphactivitylogs.md +++ b/packages/azure/docs/graphactivitylogs.md @@ -253,6 +253,9 @@ An example event for `graphactivitylogs` looks as following: | azure.resource.provider | Resource type/namespace. | keyword | | azure.subscription_id | Azure subscription ID. | keyword | | azure.tenant_id | tenant ID. | keyword | +| client.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| client.as.organization.name | Organization name. | keyword | +| client.as.organization.name.text | Multi-field of `client.as.organization.name`. | match_only_text | | client.geo.city_name | City name. | keyword | | client.geo.continent_name | Name of the continent. | keyword | | client.geo.country_iso_code | Country ISO code. | keyword | @@ -317,6 +320,9 @@ An example event for `graphactivitylogs` looks as following: | related.ip | All of the IPs seen on your event. | ip | | related.user | All the user names or other user identifiers seen on the event. | keyword | | source.address | Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. | keyword | +| source.as.number | Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. | long | +| source.as.organization.name | Organization name. | keyword | +| source.as.organization.name.text | Multi-field of `source.as.organization.name`. | match_only_text | | source.geo.city_name | City name. | keyword | | source.geo.continent_name | Name of the continent. | keyword | | source.geo.country_iso_code | Country ISO code. | keyword | diff --git a/packages/azure/manifest.yml b/packages/azure/manifest.yml index ab2e428a32a9..d68a34cc8ac7 100644 --- a/packages/azure/manifest.yml +++ b/packages/azure/manifest.yml @@ -1,6 +1,6 @@ name: azure title: Azure Logs -version: 1.11.1 +version: 1.11.2 description: This Elastic integration collects logs from Azure type: integration icons: diff --git a/packages/bbot/LICENSE.txt b/packages/bbot/LICENSE.txt new file mode 100644 index 000000000000..67ae28e3ee60 --- /dev/null +++ b/packages/bbot/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 carsonhrusovsky nicpenning zaynsnyder nickprokop williambakeberg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/bbot/_dev/build/build.yml b/packages/bbot/_dev/build/build.yml new file mode 100644 index 000000000000..1f4fa988f6e9 --- /dev/null +++ b/packages/bbot/_dev/build/build.yml @@ -0,0 +1,4 @@ +dependencies: + ecs: + reference: git@v8.11.0 + import_mappings: true diff --git a/packages/bbot/_dev/build/docs/README.md b/packages/bbot/_dev/build/docs/README.md new file mode 100644 index 000000000000..e2c07d08efb1 --- /dev/null +++ b/packages/bbot/_dev/build/docs/README.md @@ -0,0 +1,37 @@ +# BBOT integration + +Please read this page in its entirety as this integration requires some setup. + +This integration is for [BBOT](https://www.blacklanternsecurity.com/bbot/), an Attack Surface Management (ASM) Open Source Inteligence (OSINT) Tool. BBOT itself stands for Bighuge BLS OSINT Tool (BBOT). + +This integration requires the external use of BBOT. You will have to download and run the tool apart from this integration. Once your scan is complete, this integration will ingest the results into Elastic. + +This tool is used to enhance your external knowledge of your environment. This is done through the integration of many tools into BBOT providing a overview of your attack surface. Here is [how it works](https://www.blacklanternsecurity.com/bbot/how_it_works/). + +**Important Note** - You will have to provide the following parameter in your BBOT scan for your output.ndjson to be formatted correctly. +``` +-c output_modules.json.siem_friendly=true +``` +**Example BBOT Scan** +``` +bbot -t elastic.co --strict-scope -f safe passive -c output_modules.json.siem_friendly=true -om json +``` + +You will have to configure the path for the output file within the integration settings. A common and popular path that could work here is: + +**Example BBOT Path** +``` +/home//.bbot/scans/*/output.ndjson +``` + +BBOT Scanning [Documentation](https://www.blacklanternsecurity.com/bbot/scanning/). + +- `bbot` dataset: Made up of the findings found in the BBOT Scans. + +## Logs + +### ASM Findings + +{{event "asm_intel"}} + +{{fields "asm_intel"}} diff --git a/packages/bbot/_dev/deploy/docker/docker-compose.yml b/packages/bbot/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 000000000000..64e167675ada --- /dev/null +++ b/packages/bbot/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,7 @@ +services: + bbot-logfile: + image: alpine + volumes: + - ./sample_logs:/sample_logs:ro + - ${SERVICE_LOGS_DIR}:/var/log + command: /bin/sh -c "cp /sample_logs/* /var/log/" diff --git a/packages/bbot/_dev/deploy/docker/sample_logs/log.log b/packages/bbot/_dev/deploy/docker/sample_logs/log.log new file mode 100644 index 000000000000..075fc7c0455b --- /dev/null +++ b/packages/bbot/_dev/deploy/docker/sample_logs/log.log @@ -0,0 +1,7 @@ +{"type": "SCAN", "id": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "data": {"SCAN": "heinous_hermione (SCAN:725368977d3a680e579707504e59428a7e3acc9d)"}, "scope_distance": 0, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170919.403808, "source": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "tags": ["in-scope"], "module": "TARGET", "module_sequence": "TARGET"} +{"type": "DNS_NAME", "id": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", "data": {"DNS_NAME": "example.com"}, "scope_distance": 0, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170907.779394, "resolved_hosts": ["123.123.123.123"], "source": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "tags": ["resolved", "a-record", "target", "in-scope", "subdomain"], "module": "TARGET", "module_sequence": "TARGET"} +{"type": "ORG_STUB", "id": "ORG_STUB:4452d71687b6bc2c9389c3349fdc17fbd73b833b", "data": {"ORG_STUB": "ex"}, "scope_distance": 1, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170932.070682, "source": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", "tags": ["distance-1"], "module": "speculate", "module_sequence": "speculate"} +{"type": "DNS_NAME", "id": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", "data": {"DNS_NAME": "example.com"}, "scope_distance": 0, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170932.40485, "resolved_hosts": ["123.123.123.123"], "source": "IP_ADDRESS:605bb7cd2537bcf0fd94ce6b120bfb56cf3e0753", "tags": ["resolved", "a-record", "in-scope", "subdomain"], "module": "PTR", "module_sequence": "PTR"} +{"type": "IP_ADDRESS", "id": "IP_ADDRESS:605bb7cd2537bcf0fd94ce6b120bfb56cf3e0753", "data": {"IP_ADDRESS": "123.123.123.123"}, "scope_distance": 1, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170932.033501, "resolved_hosts": ["123.123.123.123"], "source": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", "tags": ["ipv4", "resolved", "distance-1", "internal", "ptr-record"], "module": "A", "module_sequence": "A"} +{"type": "DNS_NAME", "id": "DNS_NAME:32102fa4a314358e17370aaec3b0f32641dd9ab3", "data": {"DNS_NAME": "example.com"}, "scope_distance": 1, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170933.584077, "resolved_hosts": ["123.123.123.123"], "source": "OPEN_TCP_PORT:62743609c2dcda87da01a4faa9ddd1b7b362939f", "tags": ["soa-record", "affiliate", "resolved", "distance-1", "domain", "a-record", "txt-record", "mx-record", "ns-record"], "module": "sslcert", "module_sequence": "sslcert"} +{"type": "AZURE_TENANT", "id": "AZURE_TENANT:db22e942c8a51294e1abc874daa076caecccbf01", "data": {"AZURE_TENANT": {"tenant-names": ["exampletenant"], "domains": ["example.smtp.online", "example.com", "example1.com", "example.org", "example2.com", "example.gov", "example3.com"], "tenant-id": "70af547c-69ab-416d-b4a6-543b5ce52b99"}}, "scope_distance": 1, "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", "timestamp": 1709170932.947014, "source": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", "tags": ["distance-1"], "module": "azure_tenant", "module_sequence": "azure_tenant"} diff --git a/packages/bbot/changelog.yml b/packages/bbot/changelog.yml new file mode 100644 index 000000000000..bdb726760d2b --- /dev/null +++ b/packages/bbot/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.1.0" + changes: + - description: Initial release of the bbot package + type: enhancement + link: https://github.com/elastic/integrations/pull/9651 diff --git a/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log new file mode 100644 index 000000000000..40bb6ff17b60 --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log @@ -0,0 +1,10 @@ +{"type": "DNS_NAME", "id": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", "data": {"DNS_NAME": "elastic.co"}, "scope_distance": 0, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970699.038803, "resolved_hosts": ["2600:1901:0:1f6d::", "34.107.161.234"], "source": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "tags": ["target", "soa-record", "mx-record", "ns-record", "resolved", "aaaa-record", "in-scope", "a-record", "txt-record", "domain", "cloud-google"], "module": "TARGET", "module_sequence": "TARGET"} +{"type": "ORG_STUB", "id": "ORG_STUB:988eb4980904d42862f7dc9d4eed52469312ac20", "data": {"ORG_STUB": "elastic"}, "scope_distance": 1, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970733.812364, "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", "tags": ["distance-1"], "module": "speculate", "module_sequence": "speculate"} +{"type": "PROTOCOL", "id": "PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709", "data": {"PROTOCOL": {"host": "elastic.co", "protocol": "HTTPS", "port": 443}}, "scope_distance": 0, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970734.23711, "resolved_hosts": ["2600:1901:0:1f6d::", "34.107.161.234"], "source": "OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8", "tags": ["ip-34-107-161-234", "cloud-google", "in-scope"], "module": "fingerprintx", "module_sequence": "fingerprintx"} +{"type": "DNS_NAME", "id": "DNS_NAME:9999999999999999999999", "data": {"DNS_NAME": "test.com"}, "scope_distance": 0, "scan": "SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa", "timestamp": 1709244163.717503, "resolved_hosts": ["192.168.1.1"], "source": "IP_ADDRESS:9999999999999999999999", "tags": ["ns-record", "soa-record", "resolved", "a-record", "domain", "in-scope"], "module": "PTR", "module_sequence": "PTR"} +{"type": "TECHNOLOGY", "id": "TECHNOLOGY:84bddf65d64caa76bc0afcc889bfb442a33d9a5a", "data": {"TECHNOLOGY": {"host": "elastic.co", "technology": "google cloud", "url": "https://elastic.co/"}}, "scope_distance": 0, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970734.669938, "resolved_hosts": ["2600:1901:0:1f6d::", "34.107.161.234"], "source": "URL:61d1d0467d7e841c13fff70dff85bb305cac7e1a", "tags": ["in-scope", "cloud-google"], "module": "wappalyzer", "module_sequence": "httpx->wappalyzer"} +{"type": "FINDING", "id": "FINDING:769d4c9101436d8a2d4cc2d2033643c14e1a4a1d", "data": {"FINDING": {"host": "login.windows.net", "description": "Potentially Sprayable OAUTH Endpoint (domain: elastic.co) at https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token", "url": "https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token"}}, "scope_distance": 1, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970742.029721, "resolved_hosts": [], "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", "tags": ["affiliate", "distance-1"], "module": "oauth", "module_sequence": "oauth->oauth"} +{"type": "PROTOCOL", "id": "PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709", "data": {"PROTOCOL": {"host": "elastic.co", "protocol": "HTTPS", "port": 443}}, "scope_distance": 0, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970734.23711, "resolved_hosts": ["2600:1901:0:1f6d::", "34.107.161.234"], "source": "OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8", "tags": ["ip-34-107-161-234", "cloud-google", "in-scope"], "module": "fingerprintx", "module_sequence": "fingerprintx"} +{"type": "ASN", "id": "ASN:6af45683f00c3b8f6f32d0acf47ebeb2d4bdda3e", "data": {"ASN": {"asn": "396982", "subnet": "34.96.0.0/12", "name": "GOOGLE-CLOUD-PLATFORM", "description": "Google LLC", "country": "US"}}, "scope_distance": 2, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970737.966555, "source": "IP_ADDRESS:54cdd6c3f5decd0856fd40523d6b1ce78c3f7f09", "tags": ["distance-2"], "module": "asn", "module_sequence": "asn"} +{"type": "STORAGE_BUCKET", "id": "STORAGE_BUCKET:53ea3e7d2e3faa5d6d27fa912b04e30d25e1e59f", "data": {"STORAGE_BUCKET": {"name": "elastic-co", "url": "https://www.googleapis.com/storage/v1/b/elastic-co"}}, "web_spider_distance": 0, "scope_distance": 1, "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", "timestamp": 1710970736.836363, "resolved_hosts": ["2607:f8b0:4009:804::200a", "172.217.5.10", "142.250.191.170", "142.250.191.138", "142.250.191.106", "142.251.32.10", "142.250.191.202", "142.250.191.234", "2607:f8b0:4009:81c::200a", "2607:f8b0:4009:81b::200a", "2607:f8b0:4009:803::200a", "172.217.0.170"], "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", "tags": ["cloud-google", "distance-1"], "module": "bucket_google", "module_sequence": "bucket_google"} +{"type": "WAF", "id": "WAF:99999999999999999", "data": {"WAF": {"url": "https://www.testsite.test/", "host": "www.testsite.test", "waf": "WAF DATA"}}, "scope_distance": 0, "scan": "SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa", "timestamp": 1709244216.155426, "resolved_hosts": [], "source": "URL:9999999999999999999", "tags": ["in-scope"], "module": "wafw00f", "module_sequence": "wafw00f"} diff --git a/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log-expected.json b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log-expected.json new file mode 100644 index 000000000000..f97a322a430c --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-bbot-ndjson.log-expected.json @@ -0,0 +1,430 @@ +{ + "expected": [ + { + "@timestamp": "2024-03-20T21:38:19.038Z", + "bbot": { + "id": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", + "module": "TARGET", + "module_sequence": "TARGET", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 0, + "source": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "tags": [ + "target", + "soa-record", + "mx-record", + "ns-record", + "resolved", + "aaaa-record", + "in-scope", + "a-record", + "txt-record", + "domain", + "cloud-google" + ], + "type": "DNS_NAME" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "host": { + "name": "elastic.co" + }, + "message": "{\"type\": \"DNS_NAME\", \"id\": \"DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88\", \"data\": {\"DNS_NAME\": \"elastic.co\"}, \"scope_distance\": 0, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970699.038803, \"resolved_hosts\": [\"2600:1901:0:1f6d::\", \"34.107.161.234\"], \"source\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"tags\": [\"target\", \"soa-record\", \"mx-record\", \"ns-record\", \"resolved\", \"aaaa-record\", \"in-scope\", \"a-record\", \"txt-record\", \"domain\", \"cloud-google\"], \"module\": \"TARGET\", \"module_sequence\": \"TARGET\"}", + "related": { + "hosts": [ + "2600:1901:0:1f6d::", + "34.107.161.234" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "elastic.co" + ] + } + }, + { + "@timestamp": "2024-03-20T21:38:53.812Z", + "bbot": { + "data": { + "org_stub": "elastic" + }, + "id": "ORG_STUB:988eb4980904d42862f7dc9d4eed52469312ac20", + "module": "speculate", + "module_sequence": "speculate", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 1, + "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", + "tags": [ + "distance-1" + ], + "type": "ORG_STUB" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"ORG_STUB\", \"id\": \"ORG_STUB:988eb4980904d42862f7dc9d4eed52469312ac20\", \"data\": {\"ORG_STUB\": \"elastic\"}, \"scope_distance\": 1, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970733.812364, \"source\": \"DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88\", \"tags\": [\"distance-1\"], \"module\": \"speculate\", \"module_sequence\": \"speculate\"}", + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2024-03-20T21:38:54.237Z", + "bbot": { + "data": { + "protocol": { + "host": "elastic.co", + "protocol": "HTTPS" + } + }, + "id": "PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709", + "module": "fingerprintx", + "module_sequence": "fingerprintx", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 0, + "source": "OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8", + "tags": [ + "ip-34-107-161-234", + "cloud-google", + "in-scope" + ], + "type": "PROTOCOL" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"PROTOCOL\", \"id\": \"PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709\", \"data\": {\"PROTOCOL\": {\"host\": \"elastic.co\", \"protocol\": \"HTTPS\", \"port\": 443}}, \"scope_distance\": 0, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970734.23711, \"resolved_hosts\": [\"2600:1901:0:1f6d::\", \"34.107.161.234\"], \"source\": \"OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8\", \"tags\": [\"ip-34-107-161-234\", \"cloud-google\", \"in-scope\"], \"module\": \"fingerprintx\", \"module_sequence\": \"fingerprintx\"}", + "related": { + "hosts": [ + "2600:1901:0:1f6d::", + "34.107.161.234" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "elastic.co" + ], + "port": 443 + } + }, + { + "@timestamp": "2024-02-29T22:02:43.717Z", + "bbot": { + "id": "DNS_NAME:9999999999999999999999", + "module": "PTR", + "module_sequence": "PTR", + "scan": "SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa", + "scope_distance": 0, + "source": "IP_ADDRESS:9999999999999999999999", + "tags": [ + "ns-record", + "soa-record", + "resolved", + "a-record", + "domain", + "in-scope" + ], + "type": "DNS_NAME" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "host": { + "name": "test.com" + }, + "message": "{\"type\": \"DNS_NAME\", \"id\": \"DNS_NAME:9999999999999999999999\", \"data\": {\"DNS_NAME\": \"test.com\"}, \"scope_distance\": 0, \"scan\": \"SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa\", \"timestamp\": 1709244163.717503, \"resolved_hosts\": [\"192.168.1.1\"], \"source\": \"IP_ADDRESS:9999999999999999999999\", \"tags\": [\"ns-record\", \"soa-record\", \"resolved\", \"a-record\", \"domain\", \"in-scope\"], \"module\": \"PTR\", \"module_sequence\": \"PTR\"}", + "related": { + "hosts": [ + "192.168.1.1" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "test.com" + ] + } + }, + { + "@timestamp": "2024-03-20T21:38:54.669Z", + "bbot": { + "data": { + "technology": { + "host": "elastic.co", + "technology": "google cloud", + "url": "https://elastic.co/" + } + }, + "id": "TECHNOLOGY:84bddf65d64caa76bc0afcc889bfb442a33d9a5a", + "module": "wappalyzer", + "module_sequence": "httpx->wappalyzer", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 0, + "source": "URL:61d1d0467d7e841c13fff70dff85bb305cac7e1a", + "tags": [ + "in-scope", + "cloud-google" + ], + "type": "TECHNOLOGY" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"TECHNOLOGY\", \"id\": \"TECHNOLOGY:84bddf65d64caa76bc0afcc889bfb442a33d9a5a\", \"data\": {\"TECHNOLOGY\": {\"host\": \"elastic.co\", \"technology\": \"google cloud\", \"url\": \"https://elastic.co/\"}}, \"scope_distance\": 0, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970734.669938, \"resolved_hosts\": [\"2600:1901:0:1f6d::\", \"34.107.161.234\"], \"source\": \"URL:61d1d0467d7e841c13fff70dff85bb305cac7e1a\", \"tags\": [\"in-scope\", \"cloud-google\"], \"module\": \"wappalyzer\", \"module_sequence\": \"httpx->wappalyzer\"}", + "related": { + "hosts": [ + "2600:1901:0:1f6d::", + "34.107.161.234" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "elastic.co" + ], + "full": [ + "https://elastic.co/" + ] + } + }, + { + "@timestamp": "2024-03-20T21:39:02.029Z", + "bbot": { + "data": { + "finding": { + "description": "Potentially Sprayable OAUTH Endpoint (domain: elastic.co) at https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token", + "host": "login.windows.net", + "url": "https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token" + } + }, + "id": "FINDING:769d4c9101436d8a2d4cc2d2033643c14e1a4a1d", + "module": "oauth", + "module_sequence": "oauth->oauth", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 1, + "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", + "tags": [ + "affiliate", + "distance-1" + ], + "type": "FINDING" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"FINDING\", \"id\": \"FINDING:769d4c9101436d8a2d4cc2d2033643c14e1a4a1d\", \"data\": {\"FINDING\": {\"host\": \"login.windows.net\", \"description\": \"Potentially Sprayable OAUTH Endpoint (domain: elastic.co) at https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token\", \"url\": \"https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token\"}}, \"scope_distance\": 1, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970742.029721, \"resolved_hosts\": [], \"source\": \"DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88\", \"tags\": [\"affiliate\", \"distance-1\"], \"module\": \"oauth\", \"module_sequence\": \"oauth->oauth\"}", + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "login.windows.net" + ], + "full": [ + "https://login.windows.net/4fa94b7d-a743-486f-abcc-6c276c44cf4b/oauth2/token" + ] + } + }, + { + "@timestamp": "2024-03-20T21:38:54.237Z", + "bbot": { + "data": { + "protocol": { + "host": "elastic.co", + "protocol": "HTTPS" + } + }, + "id": "PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709", + "module": "fingerprintx", + "module_sequence": "fingerprintx", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 0, + "source": "OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8", + "tags": [ + "ip-34-107-161-234", + "cloud-google", + "in-scope" + ], + "type": "PROTOCOL" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"PROTOCOL\", \"id\": \"PROTOCOL:d24ec95c89ca37a123377fb3727fab7d49215709\", \"data\": {\"PROTOCOL\": {\"host\": \"elastic.co\", \"protocol\": \"HTTPS\", \"port\": 443}}, \"scope_distance\": 0, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970734.23711, \"resolved_hosts\": [\"2600:1901:0:1f6d::\", \"34.107.161.234\"], \"source\": \"OPEN_TCP_PORT:a65b60678a7b6f30b1bd040f731582402baac2b8\", \"tags\": [\"ip-34-107-161-234\", \"cloud-google\", \"in-scope\"], \"module\": \"fingerprintx\", \"module_sequence\": \"fingerprintx\"}", + "related": { + "hosts": [ + "2600:1901:0:1f6d::", + "34.107.161.234" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "elastic.co" + ], + "port": 443 + } + }, + { + "@timestamp": "2024-03-20T21:38:57.966Z", + "bbot": { + "data": { + "asn": { + "asn": "396982", + "country": "US", + "description": "Google LLC", + "name": "GOOGLE-CLOUD-PLATFORM", + "subnet": "34.96.0.0/12" + } + }, + "id": "ASN:6af45683f00c3b8f6f32d0acf47ebeb2d4bdda3e", + "module": "asn", + "module_sequence": "asn", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 2, + "source": "IP_ADDRESS:54cdd6c3f5decd0856fd40523d6b1ce78c3f7f09", + "tags": [ + "distance-2" + ], + "type": "ASN" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"ASN\", \"id\": \"ASN:6af45683f00c3b8f6f32d0acf47ebeb2d4bdda3e\", \"data\": {\"ASN\": {\"asn\": \"396982\", \"subnet\": \"34.96.0.0/12\", \"name\": \"GOOGLE-CLOUD-PLATFORM\", \"description\": \"Google LLC\", \"country\": \"US\"}}, \"scope_distance\": 2, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970737.966555, \"source\": \"IP_ADDRESS:54cdd6c3f5decd0856fd40523d6b1ce78c3f7f09\", \"tags\": [\"distance-2\"], \"module\": \"asn\", \"module_sequence\": \"asn\"}", + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2024-03-20T21:38:56.836Z", + "bbot": { + "data": { + "storage_bucket": { + "name": "elastic-co", + "url": "https://www.googleapis.com/storage/v1/b/elastic-co" + } + }, + "id": "STORAGE_BUCKET:53ea3e7d2e3faa5d6d27fa912b04e30d25e1e59f", + "module": "bucket_google", + "module_sequence": "bucket_google", + "scan": "SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e", + "scope_distance": 1, + "source": "DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88", + "tags": [ + "cloud-google", + "distance-1" + ], + "type": "STORAGE_BUCKET", + "web_spider_distance": 0 + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"STORAGE_BUCKET\", \"id\": \"STORAGE_BUCKET:53ea3e7d2e3faa5d6d27fa912b04e30d25e1e59f\", \"data\": {\"STORAGE_BUCKET\": {\"name\": \"elastic-co\", \"url\": \"https://www.googleapis.com/storage/v1/b/elastic-co\"}}, \"web_spider_distance\": 0, \"scope_distance\": 1, \"scan\": \"SCAN:c0c85de7152b616ba28b9d20b4f009df2dc3d20e\", \"timestamp\": 1710970736.836363, \"resolved_hosts\": [\"2607:f8b0:4009:804::200a\", \"172.217.5.10\", \"142.250.191.170\", \"142.250.191.138\", \"142.250.191.106\", \"142.251.32.10\", \"142.250.191.202\", \"142.250.191.234\", \"2607:f8b0:4009:81c::200a\", \"2607:f8b0:4009:81b::200a\", \"2607:f8b0:4009:803::200a\", \"172.217.0.170\"], \"source\": \"DNS_NAME:9d26e95592fabe5d7756f89b8ca33c8c0a0bfc88\", \"tags\": [\"cloud-google\", \"distance-1\"], \"module\": \"bucket_google\", \"module_sequence\": \"bucket_google\"}", + "related": { + "hosts": [ + "2607:f8b0:4009:804::200a", + "172.217.5.10", + "142.250.191.170", + "142.250.191.138", + "142.250.191.106", + "142.251.32.10", + "142.250.191.202", + "142.250.191.234", + "2607:f8b0:4009:81c::200a", + "2607:f8b0:4009:81b::200a", + "2607:f8b0:4009:803::200a", + "172.217.0.170" + ] + }, + "tags": [ + "preserve_original_event" + ], + "url": { + "full": [ + "https://www.googleapis.com/storage/v1/b/elastic-co" + ] + } + }, + { + "@timestamp": "2024-02-29T22:03:36.155Z", + "bbot": { + "data": { + "waf": { + "host": "www.testsite.test", + "url": "https://www.testsite.test/", + "waf": "WAF DATA" + } + }, + "id": "WAF:99999999999999999", + "module": "wafw00f", + "module_sequence": "wafw00f", + "scan": "SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa", + "scope_distance": 0, + "source": "URL:9999999999999999999", + "tags": [ + "in-scope" + ], + "type": "WAF" + }, + "ecs": { + "version": "8.12.0" + }, + "event": { + "kind": "asset" + }, + "message": "{\"type\": \"WAF\", \"id\": \"WAF:99999999999999999\", \"data\": {\"WAF\": {\"url\": \"https://www.testsite.test/\", \"host\": \"www.testsite.test\", \"waf\": \"WAF DATA\"}}, \"scope_distance\": 0, \"scan\": \"SCAN:79d977fa01a9f53c31301b3d2c28a738b569e1fa\", \"timestamp\": 1709244216.155426, \"resolved_hosts\": [], \"source\": \"URL:9999999999999999999\", \"tags\": [\"in-scope\"], \"module\": \"wafw00f\", \"module_sequence\": \"wafw00f\"}", + "tags": [ + "preserve_original_event" + ], + "url": { + "domain": [ + "www.testsite.test" + ], + "full": [ + "https://www.testsite.test/" + ] + } + } + ] +} \ No newline at end of file diff --git a/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-common-config.yml b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 000000000000..4da226416540 --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_original_event diff --git a/packages/bbot/data_stream/asm_intel/_dev/test/system/test-default-config.yml b/packages/bbot/data_stream/asm_intel/_dev/test/system/test-default-config.yml new file mode 100644 index 000000000000..66812264681f --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +service: bbot-logfile +input: logfile +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/*.log" + preserve_original_event: true +assert: + hit_count: 7 diff --git a/packages/bbot/data_stream/asm_intel/agent/stream/stream.yml.hbs b/packages/bbot/data_stream/asm_intel/agent/stream/stream.yml.hbs new file mode 100644 index 000000000000..df42afc3c097 --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/agent/stream/stream.yml.hbs @@ -0,0 +1,19 @@ +paths: +{{#each paths as |path|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/bbot/data_stream/asm_intel/elasticsearch/ingest_pipeline/default.yml b/packages/bbot/data_stream/asm_intel/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 000000000000..a047fcb7674b --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,170 @@ +--- +description: Pipeline for ingesting BBOT ndjson files. + +processors: +#################### +# Event ECS Fields # +#################### +- set: + field: ecs.version + value: 8.12.0 +- set: + field: event.kind + value: asset +- json: + field: message + target_field: bbot + tag: json_message +- date: + field: bbot.timestamp + formats: + - UNIX + if: ctx.bbot?.timestamp != null + ignore_failure: false +############## +# ECS Fields # +############## +- rename: + field: bbot.data.PROTOCOL.port + target_field: url.port + ignore_missing: true +- rename: + field: bbot.data.VULNERABILITY.severity + target_field: vulnerability.severity + ignore_missing: true +- rename: + field: bbot.data.DNS_NAME + target_field: host.name + ignore_missing: true +- rename: + field: bbot.resolved_hosts + target_field: related.hosts + ignore_missing: true +- append: + field: host.ip + value: '{{{bbot.data.IP_ADDRESS}}}' + if: ctx.bbot?.data?.IP_ADDRESS != null +- append: + field: url.full + value: '{{{bbot.data.URL}}}' + if: ctx.bbot?.data?.URL != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.FINDING.url}}}' + if: ctx.bbot?.data?.FINDING?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.SOCIAL.url}}}' + if: ctx.bbot?.data?.SOCIAL?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.STORAGE_BUCKET.url}}}' + if: ctx.bbot?.data?.STORAGE_BUCKET?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.TECHNOLOGY.url}}}' + if: ctx.bbot?.data?.TECHNOLOGY?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.VULNERABILITY.url}}}' + if: ctx.bbot?.data?.VULNERABILITY?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.WAF.url}}}' + if: ctx.bbot?.data?.WAF?.url != null + allow_duplicates: false +- append: + field: url.full + value: '{{{bbot.data.WEBSCREENSHOT.url}}}' + if: ctx.bbot?.data?.WEBSCREENSHOT?.url != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{bbot.data.FINDING.host}}}' + if: ctx.bbot?.data?.FINDING?.host != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{bbot.data.PROTOCOL.host}}}' + if: ctx.bbot?.data?.PROTOCOL?.host != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{bbot.data.TECHNOLOGY.host}}}' + if: ctx.bbot?.data?.TECHNOLOGY?.host != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{bbot.data.VULNERABILITY.host}}}' + if: ctx.bbot?.data?.VULNERABILITY?.host != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{bbot.data.WAF.host}}}' + if: ctx.bbot?.data?.WAF?.host != null + allow_duplicates: false +- append: + field: url.domain + value: '{{{host.name}}}' + if: ctx.host?.name != null + allow_duplicates: false +################# +# Custom Fields # +################# +- remove: + field: bbot.timestamp + ignore_missing: false + description: Drop bbot.timestamp as this is used in the @timestamp field +- remove: + field: bbot.data.IP_ADDRESS + ignore_missing: true + description: Drop bbot.data.IP_ADDRESS as this is used in the host.ip field +- foreach: + tag: data_event_lowercase + field: bbot.data + if: ctx.bbot?.data != null + ignore_missing: true + processor: + lowercase: + field: "_ingest._key" + ###################### + # Cleanup processors # + ###################### +- script: + description: Remove null/empty values recursively. + lang: painless + source: |- + boolean drop(Object o) { + if (o == null || o == '') { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); + tag: 'Remove null/empty values recursively.' + on_failure: + - append: + field: error.message + value: "fail-{{{ _ingest.on_failure_processor_tag }}}" + - fail: + message: 'Processor {{{ _ingest.on_failure_processor_type }}} with tag {{{ _ingest.on_failure_processor_tag }}} in pipeline {{{ _ingest.on_failure_pipeline }}} failed with message: {{{ _ingest.on_failure_message }}}' + +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: 'Processor {{{ _ingest.on_failure_processor_type }}} with tag {{{ _ingest.on_failure_processor_tag }}} in pipeline {{{ _ingest.on_failure_pipeline }}} failed with message: {{{ _ingest.on_failure_message }}}' diff --git a/packages/bbot/data_stream/asm_intel/fields/base-fields.yml b/packages/bbot/data_stream/asm_intel/fields/base-fields.yml new file mode 100644 index 000000000000..7c798f4534ca --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/bbot/data_stream/asm_intel/fields/beats.yml b/packages/bbot/data_stream/asm_intel/fields/beats.yml new file mode 100644 index 000000000000..3415608ae37e --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/fields/beats.yml @@ -0,0 +1,9 @@ +- name: input.type + description: Type of Filebeat input. + type: keyword +- name: tags + type: keyword + description: User defined tags. +- name: log.offset + type: long + description: Log offset. diff --git a/packages/bbot/data_stream/asm_intel/fields/ecs.yml b/packages/bbot/data_stream/asm_intel/fields/ecs.yml new file mode 100644 index 000000000000..5f506ad1f66b --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/fields/ecs.yml @@ -0,0 +1,16 @@ +- external: ecs + name: ecs.version +- external: ecs + name: event.kind +- external: ecs + name: message +- external: ecs + name: event.original +- external: ecs + name: host.ip +- external: ecs + name: url.port +- external: ecs + name: vulnerability.severity +- external: ecs + name: url.full diff --git a/packages/bbot/data_stream/asm_intel/fields/fields.yml b/packages/bbot/data_stream/asm_intel/fields/fields.yml new file mode 100644 index 000000000000..3e0a5ae571de --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/fields/fields.yml @@ -0,0 +1,244 @@ +- name: bbot + type: group + fields: + - name: data.dns_name + type: keyword + description: > + DNS name found. + + - name: data.email_address + type: keyword + description: > + Email address found. + + - name: data.finding.description + type: keyword + description: > + Description of the finding. + + - name: data.finding.host + type: keyword + description: > + Host finding was discovered on. + + - name: data.finding.url + type: keyword + description: > + URL finding was discovered on. + + - name: data.social.platform + type: keyword + description: > + Social platform discovered. + + - name: data.storage_bucket.name + type: keyword + description: > + Name of the storage bucket. + + - name: data.storage_bucket.url + type: keyword + description: > + URL of the storage bucket. + + - name: data.code_repository.url + type: keyword + description: > + URL of the code repository. + + - name: data.social.profile_name + type: keyword + description: > + Social platform username. + + - name: data.social.url + type: keyword + description: > + URL of the social finding. + + - name: data.technology.host + type: keyword + description: > + Host where technology was discovered. + + - name: data.technology.technology + type: keyword + description: > + Technology that was discovered. + + - name: data.technology.url + type: keyword + description: > + URL of the discovered technology. + + - name: data.vulnerability.description + type: keyword + description: > + Description of the vulnerabiltiy. + + - name: data.vulnerability.host + type: keyword + description: > + Host vulnerability was discovered on. + + - name: data.vulnerability.url + type: keyword + description: > + URL of the vulnerability. + + - name: data.webscreenshot.filename + type: keyword + description: > + Name of the webscreenshot file. + + - name: data.webscreenshot.url + type: keyword + description: > + URL of the webscreenshot. + + - name: data.scan + type: keyword + description: > + Name of the scan. + + - name: id + type: keyword + description: > + Unique id for each finding. + + - name: module + type: keyword + description: > + Module that discovered the finding. + + - name: module_sequence + type: keyword + description: > + Module sequence that discovered the finding. + + - name: resolved_hosts + type: keyword + description: > + Large list of hosts discovered per finding, this field can hold numerous values. + + - name: scan + type: keyword + description: > + Scan document, this finding is it's own document and contains data about the scan. + + - name: scope_distance + type: integer + description: > + Scope distance of the scan. this is set at runtime of bbot. + + - name: source + type: keyword + + - name: tags + type: keyword + + - name: timestamp + type: date + + - name: type + type: keyword + + - name: web_spider_distance + type: integer + description: > + How far the web spider crawled to discover the finding. + + - name: data.asn.asn + type: keyword + description: > + Autonomous system number. + + - name: data.asn.country + type: keyword + description: > + ASN country. + + - name: data.asn.description + type: keyword + description: > + Description of the asn. + + - name: data.asn.name + type: keyword + description: > + Name discovered for the asn. + + - name: data.asn.subnet + type: keyword + description: > + Subnet discovered for the asn. + + - name: data.azure_tenant.domains + type: keyword + description: > + Domain of the azure tenant. + + - name: data.azure_tenant.tenant-names + type: keyword + description: > + Associated names of the azure tenants discovered. + + - name: data.azure_tenant.tenant-id + type: keyword + description: > + ID of the azure tenant. + + - name: data.protocol.banner + type: keyword + description: > + Banner related findings. + + - name: data.protocol.host + type: keyword + description: > + Host related to protocol. + + - name: data.protocol.port + type: integer + description: > + Port of the protocol. + + - name: data.protocol.protocol + type: keyword + description: > + The protocol. + + - name: data.org_stub + type: keyword + description: > + The org stub. + + - name: data.open_tcp_port + type: keyword + description: > + Open tcp port discovered. + + - name: data.waf.host + type: keyword + description: > + Host of the WAF. + + - name: data.waf.info + type: keyword + description: > + WAF information. + + - name: data.waf.url + type: keyword + description: > + URL of the WAF. + + - name: data.waf.waf + type: keyword + description: > + WAF data. + + - name: data.url + type: keyword + description: > + URL of the data finding. diff --git a/packages/bbot/data_stream/asm_intel/manifest.yml b/packages/bbot/data_stream/asm_intel/manifest.yml new file mode 100644 index 000000000000..d4cc6c3c518a --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/manifest.yml @@ -0,0 +1,24 @@ +title: "BBOT-Data-Ingest" +type: logs +streams: + - input: logfile + title: BBOT Output + description: Collect BBOT NDJSON + vars: + - name: paths + type: text + title: Path to ndjson output file + multi: true + required: true + show_user: true + default: + - /path/to/bbot/ndjson/file + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: true + default: + - forwarded + - bbot diff --git a/packages/bbot/data_stream/asm_intel/sample_event.json b/packages/bbot/data_stream/asm_intel/sample_event.json new file mode 100644 index 000000000000..f1a0bd9fb3b6 --- /dev/null +++ b/packages/bbot/data_stream/asm_intel/sample_event.json @@ -0,0 +1,72 @@ +{ + "@timestamp": "2024-02-29T01:41:47.779Z", + "agent": { + "ephemeral_id": "8ff8221f-4846-4f02-b12b-773332430bab", + "id": "bcb4b946-41b8-4916-9308-849b3bf23f46", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.2" + }, + "bbot": { + "id": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", + "module": "TARGET", + "module_sequence": "TARGET", + "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", + "scope_distance": 0, + "source": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", + "tags": [ + "resolved", + "a-record", + "target", + "in-scope", + "subdomain" + ], + "type": "DNS_NAME" + }, + "data_stream": { + "dataset": "bbot.asm_intel", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.12.0" + }, + "elastic_agent": { + "id": "bcb4b946-41b8-4916-9308-849b3bf23f46", + "snapshot": false, + "version": "8.12.2" + }, + "event": { + "agent_id_status": "verified", + "dataset": "bbot.asm_intel", + "ingested": "2024-04-22T19:10:49Z", + "kind": "asset" + }, + "host": { + "name": "example.com" + }, + "input": { + "type": "log" + }, + "log": { + "file": { + "path": "/tmp/service_logs/log.log" + }, + "offset": 398 + }, + "message": "{\"type\": \"DNS_NAME\", \"id\": \"DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d\", \"data\": {\"DNS_NAME\": \"example.com\"}, \"scope_distance\": 0, \"scan\": \"SCAN:725368977d3a680e579707504e59428a7e3acc9d\", \"timestamp\": 1709170907.779394, \"resolved_hosts\": [\"123.123.123.123\"], \"source\": \"SCAN:725368977d3a680e579707504e59428a7e3acc9d\", \"tags\": [\"resolved\", \"a-record\", \"target\", \"in-scope\", \"subdomain\"], \"module\": \"TARGET\", \"module_sequence\": \"TARGET\"}", + "related": { + "hosts": [ + "123.123.123.123" + ] + }, + "tags": [ + "forwarded", + "bbot" + ], + "url": { + "domain": [ + "example.com" + ] + } +} \ No newline at end of file diff --git a/packages/bbot/docs/README.md b/packages/bbot/docs/README.md new file mode 100644 index 000000000000..850520ca77bf --- /dev/null +++ b/packages/bbot/docs/README.md @@ -0,0 +1,182 @@ +# BBOT integration + +Please read this page in its entirety as this integration requires some setup. + +This integration is for [BBOT](https://www.blacklanternsecurity.com/bbot/), an Attack Surface Management (ASM) Open Source Inteligence (OSINT) Tool. BBOT itself stands for Bighuge BLS OSINT Tool (BBOT). + +This integration requires the external use of BBOT. You will have to download and run the tool apart from this integration. Once your scan is complete, this integration will ingest the results into Elastic. + +This tool is used to enhance your external knowledge of your environment. This is done through the integration of many tools into BBOT providing a overview of your attack surface. Here is [how it works](https://www.blacklanternsecurity.com/bbot/how_it_works/). + +**Important Note** - You will have to provide the following parameter in your BBOT scan for your output.ndjson to be formatted correctly. +``` +-c output_modules.json.siem_friendly=true +``` +**Example BBOT Scan** +``` +bbot -t elastic.co --strict-scope -f safe passive -c output_modules.json.siem_friendly=true -om json +``` + +You will have to configure the path for the output file within the integration settings. A common and popular path that could work here is: + +**Example BBOT Path** +``` +/home//.bbot/scans/*/output.ndjson +``` + +BBOT Scanning [Documentation](https://www.blacklanternsecurity.com/bbot/scanning/). + +- `bbot` dataset: Made up of the findings found in the BBOT Scans. + +## Logs + +### ASM Findings + +An example event for `asm_intel` looks as following: + +```json +{ + "@timestamp": "2024-02-29T01:41:47.779Z", + "agent": { + "ephemeral_id": "8ff8221f-4846-4f02-b12b-773332430bab", + "id": "bcb4b946-41b8-4916-9308-849b3bf23f46", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.12.2" + }, + "bbot": { + "id": "DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d", + "module": "TARGET", + "module_sequence": "TARGET", + "scan": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", + "scope_distance": 0, + "source": "SCAN:725368977d3a680e579707504e59428a7e3acc9d", + "tags": [ + "resolved", + "a-record", + "target", + "in-scope", + "subdomain" + ], + "type": "DNS_NAME" + }, + "data_stream": { + "dataset": "bbot.asm_intel", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.12.0" + }, + "elastic_agent": { + "id": "bcb4b946-41b8-4916-9308-849b3bf23f46", + "snapshot": false, + "version": "8.12.2" + }, + "event": { + "agent_id_status": "verified", + "dataset": "bbot.asm_intel", + "ingested": "2024-04-22T19:10:49Z", + "kind": "asset" + }, + "host": { + "name": "example.com" + }, + "input": { + "type": "log" + }, + "log": { + "file": { + "path": "/tmp/service_logs/log.log" + }, + "offset": 398 + }, + "message": "{\"type\": \"DNS_NAME\", \"id\": \"DNS_NAME:f57ba0828becd7bf94faa616db081ed06f31bd3d\", \"data\": {\"DNS_NAME\": \"example.com\"}, \"scope_distance\": 0, \"scan\": \"SCAN:725368977d3a680e579707504e59428a7e3acc9d\", \"timestamp\": 1709170907.779394, \"resolved_hosts\": [\"123.123.123.123\"], \"source\": \"SCAN:725368977d3a680e579707504e59428a7e3acc9d\", \"tags\": [\"resolved\", \"a-record\", \"target\", \"in-scope\", \"subdomain\"], \"module\": \"TARGET\", \"module_sequence\": \"TARGET\"}", + "related": { + "hosts": [ + "123.123.123.123" + ] + }, + "tags": [ + "forwarded", + "bbot" + ], + "url": { + "domain": [ + "example.com" + ] + } +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| bbot.data.asn.asn | Autonomous system number. | keyword | +| bbot.data.asn.country | ASN country. | keyword | +| bbot.data.asn.description | Description of the asn. | keyword | +| bbot.data.asn.name | Name discovered for the asn. | keyword | +| bbot.data.asn.subnet | Subnet discovered for the asn. | keyword | +| bbot.data.azure_tenant.domains | Domain of the azure tenant. | keyword | +| bbot.data.azure_tenant.tenant-id | ID of the azure tenant. | keyword | +| bbot.data.azure_tenant.tenant-names | Associated names of the azure tenants discovered. | keyword | +| bbot.data.code_repository.url | URL of the code repository. | keyword | +| bbot.data.dns_name | DNS name found. | keyword | +| bbot.data.email_address | Email address found. | keyword | +| bbot.data.finding.description | Description of the finding. | keyword | +| bbot.data.finding.host | Host finding was discovered on. | keyword | +| bbot.data.finding.url | URL finding was discovered on. | keyword | +| bbot.data.open_tcp_port | Open tcp port discovered. | keyword | +| bbot.data.org_stub | The org stub. | keyword | +| bbot.data.protocol.banner | Banner related findings. | keyword | +| bbot.data.protocol.host | Host related to protocol. | keyword | +| bbot.data.protocol.port | Port of the protocol. | integer | +| bbot.data.protocol.protocol | The protocol. | keyword | +| bbot.data.scan | Name of the scan. | keyword | +| bbot.data.social.platform | Social platform discovered. | keyword | +| bbot.data.social.profile_name | Social platform username. | keyword | +| bbot.data.social.url | URL of the social finding. | keyword | +| bbot.data.storage_bucket.name | Name of the storage bucket. | keyword | +| bbot.data.storage_bucket.url | URL of the storage bucket. | keyword | +| bbot.data.technology.host | Host where technology was discovered. | keyword | +| bbot.data.technology.technology | Technology that was discovered. | keyword | +| bbot.data.technology.url | URL of the discovered technology. | keyword | +| bbot.data.url | URL of the data finding. | keyword | +| bbot.data.vulnerability.description | Description of the vulnerabiltiy. | keyword | +| bbot.data.vulnerability.host | Host vulnerability was discovered on. | keyword | +| bbot.data.vulnerability.url | URL of the vulnerability. | keyword | +| bbot.data.waf.host | Host of the WAF. | keyword | +| bbot.data.waf.info | WAF information. | keyword | +| bbot.data.waf.url | URL of the WAF. | keyword | +| bbot.data.waf.waf | WAF data. | keyword | +| bbot.data.webscreenshot.filename | Name of the webscreenshot file. | keyword | +| bbot.data.webscreenshot.url | URL of the webscreenshot. | keyword | +| bbot.id | Unique id for each finding. | keyword | +| bbot.module | Module that discovered the finding. | keyword | +| bbot.module_sequence | Module sequence that discovered the finding. | keyword | +| bbot.resolved_hosts | Large list of hosts discovered per finding, this field can hold numerous values. | keyword | +| bbot.scan | Scan document, this finding is it's own document and contains data about the scan. | keyword | +| bbot.scope_distance | Scope distance of the scan. this is set at runtime of bbot. | integer | +| bbot.source | | keyword | +| bbot.tags | | keyword | +| bbot.timestamp | | date | +| bbot.type | | keyword | +| bbot.web_spider_distance | How far the web spider crawled to discover the finding. | integer | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data is coming in at a regular interval or not. | keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| host.ip | Host ip addresses. | ip | +| input.type | Type of Filebeat input. | keyword | +| log.offset | Log offset. | long | +| message | For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message. | match_only_text | +| tags | User defined tags. | keyword | +| url.full | If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. | wildcard | +| url.full.text | Multi-field of `url.full`. | match_only_text | +| url.port | Port of the request, such as 443. | long | +| vulnerability.severity | The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss) | keyword | + diff --git a/packages/bbot/img/BBOT-Dashboard.png b/packages/bbot/img/BBOT-Dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a06e733283d7768e6c4a24858597d0917e20a6 GIT binary patch literal 484528 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 z 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

J(mkDj0A)mC4oN^qE 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 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/bbot/kibana/dashboard/bbot-8abcb381-42b3-4d99-a177-c103255eedd9.json b/packages/bbot/kibana/dashboard/bbot-8abcb381-42b3-4d99-a177-c103255eedd9.json new file mode 100644 index 000000000000..4b3687947445 --- /dev/null +++ b/packages/bbot/kibana/dashboard/bbot-8abcb381-42b3-4d99-a177-c103255eedd9.json @@ -0,0 +1,1265 @@ +{ + "attributes": { + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"7b900e62-ba4a-468b-a99f-aa5bf4a3a526\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"7b900e62-ba4a-468b-a99f-aa5bf4a3a526\",\"fieldName\":\"bbot.scan\",\"title\":\"Scan ID:\",\"grow\":true,\"width\":\"medium\",\"selectedOptions\":[],\"enhancements\":{}}}}" + }, + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-b041b892-4b58-48f3-9f5e-52e0e604cfb0", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "2604eb17-0109-4f38-993e-ed797031d791", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "b041b892-4b58-48f3-9f5e-52e0e604cfb0": { + "columnOrder": [ + "b77c2eee-54f7-4fa0-9aa6-936d9064ff4f", + "436a5f51-90a1-4193-b109-25b90ab29fb0" + ], + "columns": { + "436a5f51-90a1-4193-b109-25b90ab29fb0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "b77c2eee-54f7-4fa0-9aa6-936d9064ff4f": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Date of scan", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "1w" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "incompleteColumns": {} + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "2604eb17-0109-4f38-993e-ed797031d791", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "436a5f51-90a1-4193-b109-25b90ab29fb0" + ], + "layerId": "b041b892-4b58-48f3-9f5e-52e0e604cfb0", + "layerType": "data", + "seriesType": "bar", + "xAccessor": "b77c2eee-54f7-4fa0-9aa6-936d9064ff4f", + "yConfig": [ + { + "color": "#e7664c", + "forAccessor": "436a5f51-90a1-4193-b109-25b90ab29fb0" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "right", + "showSingleSeries": false + }, + "preferredSeriesType": "bar", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "show" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false, + "timeRange": { + "from": "now-2y", + "to": "now" + } + }, + "gridData": { + "h": 6, + "i": "ff18251e-b13b-42f6-8a10-6a6e61e2e74a", + "w": 48, + "x": 0, + "y": 0 + }, + "panelIndex": "ff18251e-b13b-42f6-8a10-6a6e61e2e74a", + "title": "Scans over time", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "This is a count of all url.domains found. There is some overlap between this field and the host.name field.", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "d7a416f6-fbb4-4477-8760-363e18f9554c", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "34706177-15e3-422e-942e-450494312e3f": { + "columnOrder": [ + "8847f861-0519-4914-b269-405389c0df68" + ], + "columns": { + "8847f861-0519-4914-b269-405389c0df68": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Unique Records of Domain", + "operationType": "unique_count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "url.domain" + } + }, + "incompleteColumns": {} + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "d7a416f6-fbb4-4477-8760-363e18f9554c", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#E7664C", + "layerId": "34706177-15e3-422e-942e-450494312e3f", + "layerType": "data", + "metricAccessor": "8847f861-0519-4914-b269-405389c0df68" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "This is a count of all url.domains found. There is some overlap between this field and the host.name field.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 5, + "i": "e2b473cb-83a3-43b9-9845-01a865ebba81", + "w": 15, + "x": 0, + "y": 6 + }, + "panelIndex": "e2b473cb-83a3-43b9-9845-01a865ebba81", + "title": "Unique Domains Found ", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "This is a count of all related.hosts found. This field contains IPv4, IPv6 and Domain Names. ", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ceb45dbd-8837-4fae-884c-5eef1f068cd9", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "34706177-15e3-422e-942e-450494312e3f": { + "columnOrder": [ + "8847f861-0519-4914-b269-405389c0df68" + ], + "columns": { + "8847f861-0519-4914-b269-405389c0df68": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Records Found for Related Hosts", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "related.hosts" + } + }, + "incompleteColumns": {} + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "ceb45dbd-8837-4fae-884c-5eef1f068cd9", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#E7664C", + "layerId": "34706177-15e3-422e-942e-450494312e3f", + "layerType": "data", + "metricAccessor": "8847f861-0519-4914-b269-405389c0df68" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "This is a count of all related.hosts found. This field contains IPv4, IPv6 and Domain Names. ", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 5, + "i": "8d154799-5342-4d9f-931a-8ac541b10235", + "w": 15, + "x": 15, + "y": 6 + }, + "panelIndex": "8d154799-5342-4d9f-931a-8ac541b10235", + "title": "Related Hosts Found - Count of Records", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-9236266e-4c6d-4cb0-8d5c-49493bf23532", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "52db8b89-498c-4aa2-ba42-d65b2025598f", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "9236266e-4c6d-4cb0-8d5c-49493bf23532": { + "columnOrder": [ + "0896481f-8b3d-45f6-bb23-665ece65f846", + "8be8fd12-8e1b-45d8-93e5-3903ae887fc8" + ], + "columns": { + "0896481f-8b3d-45f6-bb23-665ece65f846": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Module", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "8be8fd12-8e1b-45d8-93e5-3903ae887fc8", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "bbot.module" + }, + "8be8fd12-8e1b-45d8-93e5-3903ae887fc8": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "52db8b89-498c-4aa2-ba42-d65b2025598f", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "8be8fd12-8e1b-45d8-93e5-3903ae887fc8" + ], + "layerId": "9236266e-4c6d-4cb0-8d5c-49493bf23532", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "0896481f-8b3d-45f6-bb23-665ece65f846", + "yConfig": [ + { + "color": "#e7664c", + "forAccessor": "8be8fd12-8e1b-45d8-93e5-3903ae887fc8" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "right" + }, + "preferredSeriesType": "bar_horizontal", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 21, + "i": "fd6001b7-89f1-4008-b56e-9fee8d3111b1", + "w": 18, + "x": 30, + "y": 6 + }, + "panelIndex": "fd6001b7-89f1-4008-b56e-9fee8d3111b1", + "title": "Popular Module Findings", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "1877a3bb-aa1f-420e-ad3b-b82ad23d1f0a", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "934f50cd-f1e9-47ea-be3a-3ceff354f1ad": { + "columnOrder": [ + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621", + "f4935493-86bc-4383-b231-651c7b375e59" + ], + "columns": { + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621": { + "dataType": "string", + "isBucketed": true, + "label": "Top 5 values of url.domain", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "f4935493-86bc-4383-b231-651c7b375e59", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 5 + }, + "scale": "ordinal", + "sourceField": "url.domain" + }, + "f4935493-86bc-4383-b231-651c7b375e59": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "1877a3bb-aa1f-420e-ad3b-b82ad23d1f0a", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "emptySizeRatio": 0.54, + "layerId": "934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "layerType": "data", + "legendDisplay": "default", + "metrics": [ + "f4935493-86bc-4383-b231-651c7b375e59" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621" + ] + } + ], + "palette": { + "name": "negative", + "type": "palette" + }, + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 16, + "i": "ec50cd13-16ea-463b-8677-d6fc126fcaf8", + "w": 15, + "x": 0, + "y": 11 + }, + "panelIndex": "ec50cd13-16ea-463b-8677-d6fc126fcaf8", + "title": "Top 5 Domain Records", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e6909ac9-f732-4420-a24d-69ffc4fe319c", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "934f50cd-f1e9-47ea-be3a-3ceff354f1ad": { + "columnOrder": [ + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621", + "f4935493-86bc-4383-b231-651c7b375e59" + ], + "columns": { + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621": { + "dataType": "string", + "isBucketed": true, + "label": "Top 5 values of related.hosts", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "f4935493-86bc-4383-b231-651c7b375e59", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": false, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "related.hosts" + }, + "f4935493-86bc-4383-b231-651c7b375e59": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + } + }, + "incompleteColumns": {}, + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "e6909ac9-f732-4420-a24d-69ffc4fe319c", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "categoryDisplay": "default", + "emptySizeRatio": 0.54, + "layerId": "934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "layerType": "data", + "legendDisplay": "default", + "metrics": [ + "f4935493-86bc-4383-b231-651c7b375e59" + ], + "nestedLegend": false, + "numberDisplay": "percent", + "primaryGroups": [ + "eebfb3a7-f1b5-4ca3-97e0-95eb896f8621" + ] + } + ], + "palette": { + "name": "negative", + "type": "palette" + }, + "shape": "donut" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsPie" + }, + "description": "", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 16, + "i": "b7513787-adcc-4e88-8211-42e9c559f09c", + "w": 15, + "x": 15, + "y": 11 + }, + "panelIndex": "b7513787-adcc-4e88-8211-42e9c559f09c", + "title": "Top 5 Related Hosts Found", + "type": "lens" + }, + { + "embeddableConfig": { + "enhancements": {} + }, + "gridData": { + "h": 21, + "i": "81963b3c-596f-4008-80de-286537f0c45d", + "w": 30, + "x": 0, + "y": 27 + }, + "panelIndex": "81963b3c-596f-4008-80de-286537f0c45d", + "panelRefName": "panel_81963b3c-596f-4008-80de-286537f0c45d", + "type": "search" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "f6dc81d5-5b2a-40b4-b17a-2b8034ac3bb0", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "34706177-15e3-422e-942e-450494312e3f": { + "columnOrder": [ + "8847f861-0519-4914-b269-405389c0df68" + ], + "columns": { + "8847f861-0519-4914-b269-405389c0df68": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "vulnerability.severity : * " + }, + "isBucketed": false, + "label": "Hosts found with Vulnerabilities", + "operationType": "unique_count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "url.domain" + } + }, + "incompleteColumns": {} + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "f6dc81d5-5b2a-40b4-b17a-2b8034ac3bb0", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#ffffff", + "layerId": "34706177-15e3-422e-942e-450494312e3f", + "layerType": "data", + "metricAccessor": "8847f861-0519-4914-b269-405389c0df68" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 6, + "i": "17ab65a3-eb4a-47df-8e8c-91c8ca504c67", + "w": 18, + "x": 30, + "y": 27 + }, + "panelIndex": "17ab65a3-eb4a-47df-8e8c-91c8ca504c67", + "title": "Vulnerable Hosts", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "34e57322-6c1b-479e-95aa-318340186b2f", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "34706177-15e3-422e-942e-450494312e3f": { + "columnOrder": [ + "2170eae6-6ab4-4fce-ac60-fbbd4301da66", + "b6a09dd7-f423-43e6-8068-db01ebfa9855" + ], + "columns": { + "2170eae6-6ab4-4fce-ac60-fbbd4301da66": { + "dataType": "string", + "isBucketed": true, + "label": "Top 5 values of vulnerability.severity", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderAgg": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "___records___" + }, + "orderBy": { + "type": "custom" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "vulnerability.severity" + }, + "b6a09dd7-f423-43e6-8068-db01ebfa9855": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Severity Percentage", + "operationType": "count", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "vulnerability.severity" + } + }, + "incompleteColumns": {} + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "34e57322-6c1b-479e-95aa-318340186b2f", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "b6a09dd7-f423-43e6-8068-db01ebfa9855" + ], + "layerId": "34706177-15e3-422e-942e-450494312e3f", + "layerType": "data", + "palette": { + "name": "negative", + "type": "palette" + }, + "seriesType": "bar_percentage_stacked", + "splitAccessor": "2170eae6-6ab4-4fce-ac60-fbbd4301da66" + } + ], + "legend": { + "isVisible": true, + "position": "right" + }, + "preferredSeriesType": "bar_percentage_stacked", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "show" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 15, + "i": "a45187ab-0e94-44ba-b3bd-12f7a06c623e", + "w": 18, + "x": 30, + "y": 33 + }, + "panelIndex": "a45187ab-0e94-44ba-b3bd-12f7a06c623e", + "title": "Vulnerability Severity", + "type": "lens" + } + ], + "timeRestore": false, + "title": "BBOT Dashboard", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-21T19:29:20.744Z", + "id": "bbot-8abcb381-42b3-4d99-a177-c103255eedd9", + "managed": false, + "references": [ + { + "id": "logs-*", + "name": "ff18251e-b13b-42f6-8a10-6a6e61e2e74a:indexpattern-datasource-layer-b041b892-4b58-48f3-9f5e-52e0e604cfb0", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ff18251e-b13b-42f6-8a10-6a6e61e2e74a:2604eb17-0109-4f38-993e-ed797031d791", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e2b473cb-83a3-43b9-9845-01a865ebba81:indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "e2b473cb-83a3-43b9-9845-01a865ebba81:d7a416f6-fbb4-4477-8760-363e18f9554c", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8d154799-5342-4d9f-931a-8ac541b10235:indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8d154799-5342-4d9f-931a-8ac541b10235:ceb45dbd-8837-4fae-884c-5eef1f068cd9", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fd6001b7-89f1-4008-b56e-9fee8d3111b1:indexpattern-datasource-layer-9236266e-4c6d-4cb0-8d5c-49493bf23532", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "fd6001b7-89f1-4008-b56e-9fee8d3111b1:52db8b89-498c-4aa2-ba42-d65b2025598f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ec50cd13-16ea-463b-8677-d6fc126fcaf8:indexpattern-datasource-layer-934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "ec50cd13-16ea-463b-8677-d6fc126fcaf8:1877a3bb-aa1f-420e-ad3b-b82ad23d1f0a", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b7513787-adcc-4e88-8211-42e9c559f09c:indexpattern-datasource-layer-934f50cd-f1e9-47ea-be3a-3ceff354f1ad", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "b7513787-adcc-4e88-8211-42e9c559f09c:e6909ac9-f732-4420-a24d-69ffc4fe319c", + "type": "index-pattern" + }, + { + "id": "bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274", + "name": "81963b3c-596f-4008-80de-286537f0c45d:panel_81963b3c-596f-4008-80de-286537f0c45d", + "type": "search" + }, + { + "id": "logs-*", + "name": "17ab65a3-eb4a-47df-8e8c-91c8ca504c67:indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "17ab65a3-eb4a-47df-8e8c-91c8ca504c67:f6dc81d5-5b2a-40b4-b17a-2b8034ac3bb0", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a45187ab-0e94-44ba-b3bd-12f7a06c623e:indexpattern-datasource-layer-34706177-15e3-422e-942e-450494312e3f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "a45187ab-0e94-44ba-b3bd-12f7a06c623e:34e57322-6c1b-479e-95aa-318340186b2f", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_7b900e62-ba4a-468b-a99f-aa5bf4a3a526:optionsListDataView", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "8.9.0" +} \ No newline at end of file diff --git a/packages/bbot/kibana/search/bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274.json b/packages/bbot/kibana/search/bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274.json new file mode 100644 index 000000000000..1298c05cb0a3 --- /dev/null +++ b/packages/bbot/kibana/search/bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274.json @@ -0,0 +1,109 @@ +{ + "attributes": { + "columns": [ + "url.domain", + "url.full", + "host.name", + "related.hosts", + "bbot.tags", + "bbot.module" + ], + "description": "This is used with the official BBOT dashboard.", + "grid": { + "columns": { + "@timestamp": { + "width": 303 + }, + "bbot.data.ASN.asn": { + "width": 268 + }, + "bbot.module": { + "width": 135 + }, + "bbot.tags": { + "width": 177 + }, + "host.ip": { + "width": 352 + }, + "host.name": { + "width": 201 + }, + "related.hosts": { + "width": 175 + }, + "url.domain": { + "width": 235 + }, + "url.full": { + "width": 350 + }, + "url.port": { + "width": 147 + } + } + }, + "hideChart": false, + "isTextBasedQuery": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "event.dataset", + "negate": false, + "params": { + "query": "bbot.asm_intel" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "event.dataset": "bbot.asm_intel" + } + } + } + ], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "" + } + } + }, + "rowsPerPage": 50, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "timeRestore": false, + "title": "[BBOT] Detailed Findings", + "usesAdHocDataView": false + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-03-21T19:17:35.011Z", + "id": "bbot-45ce1599-99e3-4c4e-9c1a-07254be0e274", + "managed": false, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + } + ], + "type": "search", + "typeMigrationVersion": "8.0.0" +} \ No newline at end of file diff --git a/packages/bbot/manifest.yml b/packages/bbot/manifest.yml new file mode 100644 index 000000000000..6553f20da81c --- /dev/null +++ b/packages/bbot/manifest.yml @@ -0,0 +1,43 @@ +format_version: 3.1.2 +name: bbot +title: "BBOT (Bighuge BLS OSINT Tool)" +version: 0.1.0 +description: "BBOT is a recursive internet scanner inspired by Spiderfoot, but designed to be faster, more reliable, and friendlier to pentesters, bug bounty hunters, and developers. " +type: integration +categories: + - security +conditions: + kibana: + version: "^8.12.1" + elastic: + subscription: "basic" +screenshots: + - src: /img/BBOT-Dashboard.png + title: BBOT Screenshot + size: 600x600 + type: image/png +icons: + - src: /img/BlackLantern-LOGO.svg + title: BBOT Logo + size: 32x32 + type: image/svg+xml +policy_templates: + - name: BBOT Logs + title: BBOT Scan Data + description: Collect BBOT output.ndjson + inputs: + - type: logfile + title: Collect BBOT Logs + description: Collecting BBOT Output Log Files +owner: + github: elastic/security-service-integrations + type: community +vars: + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false diff --git a/packages/bbot/validation.yml b/packages/bbot/validation.yml new file mode 100644 index 000000000000..7bd3c3fb2aad --- /dev/null +++ b/packages/bbot/validation.yml @@ -0,0 +1,3 @@ +errors: + exclude_checks: + - SVR00004 # Added search to dashboard. diff --git a/packages/crowdstrike/changelog.yml b/packages/crowdstrike/changelog.yml index 525898a80b09..f1bf45a5eada 100644 --- a/packages/crowdstrike/changelog.yml +++ b/packages/crowdstrike/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.32.2" + changes: + - description: Fix geoip mapping to destination. + type: bugfix + link: https://github.com/elastic/integrations/pull/9738 - version: "1.32.1" changes: - description: Fix cache option name in FDR data stream. diff --git a/packages/crowdstrike/data_stream/falcon/elasticsearch/ingest_pipeline/default.yml b/packages/crowdstrike/data_stream/falcon/elasticsearch/ingest_pipeline/default.yml index 9957d1b2728b..5fca7f20fadb 100644 --- a/packages/crowdstrike/data_stream/falcon/elasticsearch/ingest_pipeline/default.yml +++ b/packages/crowdstrike/data_stream/falcon/elasticsearch/ingest_pipeline/default.yml @@ -323,7 +323,7 @@ processors: - geoip: database_file: GeoLite2-ASN.mmdb field: destination.ip - target_field: source.as + target_field: destination.as properties: - asn - organization_name diff --git a/packages/crowdstrike/manifest.yml b/packages/crowdstrike/manifest.yml index d7aac1271b34..563505fe1928 100644 --- a/packages/crowdstrike/manifest.yml +++ b/packages/crowdstrike/manifest.yml @@ -1,6 +1,6 @@ name: crowdstrike title: CrowdStrike -version: "1.32.1" +version: "1.32.2" description: Collect logs from Crowdstrike with Elastic Agent. type: integration format_version: "3.0.0" diff --git a/packages/entityanalytics_ad/_dev/build/build.yml b/packages/entityanalytics_ad/_dev/build/build.yml new file mode 100644 index 000000000000..71f48ba2a9c8 --- /dev/null +++ b/packages/entityanalytics_ad/_dev/build/build.yml @@ -0,0 +1,4 @@ +dependencies: + ecs: + reference: "git@v8.11.0" + import_mappings: true diff --git a/packages/entityanalytics_ad/_dev/build/docs/README.md b/packages/entityanalytics_ad/_dev/build/docs/README.md new file mode 100644 index 000000000000..bb24074d704c --- /dev/null +++ b/packages/entityanalytics_ad/_dev/build/docs/README.md @@ -0,0 +1,69 @@ +# Active Directory Entity Analytics + +This Active Directory Entity Analytics integration allows users to securely stream User Entities data to Elastic Security via the Active Directory LDAP look-ups. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. + +## Data streams + +The Active Directory Entity Analytics integration collects one type of data: user. + +**User** is used to retrieve all user entries available from an Active Directory server. + +## Requirements + +- Elastic Agent must be installed. +- You can install only one Elastic Agent per host. +- Elastic Agent is required to stream data using Entity Analytics Input and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. + +### Installing and managing an Elastic Agent: + +You have a few options for installing and managing an Elastic Agent: + +### Install a Fleet-managed Elastic Agent (recommended): + +With this approach, you install Elastic Agent and use Fleet in Kibana to define, configure, and manage your agents in a central location. We recommend using Fleet management because it makes the management and upgrade of your agents considerably easier. + +### Install Elastic Agent in standalone mode (advanced users): + +With this approach, you install Elastic Agent and manually configure the agent locally on the system where it’s installed. You are responsible for managing and upgrading the agents. This approach is reserved for advanced users only. + +### Install Elastic Agent in a containerized environment: + +You can run Elastic Agent inside a container, either with Fleet Server or standalone. Docker images for all versions of Elastic Agent are available from the Elastic Docker registry, and we provide deployment manifests for running on Kubernetes. + +There are some minimum requirements for running Elastic Agent and for more information, refer to the link [here](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). + +The minimum **kibana.version** required is **8.14.0**. + +## Setup + +### To collect data from Active Directory, follow the below steps: + +- Obtain the LDAP username, e.g. `CN=Administrator,CN=Users,DC=testserver,DC=local` and password, and LDAP host address for the Active Directory server that you will be collecting data from. +- Determine the Base DN for the directory to be used, e.g. `CN=Users,DC=testserver,DC=local`. + +### Enabling the integration in Elastic: + +1. In Kibana, go to Management > Integrations. +2. In the "Search for integrations" search bar, type Active Directory Entity Analytics. +3. Click on the "Active Directory Entity Analytics" integration from the search results. +4. Click on the Add Active Directory Entity Analytics Integration button to add the integration. +5. While adding the integration, add the user, host and base DN details obtained above. +6. Save the integration by adding other necessary parameters. + +## Usage + +The Active Directory provider periodically contacts the server, retrieving updates for users, updates its internal cache of user metadata, and ships updated user metadata to Elasticsearch. + +Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users during that event. Changes on a user can come in many forms, whether it be a change to the user’s metadata, or a user was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. + +## Logs reference + +### User + +This is the `User` dataset. + +#### Example + +{{event "user"}} + +{{fields "user"}} diff --git a/packages/entityanalytics_ad/changelog.yml b/packages/entityanalytics_ad/changelog.yml new file mode 100644 index 000000000000..e67c14252ebf --- /dev/null +++ b/packages/entityanalytics_ad/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.0.1" + changes: + - description: Initial Release. + type: enhancement + link: https://github.com/elastic/integrations/pull/9485 diff --git a/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-common-config.yml b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 000000000000..37e8fa225fdc --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_duplicate_custom_fields diff --git a/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json new file mode 100644 index 000000000000..3e17d54c42db --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json @@ -0,0 +1,359 @@ +{ + "events": [ + { + "@timestamp": "2024-03-27T21:30:17.067Z", + "event": { + "action": "started", + "start": "2024-03-27T21:30:17.067Z" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.978Z", + "activedirectory": { + "groups": [ + { + "cn": "Group Policy Creator Owners", + "dSCorePropagationData": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "description": "Members in this group can modify group policy for the domain", + "distinguishedName": "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "groupType": "-2147483646", + "instanceType": "4", + "isCriticalSystemObject": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "memberOf": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "name": "Group Policy Creator Owners", + "objectCategory": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "group" + ], + "objectGUID": "q72u7gQzkkGd1X2IFbK6Hw==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxCAIAAA==", + "sAMAccountName": "Group Policy Creator Owners", + "sAMAccountType": "268435456", + "uSNChanged": "12391", + "uSNCreated": "12354", + "whenChanged": "2024-01-22T06:37:40Z", + "whenCreated": "2024-01-22T06:37:40Z" + }, + { + "adminCount": "1", + "cn": "Domain Admins", + "dSCorePropagationData": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "description": "Designated administrators of the domain", + "distinguishedName": "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "groupType": "-2147483646", + "instanceType": "4", + "isCriticalSystemObject": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "memberOf": [ + "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Domain Admins", + "objectCategory": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "group" + ], + "objectGUID": "dcLZNxKP90+za+sRLhh8kA==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxAAIAAA==", + "sAMAccountName": "Domain Admins", + "sAMAccountType": "268435456", + "uSNChanged": "12770", + "uSNCreated": "12345", + "whenChanged": "2024-01-22T06:52:50Z", + "whenCreated": "2024-01-22T06:37:40Z" + }, + { + "adminCount": "1", + "cn": "Enterprise Admins", + "dSCorePropagationData": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "description": "Designated administrators of the enterprise", + "distinguishedName": "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "groupType": "-2147483640", + "instanceType": "4", + "isCriticalSystemObject": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "memberOf": [ + "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Enterprise Admins", + "objectCategory": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "group" + ], + "objectGUID": "8NElU6E6TU61DNFLIe7VHQ==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxBwIAAA==", + "sAMAccountName": "Enterprise Admins", + "sAMAccountType": "268435456", + "uSNChanged": "12773", + "uSNCreated": "12339", + "whenChanged": "2024-01-22T06:52:50Z", + "whenCreated": "2024-01-22T06:37:40Z" + }, + { + "adminCount": "1", + "cn": "Schema Admins", + "dSCorePropagationData": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "description": "Designated administrators of the schema", + "distinguishedName": "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "groupType": "-2147483640", + "instanceType": "4", + "isCriticalSystemObject": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "memberOf": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "name": "Schema Admins", + "objectCategory": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "group" + ], + "objectGUID": "Ti+p/M4gtECARFBF3cNSpw==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxBgIAAA==", + "sAMAccountName": "Schema Admins", + "sAMAccountType": "268435456", + "uSNChanged": "12769", + "uSNCreated": "12336", + "whenChanged": "2024-01-22T06:52:50Z", + "whenCreated": "2024-01-22T06:37:40Z" + } + ], + "id": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "user": { + "accountExpires": "2185-07-21T23:34:33.709551516Z", + "adminCount": "1", + "badPasswordTime": "133517595269561536", + "badPwdCount": "0", + "cn": "Administrator", + "codePage": "0", + "countryCode": "0", + "dSCorePropagationData": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T18:12:16Z" + ], + "description": "Built-in account for administering the computer/domain", + "distinguishedName": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "instanceType": "4", + "isCriticalSystemObject": true, + "lastLogoff": "0", + "lastLogon": "2024-02-08T06:51:02.1812823Z", + "lastLogonTimestamp": "2024-03-27T04:30:09.6399883Z", + "logonCount": "8", + "memberOf": [ + "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Administrator", + "objectCategory": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "objectGUID": "kUXoCTwYv0iZNc6UadAk1w==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9AEAAA==", + "primaryGroupID": "513", + "pwdLastSet": "2024-01-22T06:15:39.8703568Z", + "sAMAccountName": "Administrator", + "sAMAccountType": "805306368", + "uSNChanged": "25166", + "uSNCreated": "8196", + "userAccountControl": "66048", + "whenChanged": "2024-03-27T04:30:09Z", + "whenCreated": "2024-01-22T06:36:59Z" + }, + "whenChanged": "2024-03-27T04:30:09Z" + }, + "event": { + "action": "user-discovered" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "user": { + "id": "CN=Administrator,CN=Users,DC=testserver,DC=local" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.979Z", + "activedirectory": { + "id": "CN=Guest,CN=Users,DC=testserver,DC=local", + "user": { + "accountExpires": "2185-07-21T23:34:33.709551516Z", + "badPasswordTime": "0", + "badPwdCount": "0", + "cn": "Guest", + "codePage": "0", + "countryCode": "0", + "dSCorePropagationData": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "description": "Built-in account for guest access to the computer/domain", + "distinguishedName": "CN=Guest,CN=Users,DC=testserver,DC=local", + "instanceType": "4", + "isCriticalSystemObject": true, + "lastLogoff": "0", + "lastLogon": "2185-07-21T23:34:33.709551616Z", + "logonCount": "0", + "memberOf": "CN=Guests,CN=Builtin,DC=testserver,DC=local", + "name": "Guest", + "objectCategory": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "objectGUID": "hSt/40XJQU6cf+J2XoYMHw==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9QEAAA==", + "primaryGroupID": "514", + "pwdLastSet": "2185-07-21T23:34:33.709551616Z", + "sAMAccountName": "Guest", + "sAMAccountType": "805306368", + "uSNChanged": "8197", + "uSNCreated": "8197", + "userAccountControl": "66082", + "whenChanged": "2024-01-22T06:36:59Z", + "whenCreated": "2024-01-22T06:36:59Z" + }, + "whenChanged": "2024-01-22T06:36:59Z" + }, + "event": { + "action": "user-discovered" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "user": { + "id": "CN=Guest,CN=Users,DC=testserver,DC=local" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.980Z", + "activedirectory": { + "groups": [ + { + "cn": "Denied RODC Password Replication Group", + "dSCorePropagationData": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "description": "Members in this group cannot have their passwords replicated to any read-only domain controllers in the domain", + "distinguishedName": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "groupType": "-2147483644", + "instanceType": "4", + "isCriticalSystemObject": true, + "member": [ + "CN=Read-only Domain Controllers,CN=Users,DC=testserver,DC=local", + "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "CN=Cert Publishers,CN=Users,DC=testserver,DC=local", + "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "CN=Domain Controllers,CN=Users,DC=testserver,DC=local", + "CN=krbtgt,CN=Users,DC=testserver,DC=local" + ], + "name": "Denied RODC Password Replication Group", + "objectCategory": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "group" + ], + "objectGUID": "Ij75/i03bkSTx4bqdQlZ3w==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxPAIAAA==", + "sAMAccountName": "Denied RODC Password Replication Group", + "sAMAccountType": "536870912", + "uSNChanged": "12433", + "uSNCreated": "12405", + "whenChanged": "2024-01-22T06:37:40Z", + "whenCreated": "2024-01-22T06:37:40Z" + } + ], + "id": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "user": { + "accountExpires": "2185-07-21T23:34:33.709551516Z", + "adminCount": "1", + "badPasswordTime": "0", + "badPwdCount": "0", + "cn": "krbtgt", + "codePage": "0", + "countryCode": "0", + "dSCorePropagationData": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "description": "Key Distribution Center Service Account", + "distinguishedName": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "instanceType": "4", + "isCriticalSystemObject": true, + "lastLogoff": "0", + "lastLogon": "2185-07-21T23:34:33.709551616Z", + "logonCount": "0", + "memberOf": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "msDS-SupportedEncryptionTypes": "0", + "name": "krbtgt", + "objectCategory": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "objectClass": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "objectGUID": "rdk2F/qu4Eud52Q5bTXc7g==", + "objectSid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9gEAAA==", + "primaryGroupID": "513", + "pwdLastSet": "2024-01-22T06:37:40.4305135Z", + "sAMAccountName": "krbtgt", + "sAMAccountType": "805306368", + "servicePrincipalName": "kadmin/changepw", + "showInAdvancedViewOnly": true, + "uSNChanged": "12785", + "uSNCreated": "12324", + "userAccountControl": "514", + "whenChanged": "2024-01-22T06:52:50Z", + "whenCreated": "2024-01-22T06:37:40Z" + }, + "whenChanged": "2024-01-22T06:52:50Z" + }, + "event": { + "action": "user-discovered" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "user": { + "id": "CN=krbtgt,CN=Users,DC=testserver,DC=local" + } + }, + {"@timestamp":"2024-03-27T21:30:18.980Z","event":{"action":"completed","end":"2024-03-27T21:30:18.980Z"},"labels":{"identity_source":"entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3"}} + ] +} \ No newline at end of file diff --git a/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json-expected.json b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json-expected.json new file mode 100644 index 000000000000..aa9086576dca --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/_dev/test/pipeline/test-user.json-expected.json @@ -0,0 +1,504 @@ +{ + "expected": [ + { + "@timestamp": "2024-03-27T21:30:17.067Z", + "asset": { + "category": "entity", + "type": "activedirectory_user" + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "started", + "category": [ + "iam" + ], + "kind": "asset", + "start": "2024-03-27T21:30:17.067Z", + "type": [ + "info" + ] + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "tags": [ + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2024-03-27T21:30:18.978Z", + "asset": { + "category": "entity", + "create_date": "2024-01-22T06:36:59.000Z", + "id": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "last_updated": "2024-03-27T04:30:09.000Z", + "name": "Administrator", + "type": "activedirectory_user" + }, + "ecs": { + "version": "8.11.0" + }, + "entityanalytics_ad": { + "groups": [ + { + "cn": "Group Policy Creator Owners", + "description": "Members in this group can modify group policy for the domain", + "distinguished_name": "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "group_type": "-2147483646", + "instance_type": "4", + "is_critical_system_object": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "member_of": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "name": "Group Policy Creator Owners", + "object_category": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "group" + ], + "object_guid": "q72u7gQzkkGd1X2IFbK6Hw==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxCAIAAA==", + "sam_account_name": "Group Policy Creator Owners", + "sam_account_type": "268435456", + "usn_changed": "12391", + "usn_created": "12354", + "when_changed": "2024-01-22T06:37:40Z", + "when_created": "2024-01-22T06:37:40Z" + }, + { + "admin_count": "1", + "cn": "Domain Admins", + "description": "Designated administrators of the domain", + "distinguished_name": "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "group_type": "-2147483646", + "instance_type": "4", + "is_critical_system_object": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "member_of": [ + "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Domain Admins", + "object_category": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "group" + ], + "object_guid": "dcLZNxKP90+za+sRLhh8kA==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxAAIAAA==", + "sam_account_name": "Domain Admins", + "sam_account_type": "268435456", + "usn_changed": "12770", + "usn_created": "12345", + "when_changed": "2024-01-22T06:52:50Z", + "when_created": "2024-01-22T06:37:40Z" + }, + { + "admin_count": "1", + "cn": "Enterprise Admins", + "description": "Designated administrators of the enterprise", + "distinguished_name": "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "group_type": "-2147483640", + "instance_type": "4", + "is_critical_system_object": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "member_of": [ + "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Enterprise Admins", + "object_category": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "group" + ], + "object_guid": "8NElU6E6TU61DNFLIe7VHQ==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxBwIAAA==", + "sam_account_name": "Enterprise Admins", + "sam_account_type": "268435456", + "usn_changed": "12773", + "usn_created": "12339", + "when_changed": "2024-01-22T06:52:50Z", + "when_created": "2024-01-22T06:37:40Z" + }, + { + "admin_count": "1", + "cn": "Schema Admins", + "description": "Designated administrators of the schema", + "distinguished_name": "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "group_type": "-2147483640", + "instance_type": "4", + "is_critical_system_object": true, + "member": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "member_of": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "name": "Schema Admins", + "object_category": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "group" + ], + "object_guid": "Ti+p/M4gtECARFBF3cNSpw==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxBgIAAA==", + "sam_account_name": "Schema Admins", + "sam_account_type": "268435456", + "usn_changed": "12769", + "usn_created": "12336", + "when_changed": "2024-01-22T06:52:50Z", + "when_created": "2024-01-22T06:37:40Z" + } + ], + "id": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "user": { + "account_expires": "2185-07-21T23:34:33.709551516Z", + "admin_count": "1", + "bad_password_time": "133517595269561536", + "bad_pwd_count": "0", + "cn": "Administrator", + "code_page": "0", + "country_code": "0", + "description": "Built-in account for administering the computer/domain", + "distinguished_name": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T18:12:16Z" + ], + "instance_type": "4", + "is_critical_system_object": true, + "last_logoff": "0", + "last_logon": "2024-02-08T06:51:02.1812823Z", + "last_logon_timestamp": "2024-03-27T04:30:09.6399883Z", + "logon_count": "8", + "member_of": [ + "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "CN=Administrators,CN=Builtin,DC=testserver,DC=local" + ], + "name": "Administrator", + "object_category": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "object_guid": "kUXoCTwYv0iZNc6UadAk1w==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9AEAAA==", + "primary_group_id": "513", + "pwd_last_set": "2024-01-22T06:15:39.8703568Z", + "sam_account_name": "Administrator", + "sam_account_type": "805306368", + "user_account_control": "66048", + "usn_changed": "25166", + "usn_created": "8196", + "when_changed": "2024-03-27T04:30:09Z", + "when_created": "2024-01-22T06:36:59Z" + }, + "when_changed": "2024-03-27T04:30:09Z" + }, + "event": { + "action": "user-discovered", + "category": [ + "iam" + ], + "kind": "asset", + "type": [ + "info" + ] + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "related": { + "user": [ + "Administrator", + "CN=Administrator,CN=Users,DC=testserver,DC=local", + "kUXoCTwYv0iZNc6UadAk1w==", + "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9AEAAA==" + ] + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "user": { + "account": { + "password_change_date": "2024-01-22T06:15:39.870Z" + }, + "domain": "testserver.local", + "id": "CN=Administrator,CN=Users,DC=testserver,DC=local", + "name": "Administrator" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.979Z", + "asset": { + "category": "entity", + "create_date": "2024-01-22T06:36:59.000Z", + "id": "CN=Guest,CN=Users,DC=testserver,DC=local", + "last_updated": "2024-01-22T06:36:59.000Z", + "name": "Guest", + "type": "activedirectory_user" + }, + "ecs": { + "version": "8.11.0" + }, + "entityanalytics_ad": { + "id": "CN=Guest,CN=Users,DC=testserver,DC=local", + "user": { + "account_expires": "2185-07-21T23:34:33.709551516Z", + "bad_password_time": "0", + "bad_pwd_count": "0", + "cn": "Guest", + "code_page": "0", + "country_code": "0", + "description": "Built-in account for guest access to the computer/domain", + "distinguished_name": "CN=Guest,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "instance_type": "4", + "is_critical_system_object": true, + "last_logoff": "0", + "last_logon": "2185-07-21T23:34:33.709551616Z", + "logon_count": "0", + "member_of": "CN=Guests,CN=Builtin,DC=testserver,DC=local", + "name": "Guest", + "object_category": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "object_guid": "hSt/40XJQU6cf+J2XoYMHw==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9QEAAA==", + "primary_group_id": "514", + "pwd_last_set": "2185-07-21T23:34:33.709551616Z", + "sam_account_name": "Guest", + "sam_account_type": "805306368", + "user_account_control": "66082", + "usn_changed": "8197", + "usn_created": "8197", + "when_changed": "2024-01-22T06:36:59Z", + "when_created": "2024-01-22T06:36:59Z" + }, + "when_changed": "2024-01-22T06:36:59Z" + }, + "event": { + "action": "user-discovered", + "category": [ + "iam" + ], + "kind": "asset", + "type": [ + "info" + ] + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "related": { + "user": [ + "Guest", + "CN=Guest,CN=Users,DC=testserver,DC=local", + "hSt/40XJQU6cf+J2XoYMHw==", + "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9QEAAA==" + ] + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "user": { + "account": { + "password_change_date": "2185-07-21T23:34:33.709Z" + }, + "domain": "testserver.local", + "id": "CN=Guest,CN=Users,DC=testserver,DC=local", + "name": "Guest" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.980Z", + "asset": { + "category": "entity", + "create_date": "2024-01-22T06:37:40.000Z", + "id": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "last_updated": "2024-01-22T06:52:50.000Z", + "name": "krbtgt", + "type": "activedirectory_user" + }, + "ecs": { + "version": "8.11.0" + }, + "entityanalytics_ad": { + "groups": [ + { + "cn": "Denied RODC Password Replication Group", + "description": "Members in this group cannot have their passwords replicated to any read-only domain controllers in the domain", + "distinguished_name": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:37:40Z", + "1601-01-01T00:00:01Z" + ], + "group_type": "-2147483644", + "instance_type": "4", + "is_critical_system_object": true, + "member": [ + "CN=Read-only Domain Controllers,CN=Users,DC=testserver,DC=local", + "CN=Group Policy Creator Owners,CN=Users,DC=testserver,DC=local", + "CN=Domain Admins,CN=Users,DC=testserver,DC=local", + "CN=Cert Publishers,CN=Users,DC=testserver,DC=local", + "CN=Enterprise Admins,CN=Users,DC=testserver,DC=local", + "CN=Schema Admins,CN=Users,DC=testserver,DC=local", + "CN=Domain Controllers,CN=Users,DC=testserver,DC=local", + "CN=krbtgt,CN=Users,DC=testserver,DC=local" + ], + "name": "Denied RODC Password Replication Group", + "object_category": "CN=Group,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "group" + ], + "object_guid": "Ij75/i03bkSTx4bqdQlZ3w==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPxPAIAAA==", + "sam_account_name": "Denied RODC Password Replication Group", + "sam_account_type": "536870912", + "usn_changed": "12433", + "usn_created": "12405", + "when_changed": "2024-01-22T06:37:40Z", + "when_created": "2024-01-22T06:37:40Z" + } + ], + "id": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "user": { + "account_expires": "2185-07-21T23:34:33.709551516Z", + "admin_count": "1", + "bad_password_time": "0", + "bad_pwd_count": "0", + "cn": "krbtgt", + "code_page": "0", + "country_code": "0", + "description": "Key Distribution Center Service Account", + "distinguished_name": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "ds_core_propagation_data": [ + "2024-01-22T06:52:50Z", + "2024-01-22T06:37:40Z", + "1601-01-01T00:04:16Z" + ], + "instance_type": "4", + "is_critical_system_object": true, + "last_logoff": "0", + "last_logon": "2185-07-21T23:34:33.709551616Z", + "logon_count": "0", + "member_of": "CN=Denied RODC Password Replication Group,CN=Users,DC=testserver,DC=local", + "msds-supported_encryption_types": "0", + "name": "krbtgt", + "object_category": "CN=Person,CN=Schema,CN=Configuration,DC=testserver,DC=local", + "object_class": [ + "top", + "person", + "organizationalPerson", + "user" + ], + "object_guid": "rdk2F/qu4Eud52Q5bTXc7g==", + "object_sid": "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9gEAAA==", + "primary_group_id": "513", + "pwd_last_set": "2024-01-22T06:37:40.4305135Z", + "sam_account_name": "krbtgt", + "sam_account_type": "805306368", + "service_principal_name": "kadmin/changepw", + "show_in_advanced_view_only": true, + "user_account_control": "514", + "usn_changed": "12785", + "usn_created": "12324", + "when_changed": "2024-01-22T06:52:50Z", + "when_created": "2024-01-22T06:37:40Z" + }, + "when_changed": "2024-01-22T06:52:50Z" + }, + "event": { + "action": "user-discovered", + "category": [ + "iam" + ], + "kind": "asset", + "type": [ + "info" + ] + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "related": { + "user": [ + "krbtgt", + "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "rdk2F/qu4Eud52Q5bTXc7g==", + "AQUAAAAAAAUVAAAA0JU2Fq1k30YZ7UPx9gEAAA==" + ] + }, + "tags": [ + "preserve_duplicate_custom_fields" + ], + "user": { + "account": { + "password_change_date": "2024-01-22T06:37:40.430Z" + }, + "domain": "testserver.local", + "id": "CN=krbtgt,CN=Users,DC=testserver,DC=local", + "name": "krbtgt" + } + }, + { + "@timestamp": "2024-03-27T21:30:18.980Z", + "asset": { + "category": "entity", + "type": "activedirectory_user" + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "completed", + "category": [ + "iam" + ], + "end": "2024-03-27T21:30:18.980Z", + "kind": "asset", + "type": [ + "info" + ] + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-8c3c1f67-428d-4a95-a6de-69a2b8f952c3" + }, + "tags": [ + "preserve_duplicate_custom_fields" + ] + } + ] +} \ No newline at end of file diff --git a/packages/entityanalytics_ad/data_stream/user/agent/stream/entity-analytics.yml.hbs b/packages/entityanalytics_ad/data_stream/user/agent/stream/entity-analytics.yml.hbs new file mode 100644 index 000000000000..49588fee255a --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/agent/stream/entity-analytics.yml.hbs @@ -0,0 +1,22 @@ +provider: activedirectory +sync_interval: {{sync_interval}} +update_interval: {{update_interval}} +ad_base_dn: {{ad_base_dn}} +ad_url: {{ad_url}} +ad_user: {{ad_user}} +ad_password: {{ad_password}} +tags: + - users-entities +{{#if preserve_duplicate_custom_fields}} + - preserve_duplicate_custom_fields +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/default.yml b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 000000000000..e8efd5e24857 --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,49 @@ +--- +description: Pipeline for processing User logs. +processors: + - set: + field: ecs.version + tag: set_ecs_version + value: 8.11.0 + + - pipeline: + name: '{{ IngestPipeline "entity" }}' + if: ctx.activedirectory != null + tag: pipeline_entity + ignore_missing_pipeline: true + - pipeline: + name: '{{ IngestPipeline "marker" }}' + if: ctx.activedirectory == null + tag: pipeline_marker + ignore_missing_pipeline: true + + - script: + lang: painless + description: Drops null/empty values recursively. + tag: painless_remove_null + source: |- + boolean drop(Object object) { + if (object == null || object == '') { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(v -> drop(v)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(v -> drop(v)); + return (((List) object).length == 0); + } + return false; + } + drop(ctx); + - set: + field: event.kind + tag: set_pipeline_error_into_event_kind + value: pipeline_error + if: ctx.error?.message != null +on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: event.kind + value: pipeline_error diff --git a/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/entity.yml b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/entity.yml new file mode 100644 index 000000000000..a7e936d505e5 --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/entity.yml @@ -0,0 +1,208 @@ +--- +description: Pipeline for processing User logs. +processors: + - set: + field: event.kind + tag: set_event_kind + value: asset + - set: + field: event.category + tag: set_event_category + value: ['iam'] + - set: + field: event.type + tag: set_event_type + value: ['user','info'] + - set: + field: asset.category + tag: set_asset_category + value: entity + - set: + field: asset.type + tag: set_asset_type + value: activedirectory_user + + - script: + lang: painless + description: This script processor rename the fields under the activedirectory objects. + params: + "accountExpires": "account_expires" + "adminCount": "admin_count" + "badPasswordTime": "bad_password_time" + "badPwdCount": "bad_pwd_count" + "cn": "cn" + "codePage": "code_page" + "countryCode": "country_code" + "description": "description" + "distinguishedName": "distinguished_name" + "dSCorePropagationData": "ds_core_propagation_data" + "groups": "groups" + "groupType": "group_type" + "instanceType": "instance_type" + "isCriticalSystemObject": "is_critical_system_object" + "lastLogoff": "last_logoff" + "lastLogon": "last_logon" + "lastLogonTimestamp": "last_logon_timestamp" + "logonCount": "logon_count" + "member": "member" + "memberOf": "member_of" + "msDS-SupportedEncryptionTypes": "msds-supported_encryption_types" + "name": "name" + "object_category": "object_category" + "objectCategory": "object_category" + "objectClass": "object_class" + "objectGUID": "object_guid" + "objectSid": "object_sid" + "primaryGroupID": "primary_group_id" + "pwdLastSet": "pwd_last_set" + "sAMAccountName": "sam_account_name" + "sAMAccountType": "sam_account_type" + "servicePrincipalName": "service_principal_name" + "showInAdvancedViewOnly": "show_in_advanced_view_only" + "userAccountControl": "user_account_control" + "uSNChanged": "usn_changed" + "uSNCreated": "usn_created" + "whenChanged": "when_changed" + "whenCreated": "when_created" + tag: painless_to_rename_fields_under_activedirectory_groups + source: | + def renameKeys(Map src, Map keyMap) { + def dst = new HashMap(); + for (def entry: src.entrySet()) { + def key = entry.getKey(); + def value = entry.getValue(); + if (value instanceof Map) { + if (keyMap.containsKey(key)) { + dst[keyMap[key]] = renameKeys(value, keyMap); + } else { + dst[key] = renameKeys(value, keyMap); + } + } else if (value instanceof List) { + def updatedList = []; + for (def item: value) { + if (item instanceof Map) { + updatedList.add(renameKeys(item, keyMap)); + } else { + updatedList.add(item); + } + } + if (keyMap.containsKey(key)) { + dst[keyMap[key]] = updatedList; + } else { + dst[key] = value; + } + } else { + if (keyMap.containsKey(key)) { + dst[keyMap[key]] = value; + } else { + dst[key] = value; + } + } + } + return dst; + } + + ctx.activedirectory = renameKeys(ctx.activedirectory, params) + + - date: + field: activedirectory.user.when_created + target_field: asset.create_date + tag: date_user_created + formats: + - ISO8601 + if: ctx.activedirectory?.user?.when_created != null && ctx.activedirectory.user.when_created != '' + on_failure: + - remove: + field: activedirectory.user.when_created + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: activedirectory.user.when_changed + target_field: asset.last_updated + tag: date_user_changed + formats: + - ISO8601 + if: ctx.activedirectory?.user?.when_changed != null && ctx.activedirectory.user.when_changed != '' + on_failure: + - remove: + field: activedirectory.user.when_changed + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: activedirectory.user.pwd_last_set + target_field: user.account.password_change_date + tag: date_user_password_changed + formats: + - ISO8601 + if: ctx.activedirectory?.user?.pwd_last_set != null && ctx.activedirectory.user.pwd_last_set != '' + on_failure: + - remove: + field: activedirectory.user.pwd_last_set + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + + - set: + field: asset.name + copy_from: activedirectory.user.name + ignore_empty_value: true + - set: + field: user.name + copy_from: activedirectory.user.name + ignore_empty_value: true + - gsub: + tag: gsub_user_dn + field: activedirectory.user.distinguished_name + pattern: '^.*?DC=' + replacement: '' + target_field: user.domain + if: ctx.activedirectory?.user?.distinguished_name != null + - gsub: + tag: gsub_user_domain + field: user.domain + pattern: ',DC=' + replacement: '.' + if: ctx.user?.domain != null + - set: + field: asset.id + copy_from: activedirectory.id + ignore_empty_value: true + + - append: + field: related.user + value: "{{{activedirectory.user.name}}}" + tag: append_name_into_related_user + allow_duplicates: false + if: ctx.activedirectory?.user?.name != null + - append: + field: related.user + value: "{{{activedirectory.id}}}" + tag: append_id_into_related_user + allow_duplicates: false + if: ctx.activedirectory?.id != null + - append: + field: related.user + value: "{{{activedirectory.user.object_guid}}}" + tag: append_object_guid_into_related_user + allow_duplicates: false + if: ctx.activedirectory?.user?.object_guid != null + - append: + field: related.user + value: "{{{activedirectory.user.object_sid}}}" + tag: append_object_sid_into_related_user + allow_duplicates: false + if: ctx.activedirectory?.user?.object_sid != null + + - rename: + field: activedirectory + target_field: entityanalytics_ad + +on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: event.kind + value: pipeline_error diff --git a/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/marker.yml b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/marker.yml new file mode 100644 index 000000000000..e71d020029b6 --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/elasticsearch/ingest_pipeline/marker.yml @@ -0,0 +1,35 @@ +--- +description: Pipeline for processing publication markers. +processors: + - set: + field: ecs.version + tag: set_ecs_version + value: 8.11.0 + - set: + field: event.kind + tag: set_event_kind + value: asset + - set: + field: event.category + tag: set_event_category + value: ['iam'] + - set: + field: event.type + tag: set_event_type + value: ['info'] + - set: + field: asset.category + tag: set_asset_category + value: entity + - set: + field: asset.type + tag: set_asset_type + value: activedirectory_user + +on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: event.kind + value: pipeline_error diff --git a/packages/entityanalytics_ad/data_stream/user/fields/base-fields.yml b/packages/entityanalytics_ad/data_stream/user/fields/base-fields.yml new file mode 100644 index 000000000000..8bbb3d9ffd2c --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module. + value: entityanalytics_ad +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: entityanalytics_ad.user +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/entityanalytics_ad/data_stream/user/fields/beats.yml b/packages/entityanalytics_ad/data_stream/user/fields/beats.yml new file mode 100644 index 000000000000..a43f4ff852ca --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/fields/beats.yml @@ -0,0 +1,6 @@ +- name: input.type + type: keyword + description: Type of filebeat input. +- name: tags + type: keyword + description: User defined tags. diff --git a/packages/entityanalytics_ad/data_stream/user/fields/ecs.yml b/packages/entityanalytics_ad/data_stream/user/fields/ecs.yml new file mode 100644 index 000000000000..7ab99caceaf6 --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/fields/ecs.yml @@ -0,0 +1,104 @@ +- name: asset + type: group + fields: + - name: category + type: keyword + - name: costCenter + type: keyword + - name: create_date + type: date + - name: id + type: keyword + - name: last_seen + type: date + - name: last_status_change_date + type: date + - name: last_updated + type: date + - name: name + type: keyword + - name: status + type: keyword + - name: type + type: keyword + - name: vendor + type: keyword +- name: labels + type: group + fields: + - name: identity_source + type: keyword +- name: user + type: group + fields: + - name: account + type: group + fields: + - name: activated_date + type: date + - name: change_date + type: date + - name: create_date + type: date + - name: password_change_date + type: date + - name: status + type: group + fields: + - name: deprovisioned + type: boolean + - name: locked_out + type: boolean + - name: password_expired + type: boolean + - name: recovery + type: boolean + - name: suspended + type: boolean + - name: geo + type: group + fields: + - name: city_name + type: keyword + - name: country_iso_code + type: keyword + - name: name + type: keyword + - name: postal_code + type: keyword + - name: region_name + type: keyword + - name: timezone + type: keyword + - name: organization + type: group + fields: + - name: name + type: keyword + - name: profile + type: group + fields: + - name: department + type: keyword + - name: first_name + type: keyword + - name: id + type: keyword + - name: job_title + type: keyword + - name: last_name + type: keyword + - name: manager + type: keyword + - name: mobile_phone + type: keyword + - name: other_identities + type: keyword + - name: primaryPhone + type: keyword + - name: secondEmail + type: keyword + - name: status + type: keyword + - name: type + type: keyword diff --git a/packages/entityanalytics_ad/data_stream/user/fields/fields.yml b/packages/entityanalytics_ad/data_stream/user/fields/fields.yml new file mode 100644 index 000000000000..75a4a0ed1e58 --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/fields/fields.yml @@ -0,0 +1,124 @@ +- name: entityanalytics_ad + type: group + fields: + - name: id + type: keyword + - name: user + type: group + fields: + - name: account_expires + type: keyword + - name: admin_count + type: keyword + - name: bad_password_time + type: keyword + - name: bad_pwd_count + type: keyword + - name: cn + type: keyword + - name: code_page + type: keyword + - name: country_code + type: keyword + - name: description + type: keyword + - name: distinguished_name + type: keyword + - name: ds_core_propagation_data + type: date + - name: instance_type + type: keyword + - name: is_critical_system_object + type: boolean + - name: last_logoff + type: keyword + - name: last_logon + type: date + - name: last_logon_timestamp + type: date + - name: logon_count + type: keyword + - name: member_of + type: keyword + - name: msds-supported_encryption_types + type: keyword + - name: name + type: keyword + - name: object_category + type: keyword + - name: object_class + type: keyword + - name: object_guid + type: keyword + - name: object_sid + type: keyword + - name: primary_group_id + type: keyword + - name: pwd_last_set + type: date + - name: sam_account_name + type: keyword + - name: sam_account_type + type: keyword + - name: service_principal_name + type: keyword + - name: show_in_advanced_view_only + type: boolean + - name: user_account_control + type: keyword + - name: usn_changed + type: keyword + - name: usn_created + type: keyword + - name: when_changed + type: date + - name: when_created + type: date + - name: groups + type: group + fields: + - name: admin_count + type: keyword + - name: cn + type: keyword + - name: description + type: keyword + - name: distinguished_name + type: keyword + - name: ds_core_propagation_data + type: date + - name: group_type + type: keyword + - name: instance_type + type: keyword + - name: is_critical_system_object + type: boolean + - name: member + type: keyword + - name: member_of + type: keyword + - name: name + type: keyword + - name: object_category + type: keyword + - name: object_class + type: keyword + - name: object_guid + type: keyword + - name: object_sid + type: keyword + - name: sam_account_name + type: keyword + - name: sam_account_type + type: keyword + - name: usn_changed + type: keyword + - name: usn_created + type: keyword + - name: when_changed + type: date + - name: when_created + type: date + + - name: when_changed + type: date diff --git a/packages/entityanalytics_ad/data_stream/user/manifest.yml b/packages/entityanalytics_ad/data_stream/user/manifest.yml new file mode 100644 index 000000000000..afada65a464b --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/manifest.yml @@ -0,0 +1,85 @@ +title: Collect User Identities logs from Active Directory +type: logs +streams: + - input: entity-analytics + title: User Identities logs + description: Collect User Identities logs from Active Directory. + template_path: entity-analytics.yml.hbs + vars: + - name: ad_base_dn + type: text + title: Active Directory Base DN + multi: false + required: true + show_user: true + description: The Base DN for the Active Directory. + - name: ad_url + type: text + title: Active Directory URL + multi: false + required: true + show_user: true + description: The URL for the Active Directory server including the appropriate LDAP scheme. + - name: ad_user + type: text + title: Active Directory User + multi: false + required: true + show_user: true + description: The Active Directory user name. + - name: ad_password + type: password + title: Active Directory User Password + multi: false + required: true + show_user: true + description: The Active Directory user's password, used for authentication. + secret: true + - name: sync_interval + type: text + title: Sync Interval + description: How often full synchronizations should occur. Must be greater than Update Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 24h. Supported units for this parameter are h/m/s. + multi: false + required: true + show_user: true + default: 24h + - name: update_interval + type: text + title: Update Interval + description: How often incremental updates should occur. Must be less than Sync Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 15m. Supported units for this parameter are h/m/s. + default: 15m + multi: false + required: true + show_user: true + - name: id + type: text + title: Input ID + description: Identity Source. Which will be added to every event as a label. + multi: false + required: false + show_user: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - entityanalytics_ad-user + - name: preserve_duplicate_custom_fields + required: true + show_user: false + title: Preserve duplicate custom fields + description: Preserve entityanalytics_ad.user fields that were copied to Elastic Common Schema (ECS) fields. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/entityanalytics_ad/data_stream/user/sample_event.json b/packages/entityanalytics_ad/data_stream/user/sample_event.json new file mode 100644 index 000000000000..b995c0859d0f --- /dev/null +++ b/packages/entityanalytics_ad/data_stream/user/sample_event.json @@ -0,0 +1,53 @@ +{ + "@timestamp": "2024-04-02T02:44:08.198Z", + "agent": { + "ephemeral_id": "c8f2cffa-8316-41a2-8ad6-89ef2f3ecd2b", + "id": "277a9e26-8aae-4bc6-abcc-21db22ad29d7", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.13.0" + }, + "asset": { + "category": "entity", + "type": "activedirectory_user" + }, + "data_stream": { + "dataset": "entityanalytics_ad.user", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "277a9e26-8aae-4bc6-abcc-21db22ad29d7", + "snapshot": false, + "version": "8.13.0" + }, + "event": { + "action": "started", + "agent_id_status": "verified", + "category": [ + "iam" + ], + "dataset": "entityanalytics_ad.user", + "ingested": "2024-04-02T02:44:20Z", + "kind": "asset", + "start": "2024-04-02T02:44:08.198Z", + "type": [ + "info" + ] + }, + "input": { + "type": "entity-analytics" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-2270bd23-5392-4185-959b-b01ac2b8d89a" + }, + "tags": [ + "users-entities", + "preserve_duplicate_custom_fields", + "forwarded", + "entityanalytics_ad-user" + ] +} \ No newline at end of file diff --git a/packages/entityanalytics_ad/docs/README.md b/packages/entityanalytics_ad/docs/README.md new file mode 100644 index 000000000000..e221b8e3bbe1 --- /dev/null +++ b/packages/entityanalytics_ad/docs/README.md @@ -0,0 +1,234 @@ +# Active Directory Entity Analytics + +This Active Directory Entity Analytics integration allows users to securely stream User Entities data to Elastic Security via the Active Directory LDAP look-ups. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. + +## Data streams + +The Active Directory Entity Analytics integration collects one type of data: user. + +**User** is used to retrieve all user entries available from an Active Directory server. + +## Requirements + +- Elastic Agent must be installed. +- You can install only one Elastic Agent per host. +- Elastic Agent is required to stream data using Entity Analytics Input and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. + +### Installing and managing an Elastic Agent: + +You have a few options for installing and managing an Elastic Agent: + +### Install a Fleet-managed Elastic Agent (recommended): + +With this approach, you install Elastic Agent and use Fleet in Kibana to define, configure, and manage your agents in a central location. We recommend using Fleet management because it makes the management and upgrade of your agents considerably easier. + +### Install Elastic Agent in standalone mode (advanced users): + +With this approach, you install Elastic Agent and manually configure the agent locally on the system where it’s installed. You are responsible for managing and upgrading the agents. This approach is reserved for advanced users only. + +### Install Elastic Agent in a containerized environment: + +You can run Elastic Agent inside a container, either with Fleet Server or standalone. Docker images for all versions of Elastic Agent are available from the Elastic Docker registry, and we provide deployment manifests for running on Kubernetes. + +There are some minimum requirements for running Elastic Agent and for more information, refer to the link [here](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). + +The minimum **kibana.version** required is **8.14.0**. + +## Setup + +### To collect data from Active Directory, follow the below steps: + +- Obtain the LDAP username, e.g. `CN=Administrator,CN=Users,DC=testserver,DC=local` and password, and LDAP host address for the Active Directory server that you will be collecting data from. +- Determine the Base DN for the directory to be used, e.g. `CN=Users,DC=testserver,DC=local`. + +### Enabling the integration in Elastic: + +1. In Kibana, go to Management > Integrations. +2. In the "Search for integrations" search bar, type Active Directory Entity Analytics. +3. Click on the "Active Directory Entity Analytics" integration from the search results. +4. Click on the Add Active Directory Entity Analytics Integration button to add the integration. +5. While adding the integration, add the user, host and base DN details obtained above. +6. Save the integration by adding other necessary parameters. + +## Usage + +The Active Directory provider periodically contacts the server, retrieving updates for users, updates its internal cache of user metadata, and ships updated user metadata to Elasticsearch. + +Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users during that event. Changes on a user can come in many forms, whether it be a change to the user’s metadata, or a user was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. + +## Logs reference + +### User + +This is the `User` dataset. + +#### Example + +An example event for `user` looks as following: + +```json +{ + "@timestamp": "2024-04-02T02:44:08.198Z", + "agent": { + "ephemeral_id": "c8f2cffa-8316-41a2-8ad6-89ef2f3ecd2b", + "id": "277a9e26-8aae-4bc6-abcc-21db22ad29d7", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.13.0" + }, + "asset": { + "category": "entity", + "type": "activedirectory_user" + }, + "data_stream": { + "dataset": "entityanalytics_ad.user", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "277a9e26-8aae-4bc6-abcc-21db22ad29d7", + "snapshot": false, + "version": "8.13.0" + }, + "event": { + "action": "started", + "agent_id_status": "verified", + "category": [ + "iam" + ], + "dataset": "entityanalytics_ad.user", + "ingested": "2024-04-02T02:44:20Z", + "kind": "asset", + "start": "2024-04-02T02:44:08.198Z", + "type": [ + "info" + ] + }, + "input": { + "type": "entity-analytics" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_ad.user-2270bd23-5392-4185-959b-b01ac2b8d89a" + }, + "tags": [ + "users-entities", + "preserve_duplicate_custom_fields", + "forwarded", + "entityanalytics_ad-user" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| asset.category | | keyword | +| asset.costCenter | | keyword | +| asset.create_date | | date | +| asset.id | | keyword | +| asset.last_seen | | date | +| asset.last_status_change_date | | date | +| asset.last_updated | | date | +| asset.name | | keyword | +| asset.status | | keyword | +| asset.type | | keyword | +| asset.vendor | | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| entityanalytics_ad.groups.admin_count | | keyword | +| entityanalytics_ad.groups.cn | | keyword | +| entityanalytics_ad.groups.description | | keyword | +| entityanalytics_ad.groups.distinguished_name | | keyword | +| entityanalytics_ad.groups.ds_core_propagation_data | | date | +| entityanalytics_ad.groups.group_type | | keyword | +| entityanalytics_ad.groups.instance_type | | keyword | +| entityanalytics_ad.groups.is_critical_system_object | | boolean | +| entityanalytics_ad.groups.member | | keyword | +| entityanalytics_ad.groups.member_of | | keyword | +| entityanalytics_ad.groups.name | | keyword | +| entityanalytics_ad.groups.object_category | | keyword | +| entityanalytics_ad.groups.object_class | | keyword | +| entityanalytics_ad.groups.object_guid | | keyword | +| entityanalytics_ad.groups.object_sid | | keyword | +| entityanalytics_ad.groups.sam_account_name | | keyword | +| entityanalytics_ad.groups.sam_account_type | | keyword | +| entityanalytics_ad.groups.usn_changed | | keyword | +| entityanalytics_ad.groups.usn_created | | keyword | +| entityanalytics_ad.groups.when_changed | | date | +| entityanalytics_ad.groups.when_created | | date | +| entityanalytics_ad.id | | keyword | +| entityanalytics_ad.user.account_expires | | keyword | +| entityanalytics_ad.user.admin_count | | keyword | +| entityanalytics_ad.user.bad_password_time | | keyword | +| entityanalytics_ad.user.bad_pwd_count | | keyword | +| entityanalytics_ad.user.cn | | keyword | +| entityanalytics_ad.user.code_page | | keyword | +| entityanalytics_ad.user.country_code | | keyword | +| entityanalytics_ad.user.description | | keyword | +| entityanalytics_ad.user.distinguished_name | | keyword | +| entityanalytics_ad.user.ds_core_propagation_data | | date | +| entityanalytics_ad.user.instance_type | | keyword | +| entityanalytics_ad.user.is_critical_system_object | | boolean | +| entityanalytics_ad.user.last_logoff | | keyword | +| entityanalytics_ad.user.last_logon | | date | +| entityanalytics_ad.user.last_logon_timestamp | | date | +| entityanalytics_ad.user.logon_count | | keyword | +| entityanalytics_ad.user.member_of | | keyword | +| entityanalytics_ad.user.msds-supported_encryption_types | | keyword | +| entityanalytics_ad.user.name | | keyword | +| entityanalytics_ad.user.object_category | | keyword | +| entityanalytics_ad.user.object_class | | keyword | +| entityanalytics_ad.user.object_guid | | keyword | +| entityanalytics_ad.user.object_sid | | keyword | +| entityanalytics_ad.user.primary_group_id | | keyword | +| entityanalytics_ad.user.pwd_last_set | | date | +| entityanalytics_ad.user.sam_account_name | | keyword | +| entityanalytics_ad.user.sam_account_type | | keyword | +| entityanalytics_ad.user.service_principal_name | | keyword | +| entityanalytics_ad.user.show_in_advanced_view_only | | boolean | +| entityanalytics_ad.user.user_account_control | | keyword | +| entityanalytics_ad.user.usn_changed | | keyword | +| entityanalytics_ad.user.usn_created | | keyword | +| entityanalytics_ad.user.when_changed | | date | +| entityanalytics_ad.user.when_created | | date | +| entityanalytics_ad.when_changed | | date | +| event.dataset | Event dataset. | constant_keyword | +| event.module | Event module. | constant_keyword | +| input.type | Type of filebeat input. | keyword | +| labels.identity_source | | keyword | +| tags | User defined tags. | keyword | +| user.account.activated_date | | date | +| user.account.change_date | | date | +| user.account.create_date | | date | +| user.account.password_change_date | | date | +| user.account.status.deprovisioned | | boolean | +| user.account.status.locked_out | | boolean | +| user.account.status.password_expired | | boolean | +| user.account.status.recovery | | boolean | +| user.account.status.suspended | | boolean | +| user.geo.city_name | | keyword | +| user.geo.country_iso_code | | keyword | +| user.geo.name | | keyword | +| user.geo.postal_code | | keyword | +| user.geo.region_name | | keyword | +| user.geo.timezone | | keyword | +| user.organization.name | | keyword | +| user.profile.department | | keyword | +| user.profile.first_name | | keyword | +| user.profile.id | | keyword | +| user.profile.job_title | | keyword | +| user.profile.last_name | | keyword | +| user.profile.manager | | keyword | +| user.profile.mobile_phone | | keyword | +| user.profile.other_identities | | keyword | +| user.profile.primaryPhone | | keyword | +| user.profile.secondEmail | | keyword | +| user.profile.status | | keyword | +| user.profile.type | | keyword | + diff --git a/packages/entityanalytics_ad/img/logo.svg b/packages/entityanalytics_ad/img/logo.svg new file mode 100644 index 000000000000..3a4effc7b5ce --- /dev/null +++ b/packages/entityanalytics_ad/img/logo.svg @@ -0,0 +1,1248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/entityanalytics_ad/manifest.yml b/packages/entityanalytics_ad/manifest.yml new file mode 100644 index 000000000000..9e4f5f16520c --- /dev/null +++ b/packages/entityanalytics_ad/manifest.yml @@ -0,0 +1,30 @@ +format_version: "3.0.2" +name: entityanalytics_ad +title: Active Directory Entity Analytics +version: "0.0.1" +description: "Collect User Identities from Active Directory Entity with Elastic Agent." +type: integration +categories: + - security +conditions: + kibana: + version: "^8.14.0" + elastic: + subscription: "basic" +screenshots: [] +icons: + - src: /img/logo.svg + title: Active Directory Logo + size: 32x32 + type: image/svg+xml +policy_templates: + - name: user + title: User Identities + description: Collect user identities. + inputs: + - type: entity-analytics + title: Collect user identities + description: Collecting identities from Active Directory. +owner: + github: elastic/security-service-integrations + type: elastic diff --git a/packages/entityanalytics_ad/validation.yml b/packages/entityanalytics_ad/validation.yml new file mode 100644 index 000000000000..9dcaa3b03ff0 --- /dev/null +++ b/packages/entityanalytics_ad/validation.yml @@ -0,0 +1,5 @@ +errors: + exclude_checks: + - SVR00002 # Mandatory filters in dashboards. + - SVR00004 # References in dashboards. + - SVR00005 # Kibana version for saved tags. diff --git a/packages/fim/changelog.yml b/packages/fim/changelog.yml index 64a8f4f89df7..99e5c13e1cba 100644 --- a/packages/fim/changelog.yml +++ b/packages/fim/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.1" + changes: + - description: Fix default backend to auto + type: bugfix + link: https://github.com/elastic/integrations/pulls/9702 - version: "1.15.0" changes: - description: New event sourcing backends added diff --git a/packages/fim/manifest.yml b/packages/fim/manifest.yml index 80265ed07845..34c1a524b076 100644 --- a/packages/fim/manifest.yml +++ b/packages/fim/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.0" name: fim title: "File Integrity Monitoring" -version: "1.15.0" +version: "1.15.1" description: "The File Integrity Monitoring integration reports filesystem changes in real time." type: integration categories: @@ -79,15 +79,17 @@ vars: Forces a particular event source for file events on Linux. `fsnotify` does not provide user information. options: - - text: ebpf - value: ebpf - - text: fsnotify - value: fsnotify - - text: kprobes - value: kprobes + - text: auto + value: auto + - text: ebpf + value: ebpf + - text: fsnotify + value: fsnotify + - text: kprobes + value: kprobes show_user: true required: false - default: fsnotify + default: auto - name: max_file_size type: text title: File size limit diff --git a/packages/hadoop/changelog.yml b/packages/hadoop/changelog.yml index ad2f90ed3cbe..342614411740 100644 --- a/packages/hadoop/changelog.yml +++ b/packages/hadoop/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.6.0" + changes: + - description: Add global filter on data_stream.dataset to improve performance. + type: enhancement + link: https://github.com/elastic/integrations/pull/1 #Fix ME - version: "1.5.2" changes: - description: Inline "by reference" visualizations diff --git a/packages/hadoop/kibana/dashboard/hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107.json b/packages/hadoop/kibana/dashboard/hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107.json index 13abf7bc94c8..2b0ede0e9259 100644 --- a/packages/hadoop/kibana/dashboard/hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107.json +++ b/packages/hadoop/kibana/dashboard/hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107.json @@ -1,660 +1,680 @@ { - "id": "hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107", - "type": "dashboard", - "namespaces": [ - "default" - ], - "migrationVersion": { - "dashboard": "8.7.0" - }, - "coreMigrationVersion": "8.8.0", - "typeMigrationVersion": "8.7.0", - "updated_at": "2023-11-07T17:16:59.199Z", - "created_at": "2023-11-07T17:16:59.199Z", - "version": "Wzk5LDFd", - "attributes": { - "controlGroupInput": { - "chainingSystem": "HIERARCHICAL", - "controlStyle": "oneLine", - "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", - "panelsJSON": "{\"6df7972b-25f0-453b-829b-c183cddbc2f8\":{\"order\":0,\"width\":\"medium\",\"grow\":true,\"type\":\"optionsListControl\",\"explicitInput\":{\"fieldName\":\"hadoop.application.id\",\"title\":\"Applications\",\"id\":\"6df7972b-25f0-453b-829b-c183cddbc2f8\",\"enhancements\":{}}}}" - }, - "description": "", - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "optionsJSON": { - "hidePanelTitles": false, - "syncColors": false, - "syncCursor": true, - "syncTooltips": false, - "useMargins": true - }, - "panelsJSON": [ - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-dcf6a578-de72-4570-9fd8-f157f6494eb8", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "dcf6a578-de72-4570-9fd8-f157f6494eb8": { - "columnOrder": [ - "bf367b81-240d-468f-bd19-7b42516a2d6f", - "75832028-a5ee-46c0-b95b-32f5a04b39c4" - ], - "columns": { - "75832028-a5ee-46c0-b95b-32f5a04b39c4": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Elapsed Time (ms)", - "operationType": "max", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "hadoop.application.time.elapsed" + "attributes": { + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"6df7972b-25f0-453b-829b-c183cddbc2f8\":{\"order\":0,\"width\":\"medium\",\"grow\":true,\"type\":\"optionsListControl\",\"explicitInput\":{\"fieldName\":\"hadoop.application.id\",\"title\":\"Applications\",\"id\":\"6df7972b-25f0-453b-829b-c183cddbc2f8\",\"enhancements\":{}}}}" + }, + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" }, - "bf367b81-240d-468f-bd19-7b42516a2d6f": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Application Id", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "columnId": "75832028-a5ee-46c0-b95b-32f5a04b39c4", - "type": "column" + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "hadoop.application" }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" - }, - "size": 5 - }, - "scale": "ordinal", - "sourceField": "hadoop.application.id" + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "hadoop.application" + } } - }, - "incompleteColumns": {} } - } + ], + "query": { + "language": "kuery", + "query": "" } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-dcf6a578-de72-4570-9fd8-f157f6494eb8", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "dcf6a578-de72-4570-9fd8-f157f6494eb8": { + "columnOrder": [ + "bf367b81-240d-468f-bd19-7b42516a2d6f", + "75832028-a5ee-46c0-b95b-32f5a04b39c4" + ], + "columns": { + "75832028-a5ee-46c0-b95b-32f5a04b39c4": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Elapsed Time (ms)", + "operationType": "max", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "hadoop.application.time.elapsed" + }, + "bf367b81-240d-468f-bd19-7b42516a2d6f": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Application Id", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "75832028-a5ee-46c0-b95b-32f5a04b39c4", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "hadoop.application.id" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "75832028-a5ee-46c0-b95b-32f5a04b39c4" + ], + "layerId": "dcf6a578-de72-4570-9fd8-f157f6494eb8", + "layerType": "data", + "position": "top", + "seriesType": "bar_stacked", + "showGridlines": false, + "xAccessor": "bf367b81-240d-468f-bd19-7b42516a2d6f", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "75832028-a5ee-46c0-b95b-32f5a04b39c4" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "bar_stacked", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - "layers": [ - { - "accessors": [ - "75832028-a5ee-46c0-b95b-32f5a04b39c4" - ], - "layerId": "dcf6a578-de72-4570-9fd8-f157f6494eb8", - "layerType": "data", - "position": "top", - "seriesType": "bar_stacked", - "showGridlines": false, - "xAccessor": "bf367b81-240d-468f-bd19-7b42516a2d6f", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "75832028-a5ee-46c0-b95b-32f5a04b39c4" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true + "gridData": { + "h": 24, + "i": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1", + "w": 18, + "x": 0, + "y": 0 }, - "preferredSeriesType": "bar_stacked", - "title": "Empty XY chart", - "valueLabels": "hide" - } + "panelIndex": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1", + "title": "Elapsed time of different applications [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false - }, - "gridData": { - "h": 24, - "i": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1", - "w": 18, - "x": 0, - "y": 0 - }, - "panelIndex": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1", - "title": "Elapsed time of different applications [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - }, - { - "embeddableConfig": { - "attributes": { - "description": "", - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-358c9e71-f4a3-4980-adec-21e72950e734", - "type": "index-pattern" - } - ], - "state": { - "adHocDataViews": {}, - "datasourceStates": { - "formBased": { - "layers": { - "358c9e71-f4a3-4980-adec-21e72950e734": { - "columnOrder": [ - "d03524e9-64ac-4ac9-87e9-680f408594b7" - ], - "columns": { - "d03524e9-64ac-4ac9-87e9-680f408594b7": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Average Elapsed Time", - "operationType": "average", - "params": { - "emptyAsNull": true, - "format": { - "id": "duration", - "params": { - "decimals": 0, - "fromUnit": "milliseconds" - } + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-358c9e71-f4a3-4980-adec-21e72950e734", + "type": "index-pattern" } - }, - "scale": "ratio", - "sourceField": "hadoop.application.time.elapsed" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "internalReferences": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "d03524e9-64ac-4ac9-87e9-680f408594b7", - "layerId": "358c9e71-f4a3-4980-adec-21e72950e734", - "layerType": "data", - "size": "m", - "textAlign": "center", - "titlePosition": "bottom" - } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "358c9e71-f4a3-4980-adec-21e72950e734": { + "columnOrder": [ + "d03524e9-64ac-4ac9-87e9-680f408594b7" + ], + "columns": { + "d03524e9-64ac-4ac9-87e9-680f408594b7": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Average Elapsed Time", + "operationType": "average", + "params": { + "emptyAsNull": true, + "format": { + "id": "duration", + "params": { + "decimals": 0, + "fromUnit": "milliseconds" + } + } + }, + "scale": "ratio", + "sourceField": "hadoop.application.time.elapsed" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "d03524e9-64ac-4ac9-87e9-680f408594b7", + "layerId": "358c9e71-f4a3-4980-adec-21e72950e734", + "layerType": "data", + "size": "m", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 8, + "i": "9fed89bd-d709-4c4a-a84a-93b4d805940a", + "w": 8, + "x": 18, + "y": 0 + }, + "panelIndex": "9fed89bd-d709-4c4a-a84a-93b4d805940a", + "title": "Average elapsed time [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true - }, - "gridData": { - "h": 8, - "i": "9fed89bd-d709-4c4a-a84a-93b4d805940a", - "w": 8, - "x": 18, - "y": 0 - }, - "panelIndex": "9fed89bd-d709-4c4a-a84a-93b4d805940a", - "title": "Average elapsed time [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - }, - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-c0d13a02-cbb4-496c-88bd-6187253ec8d8", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "c0d13a02-cbb4-496c-88bd-6187253ec8d8": { - "columnOrder": [ - "71dbc991-2911-4abe-b977-4dda3d9d5bb0", - "b1201382-d991-47f1-9466-b0a4231edf29" - ], - "columns": { - "71dbc991-2911-4abe-b977-4dda3d9d5bb0": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Application Id", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "columnId": "b1201382-d991-47f1-9466-b0a4231edf29", - "type": "column" + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-c0d13a02-cbb4-496c-88bd-6187253ec8d8", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "c0d13a02-cbb4-496c-88bd-6187253ec8d8": { + "columnOrder": [ + "71dbc991-2911-4abe-b977-4dda3d9d5bb0", + "b1201382-d991-47f1-9466-b0a4231edf29" + ], + "columns": { + "71dbc991-2911-4abe-b977-4dda3d9d5bb0": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Application Id", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "b1201382-d991-47f1-9466-b0a4231edf29", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "hadoop.application.id" + }, + "b1201382-d991-47f1-9466-b0a4231edf29": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Number of Virtual Cores", + "operationType": "max", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "hadoop.application.vcore_seconds" + } + }, + "incompleteColumns": {} + } + } + } }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" + "filters": [], + "query": { + "language": "kuery", + "query": "" }, - "size": 5 - }, - "scale": "ordinal", - "sourceField": "hadoop.application.id" + "visualization": { + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "b1201382-d991-47f1-9466-b0a4231edf29" + ], + "layerId": "c0d13a02-cbb4-496c-88bd-6187253ec8d8", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "71dbc991-2911-4abe-b977-4dda3d9d5bb0", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "b1201382-d991-47f1-9466-b0a4231edf29" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "bar_horizontal", + "title": "Empty XY chart", + "valueLabels": "hide" + } }, - "b1201382-d991-47f1-9466-b0a4231edf29": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Number of Virtual Cores", - "operationType": "max", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "hadoop.application.vcore_seconds" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - "layers": [ - { - "accessors": [ - "b1201382-d991-47f1-9466-b0a4231edf29" - ], - "layerId": "c0d13a02-cbb4-496c-88bd-6187253ec8d8", - "layerType": "data", - "position": "top", - "seriesType": "bar_horizontal", - "showGridlines": false, - "xAccessor": "71dbc991-2911-4abe-b977-4dda3d9d5bb0", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "b1201382-d991-47f1-9466-b0a4231edf29" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true + "gridData": { + "h": 12, + "i": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0", + "w": 22, + "x": 26, + "y": 0 }, - "preferredSeriesType": "bar_horizontal", - "title": "Empty XY chart", - "valueLabels": "hide" - } + "panelIndex": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0", + "title": "Number of Virtual Cores Allocated [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false - }, - "gridData": { - "h": 12, - "i": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0", - "w": 22, - "x": 26, - "y": 0 - }, - "panelIndex": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0", - "title": "Number of Virtual Cores Allocated [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - }, - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-3003026c-64e9-4a34-9256-5500fb1a618a", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "3003026c-64e9-4a34-9256-5500fb1a618a": { - "columnOrder": [ - "a72c3684-ca50-4a1e-bae7-328ae098c42d" - ], - "columns": { - "a72c3684-ca50-4a1e-bae7-328ae098c42d": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Max Virtual Cores Allocated", - "operationType": "max", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "hadoop.application.allocated.v_cores" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "a72c3684-ca50-4a1e-bae7-328ae098c42d", - "layerId": "3003026c-64e9-4a34-9256-5500fb1a618a", - "layerType": "data", - "size": "m", - "textAlign": "center", - "titlePosition": "bottom" - } + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-3003026c-64e9-4a34-9256-5500fb1a618a", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "3003026c-64e9-4a34-9256-5500fb1a618a": { + "columnOrder": [ + "a72c3684-ca50-4a1e-bae7-328ae098c42d" + ], + "columns": { + "a72c3684-ca50-4a1e-bae7-328ae098c42d": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Max Virtual Cores Allocated", + "operationType": "max", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "hadoop.application.allocated.v_cores" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "a72c3684-ca50-4a1e-bae7-328ae098c42d", + "layerId": "3003026c-64e9-4a34-9256-5500fb1a618a", + "layerType": "data", + "size": "m", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 8, + "i": "3a5fad55-3e58-4326-8dbb-a71291fad652", + "w": 8, + "x": 18, + "y": 8 + }, + "panelIndex": "3a5fad55-3e58-4326-8dbb-a71291fad652", + "title": "Maximum virtual cores allocated to the application's running containers [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true - }, - "gridData": { - "h": 8, - "i": "3a5fad55-3e58-4326-8dbb-a71291fad652", - "w": 8, - "x": 18, - "y": 8 - }, - "panelIndex": "3a5fad55-3e58-4326-8dbb-a71291fad652", - "title": "Maximum virtual cores allocated to the application's running containers [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - }, - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-f39f3706-d2c4-42a9-80dc-d5db38283fd0", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "f39f3706-d2c4-42a9-80dc-d5db38283fd0": { - "columnOrder": [ - "d46b83b5-6fd9-4b12-82bc-ab59592531e8", - "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" - ], - "columns": { - "d46b83b5-6fd9-4b12-82bc-ab59592531e8": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Application Id", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "columnId": "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d", - "type": "column" + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-f39f3706-d2c4-42a9-80dc-d5db38283fd0", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "f39f3706-d2c4-42a9-80dc-d5db38283fd0": { + "columnOrder": [ + "d46b83b5-6fd9-4b12-82bc-ab59592531e8", + "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" + ], + "columns": { + "d46b83b5-6fd9-4b12-82bc-ab59592531e8": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Application Id", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "hadoop.application.id" + }, + "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Amount of Memory (MB)", + "operationType": "max", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "hadoop.application.memory_seconds" + } + }, + "incompleteColumns": {} + } + } + } }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" + "filters": [], + "query": { + "language": "kuery", + "query": "" }, - "size": 5 - }, - "scale": "ordinal", - "sourceField": "hadoop.application.id" + "visualization": { + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" + ], + "layerId": "f39f3706-d2c4-42a9-80dc-d5db38283fd0", + "layerType": "data", + "position": "top", + "seriesType": "bar_horizontal", + "showGridlines": false, + "xAccessor": "d46b83b5-6fd9-4b12-82bc-ab59592531e8", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "bar_horizontal", + "title": "Empty XY chart", + "valueLabels": "hide" + } }, - "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Amount of Memory (MB)", - "operationType": "max", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "hadoop.application.memory_seconds" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - "layers": [ - { - "accessors": [ - "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" - ], - "layerId": "f39f3706-d2c4-42a9-80dc-d5db38283fd0", - "layerType": "data", - "position": "top", - "seriesType": "bar_horizontal", - "showGridlines": false, - "xAccessor": "d46b83b5-6fd9-4b12-82bc-ab59592531e8", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "e63c81f6-6fa0-4c42-a1fc-d81a5daa0c6d" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true + "gridData": { + "h": 12, + "i": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f", + "w": 22, + "x": 26, + "y": 12 }, - "preferredSeriesType": "bar_horizontal", - "title": "Empty XY chart", - "valueLabels": "hide" - } + "panelIndex": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f", + "title": "Amount of Memory Allocated [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "logs-*", + "name": "indexpattern-datasource-layer-f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5": { + "columnOrder": [ + "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6" + ], + "columns": { + "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Max Allocated Memory (MB)", + "operationType": "max", + "params": { + "emptyAsNull": true + }, + "scale": "ratio", + "sourceField": "hadoop.application.allocated.mb" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6", + "layerId": "f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", + "layerType": "data", + "size": "m", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 8, + "i": "c9df8dfd-25c1-4cea-9b59-71bb227c1826", + "w": 8, + "x": 18, + "y": 16 + }, + "panelIndex": "c9df8dfd-25c1-4cea-9b59-71bb227c1826", + "title": "Maximum memory allocated to the application's running containers [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + } + ], + "timeRestore": false, + "title": "[Metrics Hadoop] Applications", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-20T10:09:35.216Z", + "id": "hadoop-3e16f2c0-cd28-11ec-be30-1d9331f0b107", + "managed": false, + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" }, - "gridData": { - "h": 12, - "i": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f", - "w": 22, - "x": 26, - "y": 12 + { + "id": "logs-*", + "name": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1:indexpattern-datasource-layer-dcf6a578-de72-4570-9fd8-f157f6494eb8", + "type": "index-pattern" }, - "panelIndex": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f", - "title": "Amount of Memory Allocated [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - }, - { - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "logs-*", - "name": "indexpattern-datasource-layer-f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5": { - "columnOrder": [ - "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6" - ], - "columns": { - "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Max Allocated Memory (MB)", - "operationType": "max", - "params": { - "emptyAsNull": true - }, - "scale": "ratio", - "sourceField": "hadoop.application.allocated.mb" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "bc8b4d8b-6378-4cd6-bb0c-5b5af84de1b6", - "layerId": "f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", - "layerType": "data", - "size": "m", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true + { + "id": "logs-*", + "name": "9fed89bd-d709-4c4a-a84a-93b4d805940a:indexpattern-datasource-layer-358c9e71-f4a3-4980-adec-21e72950e734", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0:indexpattern-datasource-layer-c0d13a02-cbb4-496c-88bd-6187253ec8d8", + "type": "index-pattern" }, - "gridData": { - "h": 8, - "i": "c9df8dfd-25c1-4cea-9b59-71bb227c1826", - "w": 8, - "x": 18, - "y": 16 + { + "id": "logs-*", + "name": "3a5fad55-3e58-4326-8dbb-a71291fad652:indexpattern-datasource-layer-3003026c-64e9-4a34-9256-5500fb1a618a", + "type": "index-pattern" }, - "panelIndex": "c9df8dfd-25c1-4cea-9b59-71bb227c1826", - "title": "Maximum memory allocated to the application's running containers [Metrics Hadoop]", - "type": "lens", - "version": "8.10.2" - } + { + "id": "logs-*", + "name": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f:indexpattern-datasource-layer-f39f3706-d2c4-42a9-80dc-d5db38283fd0", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "c9df8dfd-25c1-4cea-9b59-71bb227c1826:indexpattern-datasource-layer-f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", + "type": "index-pattern" + }, + { + "id": "logs-*", + "name": "controlGroup_6df7972b-25f0-453b-829b-c183cddbc2f8:optionsListDataView", + "type": "index-pattern" + } ], - "timeRestore": false, - "title": "[Metrics Hadoop] Applications", - "version": 1 - }, - "references": [ - { - "id": "logs-*", - "name": "21b49c8e-4de0-4e5f-bd72-89f3dc794af1:indexpattern-datasource-layer-dcf6a578-de72-4570-9fd8-f157f6494eb8", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "9fed89bd-d709-4c4a-a84a-93b4d805940a:indexpattern-datasource-layer-358c9e71-f4a3-4980-adec-21e72950e734", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "8b49723a-7ec3-4b6a-8b5f-879f2dd4f5b0:indexpattern-datasource-layer-c0d13a02-cbb4-496c-88bd-6187253ec8d8", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "3a5fad55-3e58-4326-8dbb-a71291fad652:indexpattern-datasource-layer-3003026c-64e9-4a34-9256-5500fb1a618a", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "ba4756f0-4674-4b0a-880d-54a5cfb4cb3f:indexpattern-datasource-layer-f39f3706-d2c4-42a9-80dc-d5db38283fd0", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "c9df8dfd-25c1-4cea-9b59-71bb227c1826:indexpattern-datasource-layer-f61f08d8-b1cc-4c7d-9cba-6b32820ce5d5", - "type": "index-pattern" - }, - { - "id": "logs-*", - "name": "controlGroup_6df7972b-25f0-453b-829b-c183cddbc2f8:optionsListDataView", - "type": "index-pattern" - } - ], - "managed": false + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/hadoop/kibana/dashboard/hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2.json b/packages/hadoop/kibana/dashboard/hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2.json index df069f04758c..e0208af7f212 100644 --- a/packages/hadoop/kibana/dashboard/hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2.json +++ b/packages/hadoop/kibana/dashboard/hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2.json @@ -1,573 +1,591 @@ { - "id": "hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2", - "type": "dashboard", - "namespaces": [ - "default" - ], - "migrationVersion": { - "dashboard": "8.7.0" - }, - "coreMigrationVersion": "8.8.0", - "typeMigrationVersion": "8.7.0", - "updated_at": "2023-11-07T17:16:59.199Z", - "created_at": "2023-11-07T17:16:59.199Z", - "version": "WzEwMCwxXQ==", - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "optionsJSON": { - "hidePanelTitles": false, - "syncColors": false, - "useMargins": true - }, - "panelsJSON": [ - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 20, - "i": "de277d30-051b-4343-b67b-b6b243c140f2", - "w": 27, - "x": 0, - "y": 0 - }, - "panelIndex": "de277d30-051b-4343-b67b-b6b243c140f2", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-b8ee20df-453e-488f-806e-6f4079a76be6", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "50203b57-c1ac-4ab0-82eb-c7ca168bb650", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "9b40dc83-210d-44d7-bbe3-549fbcdb09cb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "6c5f4d9b-3a70-4c21-a292-32654686b081", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "b8ee20df-453e-488f-806e-6f4079a76be6": { - "columnOrder": [ - "36dd81fa-f21e-4abd-b930-ad133b3feb10", - "927733e5-8d32-42b5-8b05-e27fb1e2adfc", - "4b6e5372-3e5e-4650-9b95-d6b81250436a", - "331edd36-c03b-4cc5-ba1b-8844d0381903" - ], - "columns": { - "331edd36-c03b-4cc5-ba1b-8844d0381903": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.node_manager.containers.failed: *" - }, - "isBucketed": false, - "label": "Failed", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.node_manager.containers.failed" - }, - "36dd81fa-f21e-4abd-b930-ad133b3feb10": { - "customLabel": true, - "dataType": "date", - "isBucketed": true, - "label": "Timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": false, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" }, - "4b6e5372-3e5e-4650-9b95-d6b81250436a": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.node_manager.containers.completed: *" - }, - "isBucketed": false, - "label": "Completed", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.node_manager.containers.completed" + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "hadoop.node_manager" + }, + "type": "phrase" }, - "927733e5-8d32-42b5-8b05-e27fb1e2adfc": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.node_manager.containers.running: *" - }, - "isBucketed": false, - "label": "Running", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.node_manager.containers.running" + "query": { + "match_phrase": { + "data_stream.dataset": "hadoop.node_manager" + } } - }, - "incompleteColumns": {} } - } + ], + "query": { + "language": "kuery", + "query": "" } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "50203b57-c1ac-4ab0-82eb-c7ca168bb650", - "key": "hadoop.node_manager.containers.running", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.node_manager.containers.running" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "9b40dc83-210d-44d7-bbe3-549fbcdb09cb", - "key": "hadoop.node_manager.containers.completed", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.node_manager.containers.completed" - } - } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-b8ee20df-453e-488f-806e-6f4079a76be6", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "50203b57-c1ac-4ab0-82eb-c7ca168bb650", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "9b40dc83-210d-44d7-bbe3-549fbcdb09cb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "6c5f4d9b-3a70-4c21-a292-32654686b081", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "b8ee20df-453e-488f-806e-6f4079a76be6": { + "columnOrder": [ + "36dd81fa-f21e-4abd-b930-ad133b3feb10", + "927733e5-8d32-42b5-8b05-e27fb1e2adfc", + "4b6e5372-3e5e-4650-9b95-d6b81250436a", + "331edd36-c03b-4cc5-ba1b-8844d0381903" + ], + "columns": { + "331edd36-c03b-4cc5-ba1b-8844d0381903": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.node_manager.containers.failed: *" + }, + "isBucketed": false, + "label": "Failed", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.node_manager.containers.failed" + }, + "36dd81fa-f21e-4abd-b930-ad133b3feb10": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "4b6e5372-3e5e-4650-9b95-d6b81250436a": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.node_manager.containers.completed: *" + }, + "isBucketed": false, + "label": "Completed", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.node_manager.containers.completed" + }, + "927733e5-8d32-42b5-8b05-e27fb1e2adfc": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.node_manager.containers.running: *" + }, + "isBucketed": false, + "label": "Running", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.node_manager.containers.running" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "50203b57-c1ac-4ab0-82eb-c7ca168bb650", + "key": "hadoop.node_manager.containers.running", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.node_manager.containers.running" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "9b40dc83-210d-44d7-bbe3-549fbcdb09cb", + "key": "hadoop.node_manager.containers.completed", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.node_manager.containers.completed" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "6c5f4d9b-3a70-4c21-a292-32654686b081", + "key": "hadoop.node_manager.containers.failed", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.node_manager.containers.failed" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "927733e5-8d32-42b5-8b05-e27fb1e2adfc", + "4b6e5372-3e5e-4650-9b95-d6b81250436a", + "331edd36-c03b-4cc5-ba1b-8844d0381903" + ], + "layerId": "b8ee20df-453e-488f-806e-6f4079a76be6", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "xAccessor": "36dd81fa-f21e-4abd-b930-ad133b3feb10", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "927733e5-8d32-42b5-8b05-e27fb1e2adfc" + }, + { + "axisMode": "left", + "forAccessor": "4b6e5372-3e5e-4650-9b95-d6b81250436a" + }, + { + "axisMode": "left", + "forAccessor": "331edd36-c03b-4cc5-ba1b-8844d0381903" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide", + "xTitle": "Timestamp", + "yTitle": "Containers" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "6c5f4d9b-3a70-4c21-a292-32654686b081", - "key": "hadoop.node_manager.containers.failed", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.node_manager.containers.failed" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 20, + "i": "de277d30-051b-4343-b67b-b6b243c140f2", + "w": 27, + "x": 0, + "y": 0 }, - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + "panelIndex": "de277d30-051b-4343-b67b-b6b243c140f2", + "title": "Number of containers over time [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-ee8bbb4c-7f64-46b1-965b-daec27ad4251", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d73deed1-d0bd-4f83-8759-602565e70486", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "ee8bbb4c-7f64-46b1-965b-daec27ad4251": { + "columnOrder": [ + "49bd7898-d477-456f-bebd-db0024ea1510", + "96afed27-0108-42ad-a3c6-26f51cd509a2" + ], + "columns": { + "49bd7898-d477-456f-bebd-db0024ea1510": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "96afed27-0108-42ad-a3c6-26f51cd509a2": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.node_manager.container_launch_duration_avg_time: *" + }, + "isBucketed": false, + "label": "Container Launch Duration Avg Time (s)", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.node_manager.container_launch_duration_avg_time" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "d73deed1-d0bd-4f83-8759-602565e70486", + "key": "hadoop.node_manager.container_launch_duration_avg_time", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.node_manager.container_launch_duration_avg_time" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "96afed27-0108-42ad-a3c6-26f51cd509a2" + ], + "layerId": "ee8bbb4c-7f64-46b1-965b-daec27ad4251", + "layerType": "data", + "position": "top", + "seriesType": "line", + "showGridlines": false, + "xAccessor": "49bd7898-d477-456f-bebd-db0024ea1510", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "96afed27-0108-42ad-a3c6-26f51cd509a2" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "line", + "title": "Empty XY chart", + "valueLabels": "hide", + "xTitle": "Timestamp", + "yTitle": "Seconds" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - "layers": [ - { - "accessors": [ - "927733e5-8d32-42b5-8b05-e27fb1e2adfc", - "4b6e5372-3e5e-4650-9b95-d6b81250436a", - "331edd36-c03b-4cc5-ba1b-8844d0381903" - ], - "layerId": "b8ee20df-453e-488f-806e-6f4079a76be6", - "layerType": "data", - "position": "top", - "seriesType": "area", - "showGridlines": false, - "xAccessor": "36dd81fa-f21e-4abd-b930-ad133b3feb10", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "927733e5-8d32-42b5-8b05-e27fb1e2adfc" - }, - { - "axisMode": "left", - "forAccessor": "4b6e5372-3e5e-4650-9b95-d6b81250436a" - }, - { - "axisMode": "left", - "forAccessor": "331edd36-c03b-4cc5-ba1b-8844d0381903" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true + "gridData": { + "h": 14, + "i": "7f0d3056-6f50-4be9-8a4b-cd51685676ec", + "w": 21, + "x": 27, + "y": 0 }, - "preferredSeriesType": "area", - "title": "Empty XY chart", - "valueLabels": "hide", - "xTitle": "Timestamp", - "yTitle": "Containers" - } + "panelIndex": "7f0d3056-6f50-4be9-8a4b-cd51685676ec", + "title": "Container average launch duration over time [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false, - "type": "lens" - }, - "title": "Number of containers over time [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 14, - "i": "7f0d3056-6f50-4be9-8a4b-cd51685676ec", - "w": 21, - "x": 27, - "y": 0 - }, - "panelIndex": "7f0d3056-6f50-4be9-8a4b-cd51685676ec", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-ee8bbb4c-7f64-46b1-965b-daec27ad4251", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d73deed1-d0bd-4f83-8759-602565e70486", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "ee8bbb4c-7f64-46b1-965b-daec27ad4251": { - "columnOrder": [ - "49bd7898-d477-456f-bebd-db0024ea1510", - "96afed27-0108-42ad-a3c6-26f51cd509a2" - ], - "columns": { - "49bd7898-d477-456f-bebd-db0024ea1510": { - "customLabel": true, - "dataType": "date", - "isBucketed": true, - "label": "Timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": false, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-ba699ab1-d553-4822-aadd-db43254f7ab0", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "052473c7-2ada-4644-b652-9157af03b3b0", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "ba699ab1-d553-4822-aadd-db43254f7ab0": { + "columnOrder": [ + "d751311f-5a11-4dcb-a55a-78ef1be7d79e" + ], + "columns": { + "d751311f-5a11-4dcb-a55a-78ef1be7d79e": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.node_manager.container_launch_duration_num_ops: *" + }, + "isBucketed": false, + "label": "Container Launch Duration (Num of Operations)", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.node_manager.container_launch_duration_num_ops" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "052473c7-2ada-4644-b652-9157af03b3b0", + "key": "hadoop.node_manager.container_launch_duration_num_ops", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.node_manager.container_launch_duration_num_ops" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "d751311f-5a11-4dcb-a55a-78ef1be7d79e", + "layerId": "ba699ab1-d553-4822-aadd-db43254f7ab0", + "layerType": "data", + "textAlign": "center", + "titlePosition": "bottom" + } }, - "96afed27-0108-42ad-a3c6-26f51cd509a2": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.node_manager.container_launch_duration_avg_time: *" - }, - "isBucketed": false, - "label": "Container Launch Duration Avg Time (s)", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.node_manager.container_launch_duration_avg_time" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "d73deed1-d0bd-4f83-8759-602565e70486", - "key": "hadoop.node_manager.container_launch_duration_avg_time", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.node_manager.container_launch_duration_avg_time" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + "gridData": { + "h": 6, + "i": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b", + "w": 21, + "x": 27, + "y": 14 }, - "layers": [ - { - "accessors": [ - "96afed27-0108-42ad-a3c6-26f51cd509a2" - ], - "layerId": "ee8bbb4c-7f64-46b1-965b-daec27ad4251", - "layerType": "data", - "position": "top", - "seriesType": "line", - "showGridlines": false, - "xAccessor": "49bd7898-d477-456f-bebd-db0024ea1510", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "96afed27-0108-42ad-a3c6-26f51cd509a2" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true - }, - "preferredSeriesType": "line", - "title": "Empty XY chart", - "valueLabels": "hide", - "xTitle": "Timestamp", - "yTitle": "Seconds" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false, - "type": "lens" + "panelIndex": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b", + "title": "Container launch duration number of operations [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + } + ], + "timeRestore": false, + "title": "[Metrics Hadoop] Node Manager", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-20T10:11:34.548Z", + "id": "hadoop-70125ec0-cf78-11ec-bc3e-6faca2b11df2", + "managed": false, + "references": [ + { + "id": "metrics-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" }, - "title": "Container average launch duration over time [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 6, - "i": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b", - "w": 21, - "x": 27, - "y": 14 + { + "id": "metrics-*", + "name": "de277d30-051b-4343-b67b-b6b243c140f2:indexpattern-datasource-layer-b8ee20df-453e-488f-806e-6f4079a76be6", + "type": "index-pattern" }, - "panelIndex": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-ba699ab1-d553-4822-aadd-db43254f7ab0", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "052473c7-2ada-4644-b652-9157af03b3b0", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "ba699ab1-d553-4822-aadd-db43254f7ab0": { - "columnOrder": [ - "d751311f-5a11-4dcb-a55a-78ef1be7d79e" - ], - "columns": { - "d751311f-5a11-4dcb-a55a-78ef1be7d79e": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.node_manager.container_launch_duration_num_ops: *" - }, - "isBucketed": false, - "label": "Container Launch Duration (Num of Operations)", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.node_manager.container_launch_duration_num_ops" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "052473c7-2ada-4644-b652-9157af03b3b0", - "key": "hadoop.node_manager.container_launch_duration_num_ops", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.node_manager.container_launch_duration_num_ops" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "d751311f-5a11-4dcb-a55a-78ef1be7d79e", - "layerId": "ba699ab1-d553-4822-aadd-db43254f7ab0", - "layerType": "data", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "de277d30-051b-4343-b67b-b6b243c140f2:50203b57-c1ac-4ab0-82eb-c7ca168bb650", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "de277d30-051b-4343-b67b-b6b243c140f2:9b40dc83-210d-44d7-bbe3-549fbcdb09cb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "de277d30-051b-4343-b67b-b6b243c140f2:6c5f4d9b-3a70-4c21-a292-32654686b081", + "type": "index-pattern" }, - "title": "Container launch duration number of operations [Metrics Hadoop]" - } + { + "id": "metrics-*", + "name": "7f0d3056-6f50-4be9-8a4b-cd51685676ec:indexpattern-datasource-layer-ee8bbb4c-7f64-46b1-965b-daec27ad4251", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "7f0d3056-6f50-4be9-8a4b-cd51685676ec:d73deed1-d0bd-4f83-8759-602565e70486", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b:indexpattern-datasource-layer-ba699ab1-d553-4822-aadd-db43254f7ab0", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b:052473c7-2ada-4644-b652-9157af03b3b0", + "type": "index-pattern" + } ], - "timeRestore": false, - "title": "[Metrics Hadoop] Node Manager", - "version": 1 - }, - "references": [ - { - "id": "metrics-*", - "name": "de277d30-051b-4343-b67b-b6b243c140f2:indexpattern-datasource-layer-b8ee20df-453e-488f-806e-6f4079a76be6", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "de277d30-051b-4343-b67b-b6b243c140f2:50203b57-c1ac-4ab0-82eb-c7ca168bb650", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "de277d30-051b-4343-b67b-b6b243c140f2:9b40dc83-210d-44d7-bbe3-549fbcdb09cb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "de277d30-051b-4343-b67b-b6b243c140f2:6c5f4d9b-3a70-4c21-a292-32654686b081", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "7f0d3056-6f50-4be9-8a4b-cd51685676ec:indexpattern-datasource-layer-ee8bbb4c-7f64-46b1-965b-daec27ad4251", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "7f0d3056-6f50-4be9-8a4b-cd51685676ec:d73deed1-d0bd-4f83-8759-602565e70486", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b:indexpattern-datasource-layer-ba699ab1-d553-4822-aadd-db43254f7ab0", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "8b1e87db-5125-44ad-8e30-bf9ee3e4447b:052473c7-2ada-4644-b652-9157af03b3b0", - "type": "index-pattern" - } - ], - "managed": false + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/hadoop/kibana/dashboard/hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2.json b/packages/hadoop/kibana/dashboard/hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2.json index bbc16094cc30..e769edc590a5 100644 --- a/packages/hadoop/kibana/dashboard/hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2.json +++ b/packages/hadoop/kibana/dashboard/hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2.json @@ -1,1143 +1,1188 @@ { - "id": "hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2", - "type": "dashboard", - "namespaces": [ - "default" - ], - "migrationVersion": { - "dashboard": "8.7.0" - }, - "coreMigrationVersion": "8.8.0", - "typeMigrationVersion": "8.7.0", - "updated_at": "2023-11-07T17:16:59.199Z", - "created_at": "2023-11-07T17:16:59.199Z", - "version": "WzEwMSwxXQ==", - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "optionsJSON": { - "hidePanelTitles": false, - "syncColors": false, - "useMargins": true - }, - "panelsJSON": [ - { - "embeddableConfig": { - "enhancements": {}, - "attributes": { - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "ee57a119-2827-4586-82f1-c796c86d76d9": { - "columnOrder": [ - "abfc2ae3-27f7-4529-a9b9-01d7a9896323", - "0a1b5433-d3cf-4c1d-8e22-137912b624bb" - ], - "columns": { - "0a1b5433-d3cf-4c1d-8e22-137912b624bb": { - "dataType": "number", - "isBucketed": false, - "label": "Count of records", - "operationType": "count", - "scale": "ratio", - "sourceField": "___records___" + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" }, - "abfc2ae3-27f7-4529-a9b9-01d7a9896323": { - "customLabel": true, - "dataType": "string", - "isBucketed": true, - "label": "Data node address", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "columnId": "0a1b5433-d3cf-4c1d-8e22-137912b624bb", - "type": "column" - }, - "orderDirection": "desc", - "otherBucket": true, - "parentFormat": { - "id": "terms" - }, - "size": 5 - }, - "scale": "ordinal", - "sourceField": "service.address" + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": [ + "hadoop.datanode", + "hadoop.namenode" + ], + "type": "phrases" + }, + "query": { + "bool": { + "minimum_should_match": 1, + "should": [ + { + "match_phrase": { + "data_stream.dataset": "hadoop.datanode" + } + }, + { + "match_phrase": { + "data_stream.dataset": "hadoop.namenode" + } + } + ] + } } - }, - "incompleteColumns": {} } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "data_stream.dataset : \"hadoop.datanode\" " - }, - "visualization": { - "columns": [ - { - "columnId": "abfc2ae3-27f7-4529-a9b9-01d7a9896323", - "isTransposed": false - }, - { - "columnId": "0a1b5433-d3cf-4c1d-8e22-137912b624bb", - "isTransposed": false - } ], - "layerId": "ee57a119-2827-4586-82f1-c796c86d76d9", - "layerType": "data", - "rowHeight": "single", - "rowHeightLines": 1 - } - }, - "title": "List of data node address [Metrics Hadoop]", - "visualizationType": "lnsDatatable", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-ee57a119-2827-4586-82f1-c796c86d76d9", - "type": "index-pattern" - } - ] - } - }, - "gridData": { - "h": 12, - "i": "1f52942c-5657-4bab-8e38-5cf69692f448", - "w": 24, - "x": 0, - "y": 0 - }, - "panelIndex": "1f52942c-5657-4bab-8e38-5cf69692f448", - "type": "lens", - "version": "8.6.0" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 7, - "i": "eac20ac9-93ca-483c-ab27-d10a06f4dde0", - "w": 12, - "x": 24, - "y": 0 - }, - "panelIndex": "eac20ac9-93ca-483c-ab27-d10a06f4dde0", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "50b51ba8-f87e-405f-8a53-efea43df987b", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "df057b77-cd5b-4e7a-bb21-ac003f0f4eb8": { - "columnOrder": [ - "f15f3a76-5e86-400f-9af5-c6ab810ffb8e" - ], - "columns": { - "f15f3a76-5e86-400f-9af5-c6ab810ffb8e": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.namenode.nodes.num_live_data: *" - }, - "isBucketed": false, - "label": "Live Data Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.namenode.nodes.num_live_data" - } - }, - "incompleteColumns": {} - } - } + "query": { + "language": "kuery", + "query": "" } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "50b51ba8-f87e-405f-8a53-efea43df987b", - "key": "hadoop.namenode.nodes.num_live_data", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.namenode.nodes.num_live_data" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "f15f3a76-5e86-400f-9af5-c6ab810ffb8e", - "layerId": "df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" - }, - "title": "Number of live data nodes [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 7, - "i": "75574416-a16d-43be-a303-2dc31359a8c9", - "w": 12, - "x": 36, - "y": 0 + } }, - "panelIndex": "75574416-a16d-43be-a303-2dc31359a8c9", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-3d40213c-fe67-4c30-bde1-5450fbadcd20", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "0fdf9d17-fb31-40a8-b8db-02850b080c9d", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "3d40213c-fe67-4c30-bde1-5450fbadcd20": { - "columnOrder": [ - "b48d5a8f-56b6-4418-bab1-ce62ea15f724" - ], - "columns": { - "b48d5a8f-56b6-4418-bab1-ce62ea15f724": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.namenode.nodes.num_dead_data: *" - }, - "isBucketed": false, - "label": "Dead Data Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.namenode.nodes.num_dead_data" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "0fdf9d17-fb31-40a8-b8db-02850b080c9d", - "key": "hadoop.namenode.nodes.num_dead_data", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.namenode.nodes.num_dead_data" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "b48d5a8f-56b6-4418-bab1-ce62ea15f724", - "layerId": "3d40213c-fe67-4c30-bde1-5450fbadcd20", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true }, - "title": "Number of dead data nodes [Metrics Hadoop]" - }, - { - "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": true, - "attributes": { - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "efa00ae4-03e1-45c9-aaa9-47610de989d9": { - "columnOrder": [ - "5e28f952-df42-4162-8195-af6ee018c227", - "5e28f952-df42-4162-8195-af6ee018c227X0" - ], - "columns": { - "5e28f952-df42-4162-8195-af6ee018c227": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Cache used", - "operationType": "formula", - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-ee57a119-2827-4586-82f1-c796c86d76d9", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "a1e89fd9-dfc2-4929-b851-016c12db176d", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "ee57a119-2827-4586-82f1-c796c86d76d9": { + "columnOrder": [ + "abfc2ae3-27f7-4529-a9b9-01d7a9896323", + "0a1b5433-d3cf-4c1d-8e22-137912b624bb" + ], + "columns": { + "0a1b5433-d3cf-4c1d-8e22-137912b624bb": { + "dataType": "number", + "isBucketed": false, + "label": "Count of records", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "abfc2ae3-27f7-4529-a9b9-01d7a9896323": { + "customLabel": true, + "dataType": "string", + "isBucketed": true, + "label": "Data node address", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "columnId": "0a1b5433-d3cf-4c1d-8e22-137912b624bb", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 5 + }, + "scale": "ordinal", + "sourceField": "service.address" + } + }, + "incompleteColumns": {} + } + } + } }, - "formula": "last_value(hadoop.datanode.cache.used)", - "isFormulaBroken": false - }, - "references": [ - "5e28f952-df42-4162-8195-af6ee018c227X0" - ], - "scale": "ratio" + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "index": "a1e89fd9-dfc2-4929-b851-016c12db176d", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "hadoop.datanode" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "hadoop.datanode" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "columns": [ + { + "columnId": "abfc2ae3-27f7-4529-a9b9-01d7a9896323", + "isTransposed": false + }, + { + "columnId": "0a1b5433-d3cf-4c1d-8e22-137912b624bb", + "isTransposed": false + } + ], + "layerId": "ee57a119-2827-4586-82f1-c796c86d76d9", + "layerType": "data", + "rowHeight": "single", + "rowHeightLines": 1 + } }, - "5e28f952-df42-4162-8195-af6ee018c227X0": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Part of Cache used", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.datanode.cache.used" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "data_stream.dataset : \"hadoop.datanode\" and hadoop.datanode.cache.capacity : * and hadoop.datanode.cache.used : * " - }, - "visualization": { - "accessor": "5e28f952-df42-4162-8195-af6ee018c227", - "layerId": "efa00ae4-03e1-45c9-aaa9-47610de989d9", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "Cache used from total cache [Metrics Hadoop]", - "visualizationType": "lnsLegacyMetric", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-efa00ae4-03e1-45c9-aaa9-47610de989d9", - "type": "index-pattern" - } - ] - } - }, - "gridData": { - "h": 7, - "i": "c8a6b036-ae93-4055-aef7-dd575221f10d", - "w": 12, - "x": 24, - "y": 7 - }, - "panelIndex": "c8a6b036-ae93-4055-aef7-dd575221f10d", - "type": "lens", - "version": "8.6.0" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 7, - "i": "f03b0b45-577e-480e-9fb2-9890b62fc30f", - "w": 12, - "x": 36, - "y": 7 - }, - "panelIndex": "f03b0b45-577e-480e-9fb2-9890b62fc30f", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-570e3d96-2c27-4661-8669-77215711bb6e", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "4e3e29b3-cd97-447c-b679-0130844d95bb", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "570e3d96-2c27-4661-8669-77215711bb6e": { - "columnOrder": [ - "2c8412e8-db24-4dab-8635-32a74ef1873c" - ], - "columns": { - "2c8412e8-db24-4dab-8635-32a74ef1873c": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.namenode.nodes.num_decommissioning_data: *" - }, - "isBucketed": false, - "label": "Decommissioning Data Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.namenode.nodes.num_decommissioning_data" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "4e3e29b3-cd97-447c-b679-0130844d95bb", - "key": "hadoop.namenode.nodes.num_decommissioning_data", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.namenode.nodes.num_decommissioning_data" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "2c8412e8-db24-4dab-8635-32a74ef1873c", - "layerId": "570e3d96-2c27-4661-8669-77215711bb6e", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } + "title": "List of data node address [Metrics Hadoop]", + "type": "lens", + "visualizationType": "lnsDatatable" + }, + "enhancements": {} + }, + "gridData": { + "h": 12, + "i": "1f52942c-5657-4bab-8e38-5cf69692f448", + "w": 24, + "x": 0, + "y": 0 + }, + "panelIndex": "1f52942c-5657-4bab-8e38-5cf69692f448", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" - }, - "title": "Number of data nodes decommissioning [Metrics Hadoop]" - }, - { - "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": false, - "attributes": { - "description": "", - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "69af342c-71f3-41fe-a76e-cc9f49baafa3": { - "columnOrder": [ - "797ebde1-9d7b-4950-9554-194d5c702684", - "fc0da319-4b72-4ccc-8e27-2c4ebec508c7", - "4b9fcd50-2227-40e5-a93b-ebb16831630d", - "56fd6e61-acf3-45e6-9904-98f7ffa90644" - ], - "columns": { - "4b9fcd50-2227-40e5-a93b-ebb16831630d": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Bytes read", - "operationType": "last_value", - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", + "type": "index-pattern" }, - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.datanode.bytes.read" - }, - "56fd6e61-acf3-45e6-9904-98f7ffa90644": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Bytes written", - "operationType": "last_value", - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + { + "id": "metrics-*", + "name": "50b51ba8-f87e-405f-8a53-efea43df987b", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "df057b77-cd5b-4e7a-bb21-ac003f0f4eb8": { + "columnOrder": [ + "f15f3a76-5e86-400f-9af5-c6ab810ffb8e" + ], + "columns": { + "f15f3a76-5e86-400f-9af5-c6ab810ffb8e": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.namenode.nodes.num_live_data: *" + }, + "isBucketed": false, + "label": "Live Data Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.namenode.nodes.num_live_data" + } + }, + "incompleteColumns": {} + } + } + } }, - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.datanode.bytes.written" + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "50b51ba8-f87e-405f-8a53-efea43df987b", + "key": "hadoop.namenode.nodes.num_live_data", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.namenode.nodes.num_live_data" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "f15f3a76-5e86-400f-9af5-c6ab810ffb8e", + "layerId": "df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } }, - "797ebde1-9d7b-4950-9554-194d5c702684": { - "customLabel": true, - "dataType": "date", - "isBucketed": true, - "label": "Timestamp", - "operationType": "date_histogram", - "params": { - "includeEmptyRows": true, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "eac20ac9-93ca-483c-ab27-d10a06f4dde0", + "w": 12, + "x": 24, + "y": 0 + }, + "panelIndex": "eac20ac9-93ca-483c-ab27-d10a06f4dde0", + "title": "Number of live data nodes [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-3d40213c-fe67-4c30-bde1-5450fbadcd20", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "0fdf9d17-fb31-40a8-b8db-02850b080c9d", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "3d40213c-fe67-4c30-bde1-5450fbadcd20": { + "columnOrder": [ + "b48d5a8f-56b6-4418-bab1-ce62ea15f724" + ], + "columns": { + "b48d5a8f-56b6-4418-bab1-ce62ea15f724": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.namenode.nodes.num_dead_data: *" + }, + "isBucketed": false, + "label": "Dead Data Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.namenode.nodes.num_dead_data" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "0fdf9d17-fb31-40a8-b8db-02850b080c9d", + "key": "hadoop.namenode.nodes.num_dead_data", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.namenode.nodes.num_dead_data" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "b48d5a8f-56b6-4418-bab1-ce62ea15f724", + "layerId": "3d40213c-fe67-4c30-bde1-5450fbadcd20", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } }, - "fc0da319-4b72-4ccc-8e27-2c4ebec508c7": { - "dataType": "string", - "isBucketed": true, - "label": "Top values of service.address", - "operationType": "terms", - "params": { - "missingBucket": false, - "orderBy": { - "fallback": true, - "type": "alphabetical" + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "75574416-a16d-43be-a303-2dc31359a8c9", + "w": 12, + "x": 36, + "y": 0 + }, + "panelIndex": "75574416-a16d-43be-a303-2dc31359a8c9", + "title": "Number of dead data nodes [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-efa00ae4-03e1-45c9-aaa9-47610de989d9", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "efa00ae4-03e1-45c9-aaa9-47610de989d9": { + "columnOrder": [ + "5e28f952-df42-4162-8195-af6ee018c227", + "5e28f952-df42-4162-8195-af6ee018c227X0" + ], + "columns": { + "5e28f952-df42-4162-8195-af6ee018c227": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Cache used", + "operationType": "formula", + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + }, + "formula": "last_value(hadoop.datanode.cache.used)", + "isFormulaBroken": false + }, + "references": [ + "5e28f952-df42-4162-8195-af6ee018c227X0" + ], + "scale": "ratio" + }, + "5e28f952-df42-4162-8195-af6ee018c227X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Cache used", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.datanode.cache.used" + } + }, + "incompleteColumns": {} + } + } + } }, - "orderDirection": "asc", - "otherBucket": true, - "parentFormat": { - "id": "terms" + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "hadoop.datanode.cache.capacity : * and hadoop.datanode.cache.used : * " }, - "size": 3 - }, - "scale": "ordinal", - "sourceField": "service.address" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "fbe5ed56-727a-408f-ab58-b03abf1502da", - "key": "hadoop.datanode.bytes.read", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.datanode.bytes.read" - } - } + "visualization": { + "accessor": "5e28f952-df42-4162-8195-af6ee018c227", + "layerId": "efa00ae4-03e1-45c9-aaa9-47610de989d9", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "Cache used from total cache [Metrics Hadoop]", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "37000496-671a-41ab-ab7b-35823e718530", - "key": "hadoop.datanode.bytes.written", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.datanode.bytes.written" - } - } - } - ], - "query": { - "language": "kuery", - "query": "data_stream.dataset : \"hadoop.datanode\" " - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 7, + "i": "c8a6b036-ae93-4055-aef7-dd575221f10d", + "w": 12, + "x": 24, + "y": 7 }, - "fittingFunction": "None", - "gridlinesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "panelIndex": "c8a6b036-ae93-4055-aef7-dd575221f10d", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-570e3d96-2c27-4661-8669-77215711bb6e", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "4e3e29b3-cd97-447c-b679-0130844d95bb", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "570e3d96-2c27-4661-8669-77215711bb6e": { + "columnOrder": [ + "2c8412e8-db24-4dab-8635-32a74ef1873c" + ], + "columns": { + "2c8412e8-db24-4dab-8635-32a74ef1873c": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.namenode.nodes.num_decommissioning_data: *" + }, + "isBucketed": false, + "label": "Decommissioning Data Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.namenode.nodes.num_decommissioning_data" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "4e3e29b3-cd97-447c-b679-0130844d95bb", + "key": "hadoop.namenode.nodes.num_decommissioning_data", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.namenode.nodes.num_decommissioning_data" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "2c8412e8-db24-4dab-8635-32a74ef1873c", + "layerId": "570e3d96-2c27-4661-8669-77215711bb6e", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "labelsOrientation": { - "x": 0, - "yLeft": 0, - "yRight": 0 + "gridData": { + "h": 7, + "i": "f03b0b45-577e-480e-9fb2-9890b62fc30f", + "w": 12, + "x": 36, + "y": 7 }, - "layers": [ - { - "accessors": [ - "4b9fcd50-2227-40e5-a93b-ebb16831630d", - "56fd6e61-acf3-45e6-9904-98f7ffa90644" - ], - "layerId": "69af342c-71f3-41fe-a76e-cc9f49baafa3", - "layerType": "data", - "position": "top", - "seriesType": "line", - "showGridlines": false, - "splitAccessor": "fc0da319-4b72-4ccc-8e27-2c4ebec508c7", - "xAccessor": "797ebde1-9d7b-4950-9554-194d5c702684" - } - ], - "legend": { - "isVisible": true, - "legendSize": "auto", - "position": "right" + "panelIndex": "f03b0b45-577e-480e-9fb2-9890b62fc30f", + "title": "Number of data nodes decommissioning [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-69af342c-71f3-41fe-a76e-cc9f49baafa3", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "7bd76a85-a404-4f51-8794-94a23bc470f6", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "6f137201-2f5c-41bc-aa69-268f6c6f9b22", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "layers": { + "69af342c-71f3-41fe-a76e-cc9f49baafa3": { + "columnOrder": [ + "797ebde1-9d7b-4950-9554-194d5c702684", + "fc0da319-4b72-4ccc-8e27-2c4ebec508c7", + "4b9fcd50-2227-40e5-a93b-ebb16831630d", + "56fd6e61-acf3-45e6-9904-98f7ffa90644" + ], + "columns": { + "4b9fcd50-2227-40e5-a93b-ebb16831630d": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Bytes read", + "operationType": "last_value", + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + }, + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.datanode.bytes.read" + }, + "56fd6e61-acf3-45e6-9904-98f7ffa90644": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Bytes written", + "operationType": "last_value", + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + }, + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.datanode.bytes.written" + }, + "797ebde1-9d7b-4950-9554-194d5c702684": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "fc0da319-4b72-4ccc-8e27-2c4ebec508c7": { + "dataType": "string", + "isBucketed": true, + "label": "Top values of service.address", + "operationType": "terms", + "params": { + "missingBucket": false, + "orderBy": { + "fallback": true, + "type": "alphabetical" + }, + "orderDirection": "asc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 3 + }, + "scale": "ordinal", + "sourceField": "service.address" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "7bd76a85-a404-4f51-8794-94a23bc470f6", + "key": "hadoop.datanode.bytes.read", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.datanode.bytes.read" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "6f137201-2f5c-41bc-aa69-268f6c6f9b22", + "key": "hadoop.datanode.bytes.written", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.datanode.bytes.written" + } + } + } + ], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "4b9fcd50-2227-40e5-a93b-ebb16831630d", + "56fd6e61-acf3-45e6-9904-98f7ffa90644" + ], + "layerId": "69af342c-71f3-41fe-a76e-cc9f49baafa3", + "layerType": "data", + "position": "top", + "seriesType": "line", + "showGridlines": false, + "splitAccessor": "fc0da319-4b72-4ccc-8e27-2c4ebec508c7", + "xAccessor": "797ebde1-9d7b-4950-9554-194d5c702684" + } + ], + "legend": { + "isVisible": true, + "legendSize": "auto", + "position": "right" + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide", + "xTitle": "Timestamp", + "yLeftExtent": { + "mode": "full" + }, + "yRightExtent": { + "mode": "full" + }, + "yTitle": "Bytes" + } + }, + "title": "Number of bytes read and written [Hadoop Metrics]", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - "preferredSeriesType": "line", - "tickLabelsVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 15, + "i": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f", + "w": 24, + "x": 0, + "y": 12 }, - "valueLabels": "hide", - "xTitle": "Timestamp", - "yLeftExtent": { - "mode": "full" + "panelIndex": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f", + "title": "Number of bytes read and written [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-bfc4ee7d-e67a-492c-a0de-3ba41b193e52", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "87fdb03b-29d6-48a3-952a-da13b704e34a", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "bfc4ee7d-e67a-492c-a0de-3ba41b193e52": { + "columnOrder": [ + "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62", + "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0" + ], + "columns": { + "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Disk Capacity", + "operationType": "formula", + "params": { + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + }, + "formula": "median(hadoop.datanode.disk_space.capacity)", + "isFormulaBroken": false + }, + "references": [ + "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0" + ], + "scale": "ratio" + }, + "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Disk Capacity (GB)", + "operationType": "median", + "scale": "ratio", + "sourceField": "hadoop.datanode.disk_space.capacity" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "87fdb03b-29d6-48a3-952a-da13b704e34a", + "key": "hadoop.datanode.disk_space.capacity", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.datanode.disk_space.capacity" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62", + "layerId": "bfc4ee7d-e67a-492c-a0de-3ba41b193e52", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "Data node disk capacity [Metrics Hadoop]", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "yRightExtent": { - "mode": "full" + "gridData": { + "h": 6, + "i": "ed24ad58-0d8a-495f-9767-1d994d65d52f", + "w": 24, + "x": 24, + "y": 14 }, - "yTitle": "Bytes" - } + "panelIndex": "ed24ad58-0d8a-495f-9767-1d994d65d52f", + "type": "lens", + "version": "8.10.2" }, - "title": "Number of bytes read and written [Hadoop Metrics]", - "visualizationType": "lnsXY", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-69af342c-71f3-41fe-a76e-cc9f49baafa3", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "fbe5ed56-727a-408f-ab58-b03abf1502da", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "37000496-671a-41ab-ab7b-35823e718530", - "type": "index-pattern" - } - ] - } - }, - "gridData": { - "h": 15, - "i": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f", - "w": 24, - "x": 0, - "y": 12 - }, - "panelIndex": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f", - "title": "Number of bytes read and written [Metrics Hadoop]", - "type": "lens", - "version": "8.6.0" - }, - { - "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": true, - "attributes": { - "description": "", - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "bfc4ee7d-e67a-492c-a0de-3ba41b193e52": { - "columnOrder": [ - "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62", - "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0" - ], - "columns": { - "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Disk Capacity", - "operationType": "formula", - "params": { - "format": { - "id": "bytes", - "params": { - "decimals": 2 - } + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-011f4580-0ed6-43f2-aeb7-64965ecd5e83", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "011f4580-0ed6-43f2-aeb7-64965ecd5e83": { + "columnOrder": [ + "7fd9ea12-b127-443d-a3d9-a07be9982c13" + ], + "columns": { + "7fd9ea12-b127-443d-a3d9-a07be9982c13": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Failed volumes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.datanode.volumes.failed" + } + }, + "incompleteColumns": {} + } + } + } }, - "formula": "median(hadoop.datanode.disk_space.capacity)", - "isFormulaBroken": false - }, - "references": [ - "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0" - ], - "scale": "ratio" + "filters": [], + "query": { + "language": "kuery", + "query": "hadoop.datanode.volumes.failed : * " + }, + "visualization": { + "accessor": "7fd9ea12-b127-443d-a3d9-a07be9982c13", + "layerId": "011f4580-0ed6-43f2-aeb7-64965ecd5e83", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } }, - "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62X0": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Part of Disk Capacity (GB)", - "operationType": "median", - "scale": "ratio", - "sourceField": "hadoop.datanode.disk_space.capacity" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "87fdb03b-29d6-48a3-952a-da13b704e34a", - "key": "hadoop.datanode.disk_space.capacity", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.datanode.disk_space.capacity" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "f5aa20c5-3dfb-45e8-82ff-4a24d054ef62", - "layerId": "bfc4ee7d-e67a-492c-a0de-3ba41b193e52", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } + "title": "Failed Volumes [Metrics Hadoop]", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "21f37466-b62d-4219-bc1a-d787833a8dbf", + "w": 12, + "x": 24, + "y": 20 + }, + "panelIndex": "21f37466-b62d-4219-bc1a-d787833a8dbf", + "type": "lens", + "version": "8.10.2" }, - "title": "Data node disk capacity [Metrics Hadoop]", - "visualizationType": "lnsLegacyMetric", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-bfc4ee7d-e67a-492c-a0de-3ba41b193e52", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "87fdb03b-29d6-48a3-952a-da13b704e34a", - "type": "index-pattern" - } - ] - } + { + "embeddableConfig": { + "attributes": { + "description": "", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-781bec53-7762-43ba-bc46-4a54c6b985ae", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "781bec53-7762-43ba-bc46-4a54c6b985ae": { + "columnOrder": [ + "931e5379-b427-4096-8030-51a9ad546b02" + ], + "columns": { + "931e5379-b427-4096-8030-51a9ad546b02": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Cached blocks", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.datanode.blocks.cached" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "hadoop.datanode.blocks.cached : * " + }, + "visualization": { + "accessor": "931e5379-b427-4096-8030-51a9ad546b02", + "layerId": "781bec53-7762-43ba-bc46-4a54c6b985ae", + "layerType": "data", + "size": "xl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "Cached blocks [Metrics Hadoop]", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "da4e4113-6794-4a85-977c-51879f500a0a", + "w": 12, + "x": 36, + "y": 20 + }, + "panelIndex": "da4e4113-6794-4a85-977c-51879f500a0a", + "type": "lens", + "version": "8.10.2" + } + ], + "timeRestore": false, + "title": "[Metrics Hadoop] Data nodes", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-26T05:56:55.262Z", + "id": "hadoop-c06fb680-cf76-11ec-bc3e-6faca2b11df2", + "managed": false, + "references": [ + { + "id": "metrics-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" }, - "gridData": { - "h": 6, - "i": "ed24ad58-0d8a-495f-9767-1d994d65d52f", - "w": 24, - "x": 24, - "y": 14 + { + "id": "metrics-*", + "name": "1f52942c-5657-4bab-8e38-5cf69692f448:indexpattern-datasource-layer-ee57a119-2827-4586-82f1-c796c86d76d9", + "type": "index-pattern" }, - "panelIndex": "ed24ad58-0d8a-495f-9767-1d994d65d52f", - "type": "lens", - "version": "8.6.0" - }, - { - "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": true, - "attributes": { - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "011f4580-0ed6-43f2-aeb7-64965ecd5e83": { - "columnOrder": [ - "7fd9ea12-b127-443d-a3d9-a07be9982c13" - ], - "columns": { - "7fd9ea12-b127-443d-a3d9-a07be9982c13": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Failed volumes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.datanode.volumes.failed" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "hadoop.datanode.volumes.failed : * " - }, - "visualization": { - "accessor": "7fd9ea12-b127-443d-a3d9-a07be9982c13", - "layerId": "011f4580-0ed6-43f2-aeb7-64965ecd5e83", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "Failed Volumes [Metrics Hadoop]", - "visualizationType": "lnsLegacyMetric", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-011f4580-0ed6-43f2-aeb7-64965ecd5e83", - "type": "index-pattern" - } - ] - } + { + "id": "metrics-*", + "name": "1f52942c-5657-4bab-8e38-5cf69692f448:a1e89fd9-dfc2-4929-b851-016c12db176d", + "type": "index-pattern" }, - "gridData": { - "h": 7, - "i": "21f37466-b62d-4219-bc1a-d787833a8dbf", - "w": 12, - "x": 24, - "y": 20 + { + "id": "metrics-*", + "name": "eac20ac9-93ca-483c-ab27-d10a06f4dde0:indexpattern-datasource-layer-df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", + "type": "index-pattern" }, - "panelIndex": "21f37466-b62d-4219-bc1a-d787833a8dbf", - "type": "lens", - "version": "8.6.0" - }, - { - "embeddableConfig": { - "enhancements": {}, - "hidePanelTitles": true, - "attributes": { - "description": "", - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "781bec53-7762-43ba-bc46-4a54c6b985ae": { - "columnOrder": [ - "931e5379-b427-4096-8030-51a9ad546b02" - ], - "columns": { - "931e5379-b427-4096-8030-51a9ad546b02": { - "customLabel": true, - "dataType": "number", - "isBucketed": false, - "label": "Cached blocks", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.datanode.blocks.cached" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [], - "query": { - "language": "kuery", - "query": "hadoop.datanode.blocks.cached : * " - }, - "visualization": { - "accessor": "931e5379-b427-4096-8030-51a9ad546b02", - "layerId": "781bec53-7762-43ba-bc46-4a54c6b985ae", - "layerType": "data", - "size": "xl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "Cached blocks [Metrics Hadoop]", - "visualizationType": "lnsLegacyMetric", - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-current-indexpattern", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-781bec53-7762-43ba-bc46-4a54c6b985ae", - "type": "index-pattern" - } - ] - } + { + "id": "metrics-*", + "name": "eac20ac9-93ca-483c-ab27-d10a06f4dde0:50b51ba8-f87e-405f-8a53-efea43df987b", + "type": "index-pattern" }, - "gridData": { - "h": 7, - "i": "da4e4113-6794-4a85-977c-51879f500a0a", - "w": 12, - "x": 36, - "y": 20 + { + "id": "metrics-*", + "name": "75574416-a16d-43be-a303-2dc31359a8c9:indexpattern-datasource-layer-3d40213c-fe67-4c30-bde1-5450fbadcd20", + "type": "index-pattern" }, - "panelIndex": "da4e4113-6794-4a85-977c-51879f500a0a", - "type": "lens", - "version": "8.6.0" - } + { + "id": "metrics-*", + "name": "75574416-a16d-43be-a303-2dc31359a8c9:0fdf9d17-fb31-40a8-b8db-02850b080c9d", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "c8a6b036-ae93-4055-aef7-dd575221f10d:indexpattern-datasource-layer-efa00ae4-03e1-45c9-aaa9-47610de989d9", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "f03b0b45-577e-480e-9fb2-9890b62fc30f:indexpattern-datasource-layer-570e3d96-2c27-4661-8669-77215711bb6e", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "f03b0b45-577e-480e-9fb2-9890b62fc30f:4e3e29b3-cd97-447c-b679-0130844d95bb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:indexpattern-datasource-layer-69af342c-71f3-41fe-a76e-cc9f49baafa3", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:7bd76a85-a404-4f51-8794-94a23bc470f6", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:6f137201-2f5c-41bc-aa69-268f6c6f9b22", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:indexpattern-datasource-layer-bfc4ee7d-e67a-492c-a0de-3ba41b193e52", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:87fdb03b-29d6-48a3-952a-da13b704e34a", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "21f37466-b62d-4219-bc1a-d787833a8dbf:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "21f37466-b62d-4219-bc1a-d787833a8dbf:indexpattern-datasource-layer-011f4580-0ed6-43f2-aeb7-64965ecd5e83", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "da4e4113-6794-4a85-977c-51879f500a0a:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "da4e4113-6794-4a85-977c-51879f500a0a:indexpattern-datasource-layer-781bec53-7762-43ba-bc46-4a54c6b985ae", + "type": "index-pattern" + } ], - "timeRestore": false, - "title": "[Metrics Hadoop] Data nodes", - "version": 1 - }, - "references": [ - { - "id": "metrics-*", - "name": "eac20ac9-93ca-483c-ab27-d10a06f4dde0:indexpattern-datasource-layer-df057b77-cd5b-4e7a-bb21-ac003f0f4eb8", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "eac20ac9-93ca-483c-ab27-d10a06f4dde0:50b51ba8-f87e-405f-8a53-efea43df987b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "75574416-a16d-43be-a303-2dc31359a8c9:indexpattern-datasource-layer-3d40213c-fe67-4c30-bde1-5450fbadcd20", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "75574416-a16d-43be-a303-2dc31359a8c9:0fdf9d17-fb31-40a8-b8db-02850b080c9d", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "f03b0b45-577e-480e-9fb2-9890b62fc30f:indexpattern-datasource-layer-570e3d96-2c27-4661-8669-77215711bb6e", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "f03b0b45-577e-480e-9fb2-9890b62fc30f:4e3e29b3-cd97-447c-b679-0130844d95bb", - "type": "index-pattern" - }, - { - "type": "index-pattern", - "name": "1f52942c-5657-4bab-8e38-5cf69692f448:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "1f52942c-5657-4bab-8e38-5cf69692f448:indexpattern-datasource-layer-ee57a119-2827-4586-82f1-c796c86d76d9", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "c8a6b036-ae93-4055-aef7-dd575221f10d:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "c8a6b036-ae93-4055-aef7-dd575221f10d:indexpattern-datasource-layer-efa00ae4-03e1-45c9-aaa9-47610de989d9", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:indexpattern-datasource-layer-69af342c-71f3-41fe-a76e-cc9f49baafa3", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:fbe5ed56-727a-408f-ab58-b03abf1502da", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "eed75d07-d50d-4fd8-ad03-6cf7bd5bd42f:37000496-671a-41ab-ab7b-35823e718530", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:indexpattern-datasource-layer-bfc4ee7d-e67a-492c-a0de-3ba41b193e52", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "ed24ad58-0d8a-495f-9767-1d994d65d52f:87fdb03b-29d6-48a3-952a-da13b704e34a", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "21f37466-b62d-4219-bc1a-d787833a8dbf:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "21f37466-b62d-4219-bc1a-d787833a8dbf:indexpattern-datasource-layer-011f4580-0ed6-43f2-aeb7-64965ecd5e83", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "da4e4113-6794-4a85-977c-51879f500a0a:indexpattern-datasource-current-indexpattern", - "id": "metrics-*" - }, - { - "type": "index-pattern", - "name": "da4e4113-6794-4a85-977c-51879f500a0a:indexpattern-datasource-layer-781bec53-7762-43ba-bc46-4a54c6b985ae", - "id": "metrics-*" - } - ], - "managed": false + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/hadoop/kibana/dashboard/hadoop-cb235590-cd24-11ec-be30-1d9331f0b107.json b/packages/hadoop/kibana/dashboard/hadoop-cb235590-cd24-11ec-be30-1d9331f0b107.json index 846835b35413..49eb917c5835 100644 --- a/packages/hadoop/kibana/dashboard/hadoop-cb235590-cd24-11ec-be30-1d9331f0b107.json +++ b/packages/hadoop/kibana/dashboard/hadoop-cb235590-cd24-11ec-be30-1d9331f0b107.json @@ -1,1295 +1,1308 @@ { - "id": "hadoop-cb235590-cd24-11ec-be30-1d9331f0b107", - "type": "dashboard", - "namespaces": [ - "default" - ], - "migrationVersion": { - "dashboard": "8.7.0" - }, - "coreMigrationVersion": "8.8.0", - "typeMigrationVersion": "8.7.0", - "updated_at": "2023-11-07T17:16:59.199Z", - "created_at": "2023-11-07T17:16:59.199Z", - "version": "WzEwMiwxXQ==", - "attributes": { - "description": "", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": { - "filter": [], - "query": { - "language": "kuery", - "query": "" - } - } - }, - "optionsJSON": { - "hidePanelTitles": false, - "syncColors": false, - "useMargins": true - }, - "panelsJSON": [ - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 18, - "i": "08fde296-94c6-4dbd-bd1f-77c67e0125e6", - "w": 24, - "x": 0, - "y": 0 - }, - "panelIndex": "08fde296-94c6-4dbd-bd1f-77c67e0125e6", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-35726819-8a70-4f5e-b150-1626c191f380", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "4b01387d-bd18-4e16-b860-005e4a71e957", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d846e0a6-42a9-4840-82e4-f217959a63fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "c50d822a-587a-4198-90c1-847fe7355fa1", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "e78473e3-a006-46cf-bada-e75ab9c4b279", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "35726819-8a70-4f5e-b150-1626c191f380": { - "columnOrder": [ - "c4649608-0cba-486f-8aec-460655407f67", - "39e015f6-e8f8-4a9a-80e3-2570606d310c", - "09a20c96-905b-40c8-9c40-77bfb5edb5b7", - "3708838a-0567-4295-8e77-3a39aca246cd", - "02f59eb1-8c13-41d6-a537-58fb1f051f84" - ], - "columns": { - "02f59eb1-8c13-41d6-a537-58fb1f051f84": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.node_managers.num_lost: *" - }, - "isBucketed": false, - "label": "Lost", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.node_managers.num_lost" + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" }, - "09a20c96-905b-40c8-9c40-77bfb5edb5b7": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.node_managers.num_unhealthy: *" - }, - "isBucketed": false, - "label": "Unhealthy", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.node_managers.num_unhealthy" + "meta": { + "alias": null, + "disabled": false, + "field": "data_stream.dataset", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "hadoop.cluster" + }, + "type": "phrase" }, - "3708838a-0567-4295-8e77-3a39aca246cd": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.node_managers.num_decommissioned: *" - }, - "isBucketed": false, - "label": "Decommissioned", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.node_managers.num_decommissioned" - }, - "39e015f6-e8f8-4a9a-80e3-2570606d310c": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.node_managers.num_active: *" - }, - "isBucketed": false, - "label": "Active", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.node_managers.num_active" - }, - "c4649608-0cba-486f-8aec-460655407f67": { - "customLabel": true, - "dataType": "date", - "isBucketed": true, - "label": "Timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": false, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" + "query": { + "match_phrase": { + "data_stream.dataset": "hadoop.cluster" + } } - }, - "incompleteColumns": {} } - } + ], + "query": { + "language": "kuery", + "query": "" } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "4b01387d-bd18-4e16-b860-005e4a71e957", - "key": "hadoop.cluster.node_managers.num_active", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.node_managers.num_active" - } - } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-35726819-8a70-4f5e-b150-1626c191f380", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "4b01387d-bd18-4e16-b860-005e4a71e957", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d846e0a6-42a9-4840-82e4-f217959a63fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "c50d822a-587a-4198-90c1-847fe7355fa1", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "e78473e3-a006-46cf-bada-e75ab9c4b279", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "35726819-8a70-4f5e-b150-1626c191f380": { + "columnOrder": [ + "c4649608-0cba-486f-8aec-460655407f67", + "39e015f6-e8f8-4a9a-80e3-2570606d310c", + "09a20c96-905b-40c8-9c40-77bfb5edb5b7", + "3708838a-0567-4295-8e77-3a39aca246cd", + "02f59eb1-8c13-41d6-a537-58fb1f051f84" + ], + "columns": { + "02f59eb1-8c13-41d6-a537-58fb1f051f84": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.node_managers.num_lost: *" + }, + "isBucketed": false, + "label": "Lost", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.node_managers.num_lost" + }, + "09a20c96-905b-40c8-9c40-77bfb5edb5b7": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.node_managers.num_unhealthy: *" + }, + "isBucketed": false, + "label": "Unhealthy", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.node_managers.num_unhealthy" + }, + "3708838a-0567-4295-8e77-3a39aca246cd": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.node_managers.num_decommissioned: *" + }, + "isBucketed": false, + "label": "Decommissioned", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.node_managers.num_decommissioned" + }, + "39e015f6-e8f8-4a9a-80e3-2570606d310c": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.node_managers.num_active: *" + }, + "isBucketed": false, + "label": "Active", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.node_managers.num_active" + }, + "c4649608-0cba-486f-8aec-460655407f67": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "4b01387d-bd18-4e16-b860-005e4a71e957", + "key": "hadoop.cluster.node_managers.num_active", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.node_managers.num_active" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "d846e0a6-42a9-4840-82e4-f217959a63fb", + "key": "hadoop.cluster.node_managers.num_unhealthy", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.node_managers.num_unhealthy" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "c50d822a-587a-4198-90c1-847fe7355fa1", + "key": "hadoop.cluster.node_managers.num_decommissioned", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.node_managers.num_decommissioned" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "e78473e3-a006-46cf-bada-e75ab9c4b279", + "key": "hadoop.cluster.node_managers.num_lost", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.node_managers.num_lost" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "39e015f6-e8f8-4a9a-80e3-2570606d310c", + "09a20c96-905b-40c8-9c40-77bfb5edb5b7", + "3708838a-0567-4295-8e77-3a39aca246cd", + "02f59eb1-8c13-41d6-a537-58fb1f051f84" + ], + "layerId": "35726819-8a70-4f5e-b150-1626c191f380", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "xAccessor": "c4649608-0cba-486f-8aec-460655407f67", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "39e015f6-e8f8-4a9a-80e3-2570606d310c" + }, + { + "axisMode": "left", + "forAccessor": "09a20c96-905b-40c8-9c40-77bfb5edb5b7" + }, + { + "axisMode": "left", + "forAccessor": "3708838a-0567-4295-8e77-3a39aca246cd" + }, + { + "axisMode": "left", + "forAccessor": "02f59eb1-8c13-41d6-a537-58fb1f051f84" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide", + "xTitle": "Timestamp", + "yTitle": "Node Managers" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "d846e0a6-42a9-4840-82e4-f217959a63fb", - "key": "hadoop.cluster.node_managers.num_unhealthy", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.node_managers.num_unhealthy" - } - } + "gridData": { + "h": 18, + "i": "08fde296-94c6-4dbd-bd1f-77c67e0125e6", + "w": 24, + "x": 0, + "y": 0 }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "c50d822a-587a-4198-90c1-847fe7355fa1", - "key": "hadoop.cluster.node_managers.num_decommissioned", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.node_managers.num_decommissioned" - } - } + "panelIndex": "08fde296-94c6-4dbd-bd1f-77c67e0125e6", + "title": "Number of node managers over time [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "b880f665-29b3-40b9-bd45-459f3105c645", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "5199984c-035a-4e47-9d4a-d63d01735d8b": { + "columnOrder": [ + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" + ], + "columns": { + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.nodes.active: *" + }, + "isBucketed": false, + "label": "Active Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.nodes.active" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "b880f665-29b3-40b9-bd45-459f3105c645", + "key": "hadoop.cluster.nodes.active", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.nodes.active" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", + "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "e78473e3-a006-46cf-bada-e75ab9c4b279", - "key": "hadoop.cluster.node_managers.num_lost", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.node_managers.num_lost" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 5, + "i": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f", + "w": 8, + "x": 24, + "y": 0 + }, + "panelIndex": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f", + "title": "Number of active nodes [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "b98d7344-acd9-4e73-a62b-a34aee54465c", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "5199984c-035a-4e47-9d4a-d63d01735d8b": { + "columnOrder": [ + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" + ], + "columns": { + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.nodes.lost: *" + }, + "isBucketed": false, + "label": "Lost Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.nodes.lost" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "b98d7344-acd9-4e73-a62b-a34aee54465c", + "key": "hadoop.cluster.nodes.lost", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.nodes.lost" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", + "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "fittingFunction": "None", - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true + "gridData": { + "h": 5, + "i": "9d55a200-501c-45bf-94a9-a3c36744865d", + "w": 8, + "x": 32, + "y": 0 }, - "labelsOrientation": { - "x": 0, - "yLeft": 0, - "yRight": 0 + "panelIndex": "9d55a200-501c-45bf-94a9-a3c36744865d", + "title": "Number of lost nodes [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "1965ff1a-73c8-4f6c-be65-230190b5ca22", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "5199984c-035a-4e47-9d4a-d63d01735d8b": { + "columnOrder": [ + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" + ], + "columns": { + "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.nodes.unhealthy: *" + }, + "isBucketed": false, + "label": "Unhealthy Nodes", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.nodes.unhealthy" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "1965ff1a-73c8-4f6c-be65-230190b5ca22", + "key": "hadoop.cluster.nodes.unhealthy", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.nodes.unhealthy" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", + "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "layers": [ - { - "accessors": [ - "39e015f6-e8f8-4a9a-80e3-2570606d310c", - "09a20c96-905b-40c8-9c40-77bfb5edb5b7", - "3708838a-0567-4295-8e77-3a39aca246cd", - "02f59eb1-8c13-41d6-a537-58fb1f051f84" - ], - "layerId": "35726819-8a70-4f5e-b150-1626c191f380", - "layerType": "data", - "position": "top", - "seriesType": "area", - "showGridlines": false, - "xAccessor": "c4649608-0cba-486f-8aec-460655407f67", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "39e015f6-e8f8-4a9a-80e3-2570606d310c" - }, - { - "axisMode": "left", - "forAccessor": "09a20c96-905b-40c8-9c40-77bfb5edb5b7" - }, - { - "axisMode": "left", - "forAccessor": "3708838a-0567-4295-8e77-3a39aca246cd" - }, - { - "axisMode": "left", - "forAccessor": "02f59eb1-8c13-41d6-a537-58fb1f051f84" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true + "gridData": { + "h": 5, + "i": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886", + "w": 8, + "x": 40, + "y": 0 + }, + "panelIndex": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886", + "title": "Number of unhealthy nodes [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-faa4a447-faac-4424-9e42-5a29b0ad1137", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "6289f262-f60c-4d6c-9480-c8d037633755", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "c26ffbdc-b9a3-4a13-870a-6e83389b4007", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "70536a90-2ac2-4561-a8ed-1d0b7897fb04", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "faa4a447-faac-4424-9e42-5a29b0ad1137": { + "columnOrder": [ + "55139a89-d014-4b5e-9195-8d7874ae4a47", + "aac01fd6-85b3-4678-a105-90b6bfef291a", + "2c271321-b9d9-4fc0-8bb4-0483f527c16b", + "88d60efa-e82b-43e6-bd18-e523c386af79" + ], + "columns": { + "2c271321-b9d9-4fc0-8bb4-0483f527c16b": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.applications.pending: *" + }, + "isBucketed": false, + "label": "Pending", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.applications.pending" + }, + "55139a89-d014-4b5e-9195-8d7874ae4a47": { + "customLabel": true, + "dataType": "date", + "isBucketed": true, + "label": "Timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": false, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "88d60efa-e82b-43e6-bd18-e523c386af79": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.applications.failed: *" + }, + "isBucketed": false, + "label": "Failed", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.applications.failed" + }, + "aac01fd6-85b3-4678-a105-90b6bfef291a": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.applications.running: *" + }, + "isBucketed": false, + "label": "Running", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.applications.running" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "6289f262-f60c-4d6c-9480-c8d037633755", + "key": "hadoop.cluster.applications.running", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.applications.running" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "c26ffbdc-b9a3-4a13-870a-6e83389b4007", + "key": "hadoop.cluster.applications.pending", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.applications.pending" + } + } + }, + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "70536a90-2ac2-4561-a8ed-1d0b7897fb04", + "key": "hadoop.cluster.applications.failed", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.applications.failed" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "gridlinesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "aac01fd6-85b3-4678-a105-90b6bfef291a", + "2c271321-b9d9-4fc0-8bb4-0483f527c16b", + "88d60efa-e82b-43e6-bd18-e523c386af79" + ], + "layerId": "faa4a447-faac-4424-9e42-5a29b0ad1137", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "xAccessor": "55139a89-d014-4b5e-9195-8d7874ae4a47", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "aac01fd6-85b3-4678-a105-90b6bfef291a" + }, + { + "axisMode": "left", + "forAccessor": "2c271321-b9d9-4fc0-8bb4-0483f527c16b" + }, + { + "axisMode": "left", + "forAccessor": "88d60efa-e82b-43e6-bd18-e523c386af79" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "top", + "showSingleSeries": true + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide", + "xTitle": "Timestamp", + "yTitle": "Applications" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 18, + "i": "d78560b6-a798-4b6b-b702-252c1319af9c", + "w": 24, + "x": 24, + "y": 5 + }, + "panelIndex": "d78560b6-a798-4b6b-b702-252c1319af9c", + "title": "Number of applications over time [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "446aea27-ddc3-4f7b-8623-2fe664c9af1d", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { + "columnOrder": [ + "36a555dc-487f-4e1c-a3ae-2afa0f535519" + ], + "columns": { + "36a555dc-487f-4e1c-a3ae-2afa0f535519": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.containers.allocated: *" + }, + "isBucketed": false, + "label": "Containers Allocated", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.containers.allocated" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "446aea27-ddc3-4f7b-8623-2fe664c9af1d", + "key": "hadoop.cluster.containers.allocated", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.containers.allocated" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", + "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true }, - "preferredSeriesType": "area", - "tickLabelsVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true + "gridData": { + "h": 5, + "i": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272", + "w": 8, + "x": 0, + "y": 18 }, - "valueLabels": "hide", - "xTitle": "Timestamp", - "yTitle": "Node Managers" - } + "panelIndex": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272", + "title": "Number of containers allocated [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false, - "type": "lens" + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "022a0e4d-13e0-47d7-8fd4-7fc3671f864d", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { + "columnOrder": [ + "36a555dc-487f-4e1c-a3ae-2afa0f535519" + ], + "columns": { + "36a555dc-487f-4e1c-a3ae-2afa0f535519": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.containers.pending: *" + }, + "isBucketed": false, + "label": "Containers Pending", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.containers.pending" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "022a0e4d-13e0-47d7-8fd4-7fc3671f864d", + "key": "hadoop.cluster.containers.pending", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.containers.pending" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", + "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 5, + "i": "3078cc84-cf45-47c1-9761-a2cf0be99c2e", + "w": 8, + "x": 8, + "y": 18 + }, + "panelIndex": "3078cc84-cf45-47c1-9761-a2cf0be99c2e", + "title": "Number of containers pending [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d1592d8a-7e50-4768-a449-a05551db392d", + "type": "index-pattern" + } + ], + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { + "columnOrder": [ + "36a555dc-487f-4e1c-a3ae-2afa0f535519" + ], + "columns": { + "36a555dc-487f-4e1c-a3ae-2afa0f535519": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "hadoop.cluster.containers.reserved: *" + }, + "isBucketed": false, + "label": "Containers Reserved", + "operationType": "last_value", + "params": { + "showArrayValues": true, + "sortField": "@timestamp" + }, + "scale": "ratio", + "sourceField": "hadoop.cluster.containers.reserved" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": null, + "disabled": false, + "index": "d1592d8a-7e50-4768-a449-a05551db392d", + "key": "hadoop.cluster.containers.reserved", + "negate": false, + "type": "exists", + "value": "exists" + }, + "query": { + "exists": { + "field": "hadoop.cluster.containers.reserved" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", + "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "layerType": "data", + "size": "xxl", + "textAlign": "center", + "titlePosition": "bottom" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsLegacyMetric" + }, + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 5, + "i": "589a1406-7ccf-49b7-a6b7-618841e3339b", + "w": 8, + "x": 16, + "y": 18 + }, + "panelIndex": "589a1406-7ccf-49b7-a6b7-618841e3339b", + "title": "Number of containers reserved [Metrics Hadoop]", + "type": "lens", + "version": "8.10.2" + } + ], + "timeRestore": false, + "title": "[Metrics Hadoop] Cluster overview", + "version": 1 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2024-04-20T10:14:59.671Z", + "id": "hadoop-cb235590-cd24-11ec-be30-1d9331f0b107", + "managed": false, + "references": [ + { + "id": "metrics-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" }, - "title": "Number of node managers over time [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f", - "w": 8, - "x": 24, - "y": 0 + { + "id": "metrics-*", + "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:indexpattern-datasource-layer-35726819-8a70-4f5e-b150-1626c191f380", + "type": "index-pattern" }, - "panelIndex": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "b880f665-29b3-40b9-bd45-459f3105c645", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "5199984c-035a-4e47-9d4a-d63d01735d8b": { - "columnOrder": [ - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" - ], - "columns": { - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.nodes.active: *" - }, - "isBucketed": false, - "label": "Active Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.nodes.active" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "b880f665-29b3-40b9-bd45-459f3105c645", - "key": "hadoop.cluster.nodes.active", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.nodes.active" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", - "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:4b01387d-bd18-4e16-b860-005e4a71e957", + "type": "index-pattern" }, - "title": "Number of active nodes [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "9d55a200-501c-45bf-94a9-a3c36744865d", - "w": 8, - "x": 32, - "y": 0 + { + "id": "metrics-*", + "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:d846e0a6-42a9-4840-82e4-f217959a63fb", + "type": "index-pattern" }, - "panelIndex": "9d55a200-501c-45bf-94a9-a3c36744865d", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "b98d7344-acd9-4e73-a62b-a34aee54465c", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "5199984c-035a-4e47-9d4a-d63d01735d8b": { - "columnOrder": [ - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" - ], - "columns": { - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.nodes.lost: *" - }, - "isBucketed": false, - "label": "Lost Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.nodes.lost" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "b98d7344-acd9-4e73-a62b-a34aee54465c", - "key": "hadoop.cluster.nodes.lost", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.nodes.lost" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", - "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:c50d822a-587a-4198-90c1-847fe7355fa1", + "type": "index-pattern" }, - "title": "Number of lost nodes [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886", - "w": 8, - "x": 40, - "y": 0 + { + "id": "metrics-*", + "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:e78473e3-a006-46cf-bada-e75ab9c4b279", + "type": "index-pattern" }, - "panelIndex": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "1965ff1a-73c8-4f6c-be65-230190b5ca22", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "5199984c-035a-4e47-9d4a-d63d01735d8b": { - "columnOrder": [ - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04" - ], - "columns": { - "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.nodes.unhealthy: *" - }, - "isBucketed": false, - "label": "Unhealthy Nodes", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.nodes.unhealthy" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "1965ff1a-73c8-4f6c-be65-230190b5ca22", - "key": "hadoop.cluster.nodes.unhealthy", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.nodes.unhealthy" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "d42e51f5-5ec7-48ad-80f4-acdd5f9b7f04", - "layerId": "5199984c-035a-4e47-9d4a-d63d01735d8b", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" }, - "title": "Number of unhealthy nodes [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 18, - "i": "d78560b6-a798-4b6b-b702-252c1319af9c", - "w": 24, - "x": 24, - "y": 5 + { + "id": "metrics-*", + "name": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f:b880f665-29b3-40b9-bd45-459f3105c645", + "type": "index-pattern" }, - "panelIndex": "d78560b6-a798-4b6b-b702-252c1319af9c", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-faa4a447-faac-4424-9e42-5a29b0ad1137", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "6289f262-f60c-4d6c-9480-c8d037633755", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "c26ffbdc-b9a3-4a13-870a-6e83389b4007", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "70536a90-2ac2-4561-a8ed-1d0b7897fb04", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "faa4a447-faac-4424-9e42-5a29b0ad1137": { - "columnOrder": [ - "55139a89-d014-4b5e-9195-8d7874ae4a47", - "aac01fd6-85b3-4678-a105-90b6bfef291a", - "2c271321-b9d9-4fc0-8bb4-0483f527c16b", - "88d60efa-e82b-43e6-bd18-e523c386af79" - ], - "columns": { - "2c271321-b9d9-4fc0-8bb4-0483f527c16b": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.applications.pending: *" - }, - "isBucketed": false, - "label": "Pending", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.applications.pending" - }, - "55139a89-d014-4b5e-9195-8d7874ae4a47": { - "customLabel": true, - "dataType": "date", - "isBucketed": true, - "label": "Timestamp", - "operationType": "date_histogram", - "params": { - "dropPartials": false, - "includeEmptyRows": false, - "interval": "auto" - }, - "scale": "interval", - "sourceField": "@timestamp" - }, - "88d60efa-e82b-43e6-bd18-e523c386af79": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.applications.failed: *" - }, - "isBucketed": false, - "label": "Failed", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.applications.failed" - }, - "aac01fd6-85b3-4678-a105-90b6bfef291a": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.applications.running: *" - }, - "isBucketed": false, - "label": "Running", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.applications.running" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "6289f262-f60c-4d6c-9480-c8d037633755", - "key": "hadoop.cluster.applications.running", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.applications.running" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "c26ffbdc-b9a3-4a13-870a-6e83389b4007", - "key": "hadoop.cluster.applications.pending", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.applications.pending" - } - } - }, - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "70536a90-2ac2-4561-a8ed-1d0b7897fb04", - "key": "hadoop.cluster.applications.failed", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.applications.failed" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "axisTitlesVisibilitySettings": { - "x": true, - "yLeft": true, - "yRight": true - }, - "gridlinesVisibilitySettings": { - "x": false, - "yLeft": false, - "yRight": true - }, - "layers": [ - { - "accessors": [ - "aac01fd6-85b3-4678-a105-90b6bfef291a", - "2c271321-b9d9-4fc0-8bb4-0483f527c16b", - "88d60efa-e82b-43e6-bd18-e523c386af79" - ], - "layerId": "faa4a447-faac-4424-9e42-5a29b0ad1137", - "layerType": "data", - "position": "top", - "seriesType": "area", - "showGridlines": false, - "xAccessor": "55139a89-d014-4b5e-9195-8d7874ae4a47", - "yConfig": [ - { - "axisMode": "left", - "forAccessor": "aac01fd6-85b3-4678-a105-90b6bfef291a" - }, - { - "axisMode": "left", - "forAccessor": "2c271321-b9d9-4fc0-8bb4-0483f527c16b" - }, - { - "axisMode": "left", - "forAccessor": "88d60efa-e82b-43e6-bd18-e523c386af79" - } - ] - } - ], - "legend": { - "isVisible": true, - "position": "top", - "showSingleSeries": true - }, - "preferredSeriesType": "area", - "title": "Empty XY chart", - "valueLabels": "hide", - "xTitle": "Timestamp", - "yTitle": "Applications" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsXY" - }, - "enhancements": {}, - "hidePanelTitles": false, - "type": "lens" + { + "id": "metrics-*", + "name": "9d55a200-501c-45bf-94a9-a3c36744865d:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" }, - "title": "Number of applications over time [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272", - "w": 8, - "x": 0, - "y": 18 + { + "id": "metrics-*", + "name": "9d55a200-501c-45bf-94a9-a3c36744865d:b98d7344-acd9-4e73-a62b-a34aee54465c", + "type": "index-pattern" }, - "panelIndex": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "446aea27-ddc3-4f7b-8623-2fe664c9af1d", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { - "columnOrder": [ - "36a555dc-487f-4e1c-a3ae-2afa0f535519" - ], - "columns": { - "36a555dc-487f-4e1c-a3ae-2afa0f535519": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.containers.allocated: *" - }, - "isBucketed": false, - "label": "Containers Allocated", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.containers.allocated" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "446aea27-ddc3-4f7b-8623-2fe664c9af1d", - "key": "hadoop.cluster.containers.allocated", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.containers.allocated" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", - "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", + "type": "index-pattern" }, - "title": "Number of containers allocated [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "3078cc84-cf45-47c1-9761-a2cf0be99c2e", - "w": 8, - "x": 8, - "y": 18 + { + "id": "metrics-*", + "name": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886:1965ff1a-73c8-4f6c-be65-230190b5ca22", + "type": "index-pattern" }, - "panelIndex": "3078cc84-cf45-47c1-9761-a2cf0be99c2e", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "022a0e4d-13e0-47d7-8fd4-7fc3671f864d", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { - "columnOrder": [ - "36a555dc-487f-4e1c-a3ae-2afa0f535519" - ], - "columns": { - "36a555dc-487f-4e1c-a3ae-2afa0f535519": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.containers.pending: *" - }, - "isBucketed": false, - "label": "Containers Pending", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.containers.pending" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "022a0e4d-13e0-47d7-8fd4-7fc3671f864d", - "key": "hadoop.cluster.containers.pending", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.containers.pending" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", - "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "d78560b6-a798-4b6b-b702-252c1319af9c:indexpattern-datasource-layer-faa4a447-faac-4424-9e42-5a29b0ad1137", + "type": "index-pattern" }, - "title": "Number of containers pending [Metrics Hadoop]" - }, - { - "version": "8.7.0", - "type": "lens", - "gridData": { - "h": 5, - "i": "589a1406-7ccf-49b7-a6b7-618841e3339b", - "w": 8, - "x": 16, - "y": 18 + { + "id": "metrics-*", + "name": "d78560b6-a798-4b6b-b702-252c1319af9c:6289f262-f60c-4d6c-9480-c8d037633755", + "type": "index-pattern" }, - "panelIndex": "589a1406-7ccf-49b7-a6b7-618841e3339b", - "embeddableConfig": { - "attributes": { - "references": [ - { - "id": "metrics-*", - "name": "indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d1592d8a-7e50-4768-a449-a05551db392d", - "type": "index-pattern" - } - ], - "state": { - "datasourceStates": { - "formBased": { - "layers": { - "570232b1-bbba-4ae8-aa47-ed60cfefb8fb": { - "columnOrder": [ - "36a555dc-487f-4e1c-a3ae-2afa0f535519" - ], - "columns": { - "36a555dc-487f-4e1c-a3ae-2afa0f535519": { - "customLabel": true, - "dataType": "number", - "filter": { - "language": "kuery", - "query": "hadoop.cluster.containers.reserved: *" - }, - "isBucketed": false, - "label": "Containers Reserved", - "operationType": "last_value", - "params": { - "showArrayValues": true, - "sortField": "@timestamp" - }, - "scale": "ratio", - "sourceField": "hadoop.cluster.containers.reserved" - } - }, - "incompleteColumns": {} - } - } - } - }, - "filters": [ - { - "$state": { - "store": "appState" - }, - "meta": { - "alias": null, - "disabled": false, - "index": "d1592d8a-7e50-4768-a449-a05551db392d", - "key": "hadoop.cluster.containers.reserved", - "negate": false, - "type": "exists", - "value": "exists" - }, - "query": { - "exists": { - "field": "hadoop.cluster.containers.reserved" - } - } - } - ], - "query": { - "language": "kuery", - "query": "" - }, - "visualization": { - "accessor": "36a555dc-487f-4e1c-a3ae-2afa0f535519", - "layerId": "570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "layerType": "data", - "size": "xxl", - "textAlign": "center", - "titlePosition": "bottom" - } - }, - "title": "", - "type": "lens", - "visualizationType": "lnsLegacyMetric" - }, - "enhancements": {}, - "hidePanelTitles": true, - "type": "lens" + { + "id": "metrics-*", + "name": "d78560b6-a798-4b6b-b702-252c1319af9c:c26ffbdc-b9a3-4a13-870a-6e83389b4007", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d78560b6-a798-4b6b-b702-252c1319af9c:70536a90-2ac2-4561-a8ed-1d0b7897fb04", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272:446aea27-ddc3-4f7b-8623-2fe664c9af1d", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "3078cc84-cf45-47c1-9761-a2cf0be99c2e:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "3078cc84-cf45-47c1-9761-a2cf0be99c2e:022a0e4d-13e0-47d7-8fd4-7fc3671f864d", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "589a1406-7ccf-49b7-a6b7-618841e3339b:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", + "type": "index-pattern" }, - "title": "Number of containers reserved [Metrics Hadoop]" - } + { + "id": "metrics-*", + "name": "589a1406-7ccf-49b7-a6b7-618841e3339b:d1592d8a-7e50-4768-a449-a05551db392d", + "type": "index-pattern" + } ], - "timeRestore": false, - "title": "[Metrics Hadoop] Cluster overview", - "version": 1 - }, - "references": [ - { - "id": "metrics-*", - "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:indexpattern-datasource-layer-35726819-8a70-4f5e-b150-1626c191f380", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:4b01387d-bd18-4e16-b860-005e4a71e957", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:d846e0a6-42a9-4840-82e4-f217959a63fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:c50d822a-587a-4198-90c1-847fe7355fa1", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "08fde296-94c6-4dbd-bd1f-77c67e0125e6:e78473e3-a006-46cf-bada-e75ab9c4b279", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "e4ced3fd-72aa-4091-95cf-39d49d5bb17f:b880f665-29b3-40b9-bd45-459f3105c645", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "9d55a200-501c-45bf-94a9-a3c36744865d:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "9d55a200-501c-45bf-94a9-a3c36744865d:b98d7344-acd9-4e73-a62b-a34aee54465c", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886:indexpattern-datasource-layer-5199984c-035a-4e47-9d4a-d63d01735d8b", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "7d51338d-3c9a-4b7a-ae30-6b4efc0d2886:1965ff1a-73c8-4f6c-be65-230190b5ca22", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d78560b6-a798-4b6b-b702-252c1319af9c:indexpattern-datasource-layer-faa4a447-faac-4424-9e42-5a29b0ad1137", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d78560b6-a798-4b6b-b702-252c1319af9c:6289f262-f60c-4d6c-9480-c8d037633755", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d78560b6-a798-4b6b-b702-252c1319af9c:c26ffbdc-b9a3-4a13-870a-6e83389b4007", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "d78560b6-a798-4b6b-b702-252c1319af9c:70536a90-2ac2-4561-a8ed-1d0b7897fb04", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "64c0ea7a-99ee-4c8f-a9cb-e6ea5c855272:446aea27-ddc3-4f7b-8623-2fe664c9af1d", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "3078cc84-cf45-47c1-9761-a2cf0be99c2e:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "3078cc84-cf45-47c1-9761-a2cf0be99c2e:022a0e4d-13e0-47d7-8fd4-7fc3671f864d", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "589a1406-7ccf-49b7-a6b7-618841e3339b:indexpattern-datasource-layer-570232b1-bbba-4ae8-aa47-ed60cfefb8fb", - "type": "index-pattern" - }, - { - "id": "metrics-*", - "name": "589a1406-7ccf-49b7-a6b7-618841e3339b:d1592d8a-7e50-4768-a449-a05551db392d", - "type": "index-pattern" - } - ], - "managed": false + "type": "dashboard", + "typeMigrationVersion": "8.9.0" } \ No newline at end of file diff --git a/packages/hadoop/manifest.yml b/packages/hadoop/manifest.yml index 29f4d217e62c..95d9a39ed6aa 100644 --- a/packages/hadoop/manifest.yml +++ b/packages/hadoop/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.0" name: hadoop title: Hadoop -version: "1.5.2" +version: "1.6.0" description: Collect metrics from Apache Hadoop with Elastic Agent. type: integration categories: diff --git a/packages/http_endpoint/_dev/build/docs/README.md b/packages/http_endpoint/_dev/build/docs/README.md deleted file mode 100644 index b0fa7e8b34f1..000000000000 --- a/packages/http_endpoint/_dev/build/docs/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Custom HTTP Endpoint Log integration - -The custom HTTP Endpoint Log integration initializes a listening HTTP server that collects incoming HTTP POST requests containing a JSON body. The body must be either an object or an array of objects. Any other data types will result in an HTTP 400 (Bad Request) response. For arrays, one document is created for each object in the array. - -These are the possible response codes from the server. - -| HTTP Response Code | Name | Reason | -|-------------------- |------------------------ |-------------------------------------------------------------------- | -| 200 | OK | Returned on success. | -| 400 | Bad Request | Returned if JSON body decoding fails. | -| 401 | Unauthorized | Returned when basic auth, secret header, or HMAC validation fails. | -| 405 | Method Not Allowed | Returned if methods other than POST are used. | -| 406 | Not Acceptable | Returned if the POST request does not contain a body. | -| 415 | Unsupported Media Type | Returned if the Content-Type is not application/json. | -| 500 | Internal Server Error | Returned if an I/O error occurs reading the request. | - - -Custom ingest pipelines may be added by adding the name to the pipeline configuration option, creating custom ingest pipelines can be done either through the API or the [Ingest Node Pipeline UI](/app/management/ingest/ingest_pipelines/). diff --git a/packages/http_endpoint/_dev/test/system/test-http-config.yml b/packages/http_endpoint/_dev/test/system/test-http-config.yml new file mode 100644 index 000000000000..2ce887e221e8 --- /dev/null +++ b/packages/http_endpoint/_dev/test/system/test-http-config.yml @@ -0,0 +1,13 @@ +service: test-webhook-http +service_notify_signal: SIGHUP +input: http_endpoint +vars: + data_stream.dataset: http_endpoint.http_endpoint + preserve_original_event: true + listen_address: 0.0.0.0 + url: /json + prefix: event + listen_port: 9515 + basic_auth: true + username: abc123 + password: abc123 diff --git a/packages/http_endpoint/data_stream/generic/agent/stream/http.yml.hbs b/packages/http_endpoint/agent/input/http.yml.hbs similarity index 94% rename from packages/http_endpoint/data_stream/generic/agent/stream/http.yml.hbs rename to packages/http_endpoint/agent/input/http.yml.hbs index 0e41a5721376..58b6712bc779 100644 --- a/packages/http_endpoint/data_stream/generic/agent/stream/http.yml.hbs +++ b/packages/http_endpoint/agent/input/http.yml.hbs @@ -9,9 +9,6 @@ prefix: {{prefix}} {{#if pipeline}} pipeline: {{pipeline}} {{/if}} -{{#if preserve_original_event}} -preserve_original_event: {{preserve_original_event}} -{{/if}} {{#if basic_auth}} basic_auth: {{basic_auth}} {{/if}} @@ -61,12 +58,13 @@ include_headers: ssl: {{ssl}} {{/if}} -{{#if tags}} tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} {{#each tags as |tag|}} - {{tag}} {{/each}} -{{/if}} {{#contains "forwarded" tags}} publisher_pipeline.disable_host: true {{/contains}} diff --git a/packages/http_endpoint/changelog.yml b/packages/http_endpoint/changelog.yml index 569e32f48a63..a836ac38062b 100644 --- a/packages/http_endpoint/changelog.yml +++ b/packages/http_endpoint/changelog.yml @@ -1,3 +1,8 @@ +- version: "2.0.0" + changes: + - description: Converted package to input type. + type: enhancement + link: https://github.com/elastic/integrations/pull/9732 - version: "1.16.0" changes: - description: Allow user selection of HTTP method. diff --git a/packages/http_endpoint/data_stream/generic/_dev/test/system/test-http-config.yml b/packages/http_endpoint/data_stream/generic/_dev/test/system/test-http-config.yml deleted file mode 100644 index d571a65ba421..000000000000 --- a/packages/http_endpoint/data_stream/generic/_dev/test/system/test-http-config.yml +++ /dev/null @@ -1,12 +0,0 @@ -service: test-webhook-http -service_notify_signal: SIGHUP -input: http_endpoint -data_stream: - vars: - listen_address: 0.0.0.0 - url: /json - prefix: event - listen_port: 9515 - basic_auth: true - username: abc123 - password: abc123 diff --git a/packages/http_endpoint/data_stream/generic/manifest.yml b/packages/http_endpoint/data_stream/generic/manifest.yml deleted file mode 100644 index 1fbca609a99d..000000000000 --- a/packages/http_endpoint/data_stream/generic/manifest.yml +++ /dev/null @@ -1,182 +0,0 @@ -title: Custom HTTP Endpoint Logs -type: logs -streams: - - input: http_endpoint - description: Collect JSON data from listening HTTP port with Elastic Agent. - title: Custom HTTP Endpoint Logs - template_path: http.yml.hbs - vars: - - name: method - title: HTTP Method - description: This options specifies which HTTP method to accept. - type: select - required: true - show_user: false - options: - - value: POST - text: POST - - value: PUT - text: PUT - - value: PATCH - text: PATCH - default: POST - - name: listen_address - type: text - title: Listen Address - description: | - Bind address for the HTTP listener. Use 0.0.0.0 to listen on all interfaces. - required: true - show_user: true - default: localhost - - name: listen_port - type: text - title: Listen port - description: | - Bind port for the listener. - required: true - show_user: true - default: 8080 - - name: url - type: text - title: URL - description: This options specific which URL path to accept requests on. Defaults to /. - required: false - show_user: true - - name: data_stream.dataset - type: text - title: Dataset name - description: | - Dataset to write data to. Changing the dataset will send the data to a different index. You can't use `-` in the name of a dataset and only valid characters for [Elasticsearch index names](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html). - default: http_endpoint.generic - required: true - show_user: true - - name: pipeline - type: text - title: Ingest Pipeline - description: | - The Ingest Node pipeline ID to be used by the integration. - required: false - show_user: true - - name: preserve_original_event - type: bool - title: Preserve Original Event - description: This option copies the raw unmodified body of the incoming request to the event.original field as a string before sending the event to Elasticsearch. - required: false - show_user: true - - name: prefix - type: text - title: Prefix - description: This option specifies which prefix field the incoming request will be mapped to. - required: false - show_user: false - - name: basic_auth - type: bool - title: Basic Auth - description: Enables or disables HTTP basic auth for each incoming request. If enabled then username and password will also need to be configured. - required: false - show_user: false - - name: username - type: text - title: Username - description: If basic_auth is enabled, this is the username used for authentication against the HTTP listener. Requires password to also be set. - required: false - show_user: false - - name: password - type: password - title: Password - description: If basic_auth is enabled, this is the password used for authentication against the HTTP listener. Requires username to also be set. - required: false - show_user: false - secret: true - - name: secret_header - type: text - title: Secret Header - description: The header to check for a specific value specified by secret.value. Certain webhooks provide the possibility to include a special header and secret to identify the source. - required: false - show_user: false - secret: false - - name: secret_value - type: password - title: Secret Value - description: The secret stored in the header name specified by secret.header. Certain webhooks provide the possibility to include a special header and secret to identify the source. - required: false - show_user: false - secret: true - - name: hmac_header - type: text - title: HMAC Header - description: The name of the header that contains the HMAC signature, for example X-Dropbox-Signature, X-Hub-Signature-256, etc. - required: false - show_user: false - - name: hmac_key - type: password - title: HMAC Key - description: The secret key used to calculate the HMAC signature. Typically, the webhook sender provides this value. - required: false - show_user: false - secret: true - - name: hmac_type - type: text - title: HMAC Type - description: The hash algorithm to use for the HMAC comparison. At this time the only valid values are sha256 or sha1. - required: false - show_user: false - - name: hmac_prefix - type: text - title: HMAC Prefix - description: The prefix for the signature. Certain webhooks prefix the HMAC signature with a value, for example sha256=. - required: false - show_user: false - - name: content_type - type: text - title: Content Type - description: By default the input expects the incoming POST to include a Content-Type of application/json to try to enforce the incoming data to be valid JSON. In certain scenarios when the source of the request is not able to do that, it can be overwritten with another value or set to null. - required: false - show_user: false - - name: response_code - type: text - title: Response Code - description: The HTTP response code returned upon success. Should be in the 2XX range. - required: false - show_user: false - - name: response_body - type: text - title: Response Body - description: The response body returned upon success. Should be a single line JSON string. - required: false - show_user: false - - name: include_headers - type: text - title: Include Headers - description: This options specifies a list of HTTP headers that should be copied from the incoming request and included in the document. All configured headers will always be canonicalized to match the headers of the incoming request. For example, ["content-type"] will become ["Content-Type"] when the filebeat is running. - multi: true - required: false - show_user: false - - name: ssl - type: yaml - title: TLS - description: Options for enabling TLS for the listening webhook endpoint. See the [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html) for a list of all options. - multi: false - required: false - show_user: false - default: | - enabled: false - certificate: "/etc/pki/client/cert.pem" - key: "/etc/pki/client/cert.key" - - name: processors - type: yaml - title: Processors - multi: false - required: false - show_user: false - description: | - Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. - - name: tags - type: text - title: Tags - description: Tags to include in the published event - required: false - default: - - forwarded - multi: true - show_user: true diff --git a/packages/http_endpoint/fields/agent.yml b/packages/http_endpoint/fields/agent.yml new file mode 100644 index 000000000000..230f7bc911d3 --- /dev/null +++ b/packages/http_endpoint/fields/agent.yml @@ -0,0 +1,35 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: >- + OS codename, if any. diff --git a/packages/http_endpoint/data_stream/generic/fields/base-fields.yml b/packages/http_endpoint/fields/base-fields.yml similarity index 94% rename from packages/http_endpoint/data_stream/generic/fields/base-fields.yml rename to packages/http_endpoint/fields/base-fields.yml index 25671cec132b..430aaf543434 100644 --- a/packages/http_endpoint/data_stream/generic/fields/base-fields.yml +++ b/packages/http_endpoint/fields/base-fields.yml @@ -14,7 +14,6 @@ - name: event.dataset type: constant_keyword description: Event dataset - value: http_endpoint.generic - name: "@timestamp" type: date description: Event timestamp. diff --git a/packages/http_endpoint/data_stream/generic/fields/beats.yml b/packages/http_endpoint/fields/beats.yml similarity index 100% rename from packages/http_endpoint/data_stream/generic/fields/beats.yml rename to packages/http_endpoint/fields/beats.yml diff --git a/packages/http_endpoint/data_stream/generic/fields/ecs.yml b/packages/http_endpoint/fields/ecs.yml similarity index 65% rename from packages/http_endpoint/data_stream/generic/fields/ecs.yml rename to packages/http_endpoint/fields/ecs.yml index fd8179d53d81..21845b26f5a3 100644 --- a/packages/http_endpoint/data_stream/generic/fields/ecs.yml +++ b/packages/http_endpoint/fields/ecs.yml @@ -1,5 +1,9 @@ - name: ecs.version external: ecs +- name: event.code + external: ecs +- name: event.created + external: ecs - name: log.level external: ecs - name: message diff --git a/packages/http_endpoint/manifest.yml b/packages/http_endpoint/manifest.yml index 4a6f9e948945..dff840316c59 100644 --- a/packages/http_endpoint/manifest.yml +++ b/packages/http_endpoint/manifest.yml @@ -2,8 +2,8 @@ format_version: "3.0.2" name: http_endpoint title: Custom HTTP Endpoint Logs description: Collect JSON data from listening HTTP port with Elastic Agent. -type: integration -version: "1.16.0" +type: input +version: "2.0.0" conditions: kibana: version: "^8.12.0" @@ -12,12 +12,187 @@ categories: - observability policy_templates: - name: http_endpoint + type: logs title: Custom HTTP Endpoint Logs description: Collect JSON data from listening HTTP port with Elastic Agent. - inputs: - - type: http_endpoint - title: Custom HTTP Endpoint Logs - description: Collect JSON data from listening HTTP port with Elastic Agent. + input: http_endpoint + template_path: http.yml.hbs + vars: + - name: method + title: HTTP Method + description: This options specifies which HTTP method to accept. + type: select + required: true + show_user: false + options: + - value: POST + text: POST + - value: PUT + text: PUT + - value: PATCH + text: PATCH + default: POST + - name: listen_address + type: text + title: Listen Address + description: | + Bind address for the HTTP listener. Use 0.0.0.0 to listen on all interfaces. + required: true + show_user: true + default: localhost + - name: listen_port + type: text + title: Listen port + description: | + Bind port for the listener. + required: true + show_user: true + default: 8080 + - name: url + type: text + title: URL + description: This options specific which URL path to accept requests on. Defaults to /. + required: false + show_user: true + - name: data_stream.dataset + type: text + title: Dataset name + description: | + Dataset to write data to. Changing the dataset will send the data to a different index. You can't use `-` in the name of a dataset and only valid characters for [Elasticsearch index names](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html). + default: http_endpoint.generic + required: true + show_user: true + - name: pipeline + type: text + title: Ingest Pipeline + description: | + The Ingest Node pipeline ID to be used by the integration. + required: false + show_user: true + - name: preserve_original_event + type: bool + title: Preserve Original Event + description: This option copies the raw unmodified body of the incoming request to the event.original field as a string before sending the event to Elasticsearch. + required: false + show_user: true + default: false + - name: prefix + type: text + title: Prefix + description: This option specifies which prefix field the incoming request will be mapped to. + required: false + show_user: false + - name: basic_auth + type: bool + title: Basic Auth + description: Enables or disables HTTP basic auth for each incoming request. If enabled then username and password will also need to be configured. + required: false + show_user: false + - name: username + type: text + title: Username + description: If basic_auth is enabled, this is the username used for authentication against the HTTP listener. Requires password to also be set. + required: false + show_user: false + - name: password + type: password + title: Password + description: If basic_auth is enabled, this is the password used for authentication against the HTTP listener. Requires username to also be set. + required: false + show_user: false + secret: true + - name: secret_header + type: text + title: Secret Header + description: The header to check for a specific value specified by secret.value. Certain webhooks provide the possibility to include a special header and secret to identify the source. + required: false + show_user: false + secret: false + - name: secret_value + type: password + title: Secret Value + description: The secret stored in the header name specified by secret.header. Certain webhooks provide the possibility to include a special header and secret to identify the source. + required: false + show_user: false + secret: true + - name: hmac_header + type: text + title: HMAC Header + description: The name of the header that contains the HMAC signature, for example X-Dropbox-Signature, X-Hub-Signature-256, etc. + required: false + show_user: false + - name: hmac_key + type: password + title: HMAC Key + description: The secret key used to calculate the HMAC signature. Typically, the webhook sender provides this value. + required: false + show_user: false + secret: true + - name: hmac_type + type: text + title: HMAC Type + description: The hash algorithm to use for the HMAC comparison. At this time the only valid values are sha256 or sha1. + required: false + show_user: false + - name: hmac_prefix + type: text + title: HMAC Prefix + description: The prefix for the signature. Certain webhooks prefix the HMAC signature with a value, for example sha256=. + required: false + show_user: false + - name: content_type + type: text + title: Content Type + description: By default the input expects the incoming POST to include a Content-Type of application/json to try to enforce the incoming data to be valid JSON. In certain scenarios when the source of the request is not able to do that, it can be overwritten with another value or set to null. + required: false + show_user: false + - name: response_code + type: text + title: Response Code + description: The HTTP response code returned upon success. Should be in the 2XX range. + required: false + show_user: false + - name: response_body + type: text + title: Response Body + description: The response body returned upon success. Should be a single line JSON string. + required: false + show_user: false + - name: include_headers + type: text + title: Include Headers + description: This options specifies a list of HTTP headers that should be copied from the incoming request and included in the document. All configured headers will always be canonicalized to match the headers of the incoming request. For example, ["content-type"] will become ["Content-Type"] when the filebeat is running. + multi: true + required: false + show_user: false + - name: ssl + type: yaml + title: TLS + description: Options for enabling TLS for the listening webhook endpoint. See the [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html) for a list of all options. + multi: false + required: false + show_user: false + default: | + enabled: false + certificate: "/etc/pki/client/cert.pem" + key: "/etc/pki/client/cert.key" + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: | + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + - name: tags + type: text + title: Tags + description: Tags to include in the published event + required: false + default: + - forwarded + multi: true + show_user: true icons: - src: "/img/icon.svg" type: "image/svg+xml" diff --git a/packages/http_endpoint/data_stream/generic/sample_event.json b/packages/http_endpoint/sample_event.json similarity index 50% rename from packages/http_endpoint/data_stream/generic/sample_event.json rename to packages/http_endpoint/sample_event.json index dbe815e5acb7..a5e5c3ebf279 100644 --- a/packages/http_endpoint/data_stream/generic/sample_event.json +++ b/packages/http_endpoint/sample_event.json @@ -1,35 +1,36 @@ { - "@timestamp": "2022-02-21T20:47:45.698Z", + "@timestamp": "2024-04-30T07:17:15.883Z", "agent": { - "ephemeral_id": "1b28b196-5728-4dcb-aba9-13d6c4182de9", - "id": "d5d45ca4-6db0-4931-bf28-7de9e83c2223", + "ephemeral_id": "96009d3d-576a-4f1b-b10d-0c17a0fc276d", + "id": "11a5b254-bd1f-402d-9d5c-593cbebda407", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.0.0" + "version": "8.12.1" }, "data_stream": { - "dataset": "http_endpoint.generic", + "dataset": "http_endpoint.http_endpoint", "namespace": "ep", "type": "logs" }, "ecs": { - "version": "8.11.0" + "version": "8.0.0" }, "elastic_agent": { - "id": "d5d45ca4-6db0-4931-bf28-7de9e83c2223", + "id": "11a5b254-bd1f-402d-9d5c-593cbebda407", "snapshot": false, - "version": "8.0.0" + "version": "8.12.1" }, "event": { "agent_id_status": "verified", - "dataset": "http_endpoint.generic", - "ingested": "2022-02-21T20:47:46Z", + "dataset": "http_endpoint.http_endpoint", + "ingested": "2024-04-30T07:17:25Z", "original": "message" }, "input": { "type": "http_endpoint" }, "tags": [ + "preserve_original_event", "forwarded" ] -} +} \ No newline at end of file diff --git a/packages/juniper_junos/changelog.yml b/packages/juniper_junos/changelog.yml index 87f4fc8eaf2d..aae7b3be1826 100644 --- a/packages/juniper_junos/changelog.yml +++ b/packages/juniper_junos/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.10.2" + changes: + - description: Define missing fields + type: bugfix + link: https://github.com/elastic/integrations/pulls/9657 - version: "0.10.1" changes: - description: Changed owners diff --git a/packages/juniper_junos/data_stream/log/fields/base-fields.yml b/packages/juniper_junos/data_stream/log/fields/base-fields.yml index 9def860af3a9..c88ea3ffe77a 100644 --- a/packages/juniper_junos/data_stream/log/fields/base-fields.yml +++ b/packages/juniper_junos/data_stream/log/fields/base-fields.yml @@ -27,6 +27,12 @@ example: /var/log/fun-times.log ignore_above: 1024 type: keyword +- name: log.file.device_id + description: Device Id of the log file this event came from. + type: keyword +- name: log.file.inode + type: keyword + description: Inode of the log file this event came from. - name: log.source.address description: Source address from which the log event was read / sent from. type: keyword diff --git a/packages/juniper_junos/docs/README.md b/packages/juniper_junos/docs/README.md index febc27607a82..899e0a9055a9 100644 --- a/packages/juniper_junos/docs/README.md +++ b/packages/juniper_junos/docs/README.md @@ -177,6 +177,8 @@ An example event for `log` looks as following: | http.request.method | HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. | keyword | | http.request.referrer | Referrer for this HTTP request. | keyword | | input.type | Type of Filebeat input. | keyword | +| log.file.device_id | Device Id of the log file this event came from. | keyword | +| log.file.inode | Inode of the log file this event came from. | keyword | | log.file.path | Full path to the log file this event came from. | keyword | | log.flags | Flags for the log file. | keyword | | log.level | Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`. | keyword | diff --git a/packages/juniper_junos/manifest.yml b/packages/juniper_junos/manifest.yml index 2fdc01018dc5..f3b6adfe7f32 100644 --- a/packages/juniper_junos/manifest.yml +++ b/packages/juniper_junos/manifest.yml @@ -1,7 +1,7 @@ format_version: 1.0.0 name: juniper_junos title: Juniper JunOS (Deprecated) -version: "0.10.1" +version: "0.10.2" description: Deprecated. Use the Juniper SRX package instead. categories: ["network", "security"] release: experimental diff --git a/packages/juniper_netscreen/changelog.yml b/packages/juniper_netscreen/changelog.yml index 56fdfaf3de94..0dc439149627 100644 --- a/packages/juniper_netscreen/changelog.yml +++ b/packages/juniper_netscreen/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.10.2" + changes: + - description: Define missing fields + type: bugfix + link: https://github.com/elastic/integrations/pulls/9658 - version: "0.10.1" changes: - description: Changed owners diff --git a/packages/juniper_netscreen/data_stream/log/fields/base-fields.yml b/packages/juniper_netscreen/data_stream/log/fields/base-fields.yml index 50748c8646f1..0814e6b03425 100644 --- a/packages/juniper_netscreen/data_stream/log/fields/base-fields.yml +++ b/packages/juniper_netscreen/data_stream/log/fields/base-fields.yml @@ -27,6 +27,12 @@ example: /var/log/fun-times.log ignore_above: 1024 type: keyword +- name: log.file.device_id + description: Device Id of the log file this event came from. + type: keyword +- name: log.file.inode + type: keyword + description: Inode of the log file this event came from. - name: log.source.address description: Source address from which the log event was read / sent from. type: keyword diff --git a/packages/juniper_netscreen/docs/README.md b/packages/juniper_netscreen/docs/README.md index 938b99c662a7..6b9beb0effb3 100644 --- a/packages/juniper_netscreen/docs/README.md +++ b/packages/juniper_netscreen/docs/README.md @@ -164,6 +164,8 @@ An example event for `log` looks as following: | http.request.method | HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. | keyword | | http.request.referrer | Referrer for this HTTP request. | keyword | | input.type | Type of Filebeat input. | keyword | +| log.file.device_id | Device Id of the log file this event came from. | keyword | +| log.file.inode | Inode of the log file this event came from. | keyword | | log.file.path | Full path to the log file this event came from. | keyword | | log.flags | Flags for the log file. | keyword | | log.level | Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`. | keyword | diff --git a/packages/juniper_netscreen/manifest.yml b/packages/juniper_netscreen/manifest.yml index a3612659f43c..a338b66fbe0f 100644 --- a/packages/juniper_netscreen/manifest.yml +++ b/packages/juniper_netscreen/manifest.yml @@ -1,7 +1,7 @@ format_version: 1.0.0 name: juniper_netscreen title: Juniper NetScreen (Deprecated) -version: "0.10.1" +version: "0.10.2" description: Deprecated. Juniper NetScreen is no longer supported. categories: ["network", "security", "firewall_security"] release: experimental diff --git a/packages/kubernetes/changelog.yml b/packages/kubernetes/changelog.yml index c06f25e6c3f0..24cce5727d9f 100644 --- a/packages/kubernetes/changelog.yml +++ b/packages/kubernetes/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: 1.61.0 + changes: + - description: Remove deprecated fields and add missing status.last_terminated_reason metric + type: enhancement + link: https://github.com/elastic/integrations/pull/9736 - version: 1.60.0 changes: - description: Updating `Memory used vs total memory` and `Cores used vs total cores` visualisations in Cluster Overview Dashboard diff --git a/packages/kubernetes/data_stream/state_container/fields/fields.yml b/packages/kubernetes/data_stream/state_container/fields/fields.yml index 0bfa93518522..fe439a8960f0 100644 --- a/packages/kubernetes/data_stream/state_container/fields/fields.yml +++ b/packages/kubernetes/data_stream/state_container/fields/fields.yml @@ -25,8 +25,13 @@ - name: reason dimension: true type: keyword - description: | - Waiting (ContainerCreating, CrashLoopBackoff, ErrImagePull, ImagePullBackoff) or termination (Completed, ContainerCannotRun, Error, OOMKilled) reason. + description: > + The reason the container is currently in waiting (ContainerCreating, CrashLoopBackoff, ErrImagePull, + ImagePullBackoff) or terminated (Completed, ContainerCannotRun, Error, OOMKilled) state. + - name: last_terminated_reason + type: keyword + description: > + The last reason the container was in terminated state (Completed, ContainerCannotRun, Error or OOMKilled). - name: cpu type: group fields: @@ -40,16 +45,6 @@ metric_type: gauge description: | Container CPU requested cores - - name: limit.nanocores - type: long - metric_type: gauge - description: | - Container CPU nanocores limit - - name: request.nanocores - type: long - metric_type: gauge - description: | - Container CPU requested nanocores - name: memory type: group fields: diff --git a/packages/kubernetes/docs/kube-state-metrics.md b/packages/kubernetes/docs/kube-state-metrics.md index 27657dda9e42..844d70d3aca1 100644 --- a/packages/kubernetes/docs/kube-state-metrics.md +++ b/packages/kubernetes/docs/kube-state-metrics.md @@ -193,16 +193,15 @@ An example event for `state_container` looks as following: | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | | | | kubernetes.annotations.\* | Kubernetes annotations map | object | | | | kubernetes.container.cpu.limit.cores | Container CPU cores limit | float | | gauge | -| kubernetes.container.cpu.limit.nanocores | Container CPU nanocores limit | long | | gauge | | kubernetes.container.cpu.request.cores | Container CPU requested cores | float | | gauge | -| kubernetes.container.cpu.request.nanocores | Container CPU requested nanocores | long | | gauge | | kubernetes.container.id | Container id | keyword | | | | kubernetes.container.memory.limit.bytes | Container memory limit in bytes | long | byte | gauge | | kubernetes.container.memory.request.bytes | Container requested memory in bytes | long | byte | gauge | | kubernetes.container.name | Kubernetes container name | keyword | | | +| kubernetes.container.status.last_terminated_reason | The last reason the container was in terminated state (Completed, ContainerCannotRun, Error or OOMKilled). | keyword | | | | kubernetes.container.status.phase | Container phase (running, waiting, terminated) | keyword | | | | kubernetes.container.status.ready | Container ready status | boolean | | | -| kubernetes.container.status.reason | Waiting (ContainerCreating, CrashLoopBackoff, ErrImagePull, ImagePullBackoff) or termination (Completed, ContainerCannotRun, Error, OOMKilled) reason. | keyword | | | +| kubernetes.container.status.reason | The reason the container is currently in waiting (ContainerCreating, CrashLoopBackoff, ErrImagePull, ImagePullBackoff) or terminated (Completed, ContainerCannotRun, Error, OOMKilled) state. | keyword | | | | kubernetes.container.status.restarts | Container restarts count | integer | | counter | | kubernetes.cronjob.name | Name of the CronJob to which the Pod belongs | keyword | | | | kubernetes.daemonset.name | Kubernetes daemonset name | keyword | | | diff --git a/packages/kubernetes/manifest.yml b/packages/kubernetes/manifest.yml index 1b64c5abe9eb..22ef5b032dea 100644 --- a/packages/kubernetes/manifest.yml +++ b/packages/kubernetes/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.2 name: kubernetes title: Kubernetes -version: 1.60.0 +version: 1.61.0 description: Collect logs and metrics from Kubernetes clusters with Elastic Agent. type: integration categories: diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/docker-compose.yml b/packages/microsoft_exchange_server/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 000000000000..ca12fbc6e116 --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3.0" +services: + exchange_server: + image: alpine + volumes: + - ./sample_logs:/sample_logs:ro + - ${SERVICE_LOGS_DIR}:/var/log + command: /bin/sh -c "cp /sample_logs/* /var/log/" diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Imap4.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Imap4.log new file mode 100755 index 000000000000..0427d6662990 --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Imap4.log @@ -0,0 +1 @@ +2024-01-24T15:30:19.847Z,00000000000ABC12,2,1.2.3.4:143,10.11.12.13:65468,example123,118,31,34,authenticate,PLAIN,"R=OK;Msg=""Proxy:Host123.domain.tld:1993:SSL;ProxySuccess"";LiveIdAR=OK;ActivityContextData=0cb2fd35-94c0-44de-9860-134d27654078", diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Pop3.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Pop3.log new file mode 100755 index 000000000000..67c85df3a144 --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/imappop_Pop3.log @@ -0,0 +1 @@ +2024-01-24T15:31:51.067Z,00000000000ABC12,1,1.2.3.4:110,10.11.12.13:12345,ccw.altitude,1,17,5,user,ccw.altitude,R=OK, diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpRecive.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpRecive.log new file mode 100755 index 000000000000..9a842c79a16d --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpRecive.log @@ -0,0 +1 @@ +2024-01-25T15:14:39.031Z,NETBIOS\\Default Frontend NETBIOS,08DC1DB8591B229A,2,10.11.12.13:25,10.11.12.14:53228,<,EHLO mgt.my.domain.tld, diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpSend.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpSend.log new file mode 100755 index 000000000000..7d15b20de35e --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/smtp_SmtpSend.log @@ -0,0 +1 @@ +2024-01-25T15:14:39.460Z,Inbound Proxy Internal Send Connector,08DC1DB8591B22A0,1,,10.11.12.13:2525,*,,attempting to connect diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-httpproxy.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-httpproxy.log new file mode 100755 index 000000000000..ba3975e6fbee --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-httpproxy.log @@ -0,0 +1 @@ +2024-01-24T15:26:47.957Z,3422ea93-768f-4cd4-8b0c-578038deb0b2,15,1,2507,35,R:{750498CA-0EBD-4E7F-B2F6-377AD1BDD198}:20373;RT:Execute;CI:{FF8D5880-5A7A-4AF7-8DDA-8F662BD6BCB6}:155680117;CID:{FF8D5880-5A7A-4AF7-8DDA-8F662BD6BCB6},Mapi,mail.domain.tld,/mapi/emsmdb/,,Negotiate,true,DOMAIN\user,domain.tld,MailboxGuid~0aa89cf8-aa07-4103-8a1d-ca9e619f223e,Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.16731; Pro),10.12.13.14,Host123,200,200,,POST,Proxy,Host456.domain.tld,15.01.2507.000,CrossForest,MailboxGuidWithDomain,Database~a6c4dbb1-3265-4fbf-9dc6-754dffd67275~~2024-02-23T15:26:43,,,70,132,,,0,1,,0,,0,,0,0,,0,10,0,0,0,0,3,0,0,0,2,0,10,0,4,7,7,7,10,,?MailboxId=0e36a769-e2a9-4d1d-98df-80be2753326c@domain.tld,,BeginRequest=2024-01-24T15:26:47.947Z;CorrelationID=;ProxyState-Run=None;FEAuth=BEVersion-1942063563;BeginGetRequestStream=2024-01-24T15:26:47.953Z;OnRequestStreamReady=2024-01-24T15:26:47.953Z;BeginGetResponse=2024-01-24T15:26:47.953Z;OnResponseReady=2024-01-24T15:26:47.957Z;EndGetResponse=2024-01-24T15:26:47.957Z;ProxyState-Complete=ProxyResponseData;SharedCacheGuard=0;EndRequest=2024-01-24T15:26:47.957Z;,,,|RoutingDB:0cb2fd35-94c0-44de-9860-134d27654078,,,CafeV1 diff --git a/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-messagetracking.log b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-messagetracking.log new file mode 100755 index 000000000000..6a83935be5c4 --- /dev/null +++ b/packages/microsoft_exchange_server/_dev/deploy/docker/sample_logs/test-messagetracking.log @@ -0,0 +1,4 @@ +2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005 +2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005 +2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005 +2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035 diff --git a/packages/microsoft_exchange_server/changelog.yml b/packages/microsoft_exchange_server/changelog.yml index 4de89e3a3af5..14a8ceca491d 100644 --- a/packages/microsoft_exchange_server/changelog.yml +++ b/packages/microsoft_exchange_server/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.0.0" + changes: + - description: GA of Integration, Add Dashbord Panel Titles & added System Tests + type: enhancement + link: https://github.com/elastic/integrations/pull/9560 - version: "0.1.2" changes: - description: Fix Recipientstatus field type, add custom processor support & adjust docs diff --git a/packages/microsoft_exchange_server/data_stream/httpproxy/_dev/test/system/test-default-config.yml b/packages/microsoft_exchange_server/data_stream/httpproxy/_dev/test/system/test-default-config.yml new file mode 100644 index 000000000000..445b0f0ba14d --- /dev/null +++ b/packages/microsoft_exchange_server/data_stream/httpproxy/_dev/test/system/test-default-config.yml @@ -0,0 +1,11 @@ +service: exchange_server +input: filestream +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/test-httpproxy.log" + preserve_original_event: true +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.offset diff --git a/packages/microsoft_exchange_server/data_stream/httpproxy/fields/ecs.yml b/packages/microsoft_exchange_server/data_stream/httpproxy/fields/ecs.yml index 2b27b8981ddc..ab38f7095ac5 100644 --- a/packages/microsoft_exchange_server/data_stream/httpproxy/fields/ecs.yml +++ b/packages/microsoft_exchange_server/data_stream/httpproxy/fields/ecs.yml @@ -18,3 +18,7 @@ name: tags - external: ecs name: user.name +- external: ecs + name: ecs.version +- external: ecs + name: log.file.path diff --git a/packages/microsoft_exchange_server/data_stream/httpproxy/fields/fields.yml b/packages/microsoft_exchange_server/data_stream/httpproxy/fields/fields.yml index fff82215084d..c7c460f67eb7 100644 --- a/packages/microsoft_exchange_server/data_stream/httpproxy/fields/fields.yml +++ b/packages/microsoft_exchange_server/data_stream/httpproxy/fields/fields.yml @@ -136,3 +136,11 @@ type: ip - name: microsoft.exchange.clientipaddress_internal type: ip +- name: input.type + type: keyword +- name: log.file.device_id + type: keyword +- name: log.file.inode + type: keyword +- name: log.offset + type: keyword diff --git a/packages/microsoft_exchange_server/data_stream/imap4_pop3/_dev/test/system/test-default-config.yml b/packages/microsoft_exchange_server/data_stream/imap4_pop3/_dev/test/system/test-default-config.yml new file mode 100644 index 000000000000..9f2f39765e3f --- /dev/null +++ b/packages/microsoft_exchange_server/data_stream/imap4_pop3/_dev/test/system/test-default-config.yml @@ -0,0 +1,11 @@ +service: exchange_server +input: filestream +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/imappop_*.log" + preserve_original_event: true +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.offset diff --git a/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/ecs.yml b/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/ecs.yml index e404a5c3aa53..03721be9b7ec 100644 --- a/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/ecs.yml +++ b/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/ecs.yml @@ -6,3 +6,5 @@ name: source.ip - external: ecs name: tags +- external: ecs + name: ecs.version diff --git a/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/fields.yml b/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/fields.yml index f892677c4d60..b8eb453c7173 100644 --- a/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/fields.yml +++ b/packages/microsoft_exchange_server/data_stream/imap4_pop3/fields/fields.yml @@ -24,3 +24,11 @@ type: keyword - name: microsoft.exchange.logtype type: keyword +- name: input.type + type: keyword +- name: log.file.device_id + type: keyword +- name: log.file.inode + type: keyword +- name: log.offset + type: keyword diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/system/test-default-config.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/system/test-default-config.yml new file mode 100644 index 000000000000..1b036494a4f7 --- /dev/null +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/system/test-default-config.yml @@ -0,0 +1,11 @@ +service: exchange_server +input: filestream +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/test-messagetracking.log" + preserve_original_event: true +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.offset diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/ecs.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/ecs.yml index 274f45cc7ba5..791147321250 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/ecs.yml +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/ecs.yml @@ -26,3 +26,7 @@ name: network.bytes - external: ecs name: tags +- external: ecs + name: ecs.version +- external: ecs + name: log.file.path diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml index 3375724ba188..774e11c1a6f5 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/fields/fields.yml @@ -9,7 +9,7 @@ - name: microsoft.exchange.networkmessageid type: keyword - name: microsoft.exchange.recipientstatus - type: keyword + type: keyword - name: microsoft.exchange.recipientcount type: long - name: microsoft.exchange.relatedrecipientaddress @@ -36,3 +36,11 @@ type: keyword - name: microsoft.exchange.logtype type: keyword +- name: input.type + type: keyword +- name: log.file.device_id + type: keyword +- name: log.file.inode + type: keyword +- name: log.offset + type: keyword diff --git a/packages/microsoft_exchange_server/data_stream/smtp/_dev/test/system/test-default-config.yml b/packages/microsoft_exchange_server/data_stream/smtp/_dev/test/system/test-default-config.yml new file mode 100644 index 000000000000..f0e79391baae --- /dev/null +++ b/packages/microsoft_exchange_server/data_stream/smtp/_dev/test/system/test-default-config.yml @@ -0,0 +1,11 @@ +service: exchange_server +input: filestream +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/smtp_*.log" + preserve_original_event: true +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.offset diff --git a/packages/microsoft_exchange_server/data_stream/smtp/fields/ecs.yml b/packages/microsoft_exchange_server/data_stream/smtp/fields/ecs.yml index ddc5f4b0da3f..d17f2eea967c 100644 --- a/packages/microsoft_exchange_server/data_stream/smtp/fields/ecs.yml +++ b/packages/microsoft_exchange_server/data_stream/smtp/fields/ecs.yml @@ -4,3 +4,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: ecs.version diff --git a/packages/microsoft_exchange_server/data_stream/smtp/fields/fields.yml b/packages/microsoft_exchange_server/data_stream/smtp/fields/fields.yml index 666f4652f176..8eaff29b0f82 100644 --- a/packages/microsoft_exchange_server/data_stream/smtp/fields/fields.yml +++ b/packages/microsoft_exchange_server/data_stream/smtp/fields/fields.yml @@ -16,3 +16,11 @@ type: keyword - name: microsoft.exchange.logtype type: keyword +- name: input.type + type: keyword +- name: log.file.device_id + type: keyword +- name: log.file.inode + type: keyword +- name: log.offset + type: keyword diff --git a/packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-8e9d55c5-637a-4fd8-b53b-9501e98a8e88.json b/packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-66a4ce40-1a00-4ced-9547-7e96def93f02.json similarity index 94% rename from packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-8e9d55c5-637a-4fd8-b53b-9501e98a8e88.json rename to packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-66a4ce40-1a00-4ced-9547-7e96def93f02.json index cbafca633072..a9442d17b6fc 100644 --- a/packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-8e9d55c5-637a-4fd8-b53b-9501e98a8e88.json +++ b/packages/microsoft_exchange_server/kibana/dashboard/microsoft_exchange_server-66a4ce40-1a00-4ced-9547-7e96def93f02.json @@ -4,7 +4,7 @@ "chainingSystem": "HIERARCHICAL", "controlStyle": "oneLine", "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", - "panelsJSON": "{\"a5fe2192-b77c-4f16-888e-4e59fe064c78\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"a5fe2192-b77c-4f16-888e-4e59fe064c78\",\"fieldName\":\"microsoft.exchange.anchormailbox\",\"title\":\"Anchormailbox\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}},\"7c8291ec-dc6d-4fa0-8d67-bb53efdf6c57\":{\"type\":\"optionsListControl\",\"order\":1,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"7c8291ec-dc6d-4fa0-8d67-bb53efdf6c57\",\"fieldName\":\"microsoft.exchange.authenticateduser\",\"title\":\"Authenticated user\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}},\"f542c63c-4265-4ebc-a9d6-7278f4d3976a\":{\"type\":\"optionsListControl\",\"order\":2,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"f542c63c-4265-4ebc-a9d6-7278f4d3976a\",\"fieldName\":\"microsoft.exchange.urlhost\",\"title\":\"URL Host\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}}}" + "panelsJSON": "{\"b5f2cda4-ccb5-442f-a766-dddfc5e8826d\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"b5f2cda4-ccb5-442f-a766-dddfc5e8826d\",\"fieldName\":\"microsoft.exchange.anchormailbox\",\"title\":\"Anchormailbox\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}},\"ab5425b5-a5b1-41f5-bd66-2a9f036ef103\":{\"type\":\"optionsListControl\",\"order\":1,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"ab5425b5-a5b1-41f5-bd66-2a9f036ef103\",\"fieldName\":\"microsoft.exchange.authenticateduser\",\"title\":\"Authenticated user\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}},\"7514f639-d5c3-4623-a69d-960608a4cb51\":{\"type\":\"optionsListControl\",\"order\":2,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"7514f639-d5c3-4623-a69d-960608a4cb51\",\"fieldName\":\"microsoft.exchange.urlhost\",\"title\":\"URL Host\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"wildcard\",\"enhancements\":{}}}}" }, "description": "", "kibanaSavedObjectMeta": { @@ -40,7 +40,7 @@ } }, "optionsJSON": { - "hidePanelTitles": true, + "hidePanelTitles": false, "syncColors": false, "syncCursor": true, "syncTooltips": false, @@ -142,12 +142,12 @@ }, "gridData": { "h": 6, - "i": "d2e19276-b24c-4239-ab0f-3b9c328fb252", + "i": "35ad8ad6-63a5-4a0d-a034-9e5324bc6a6e", "w": 8, "x": 0, "y": 0 }, - "panelIndex": "d2e19276-b24c-4239-ab0f-3b9c328fb252", + "panelIndex": "35ad8ad6-63a5-4a0d-a034-9e5324bc6a6e", "type": "lens" }, { @@ -248,12 +248,12 @@ }, "gridData": { "h": 6, - "i": "8a0f3277-f4af-40f5-9526-0b8be36b2daf", + "i": "30970f92-d438-4033-b472-cd7716e8a8ab", "w": 8, "x": 8, "y": 0 }, - "panelIndex": "8a0f3277-f4af-40f5-9526-0b8be36b2daf", + "panelIndex": "30970f92-d438-4033-b472-cd7716e8a8ab", "type": "lens" }, { @@ -354,12 +354,12 @@ }, "gridData": { "h": 6, - "i": "8cd05d59-543a-4b41-9bdd-49b7b8e2cd31", + "i": "90e7fb8c-9bfe-4787-aafc-b9397b4d305a", "w": 8, "x": 16, "y": 0 }, - "panelIndex": "8cd05d59-543a-4b41-9bdd-49b7b8e2cd31", + "panelIndex": "90e7fb8c-9bfe-4787-aafc-b9397b4d305a", "type": "lens" }, { @@ -456,12 +456,12 @@ }, "gridData": { "h": 6, - "i": "3fdd01ea-f1a6-4aef-9f4c-ceb6d2c787ba", + "i": "75939550-1b6c-4e7b-88ab-3b5b32a0c046", "w": 8, "x": 24, "y": 0 }, - "panelIndex": "3fdd01ea-f1a6-4aef-9f4c-ceb6d2c787ba", + "panelIndex": "75939550-1b6c-4e7b-88ab-3b5b32a0c046", "title": "", "type": "lens" }, @@ -559,12 +559,12 @@ }, "gridData": { "h": 6, - "i": "fdf2a0a3-389d-4f7c-9684-5b8d1ed89c91", + "i": "9a947804-caeb-4286-9cc7-6b46ecf897da", "w": 8, "x": 32, "y": 0 }, - "panelIndex": "fdf2a0a3-389d-4f7c-9684-5b8d1ed89c91", + "panelIndex": "9a947804-caeb-4286-9cc7-6b46ecf897da", "title": "", "type": "lens" }, @@ -662,12 +662,12 @@ }, "gridData": { "h": 6, - "i": "2997a185-6ea5-4e41-bd70-f5a46bd4e127", + "i": "badfa697-4f42-49c1-8ab5-c163ec169e30", "w": 8, "x": 40, "y": 0 }, - "panelIndex": "2997a185-6ea5-4e41-bd70-f5a46bd4e127", + "panelIndex": "badfa697-4f42-49c1-8ab5-c163ec169e30", "title": "", "type": "lens" }, @@ -847,12 +847,12 @@ }, "gridData": { "h": 9, - "i": "b489c5cc-9794-46a7-9fe1-a5370fc7d4b3", + "i": "1b517ef6-c22b-493a-9c3d-76b5909bcc12", "w": 48, "x": 0, "y": 6 }, - "panelIndex": "b489c5cc-9794-46a7-9fe1-a5370fc7d4b3", + "panelIndex": "1b517ef6-c22b-493a-9c3d-76b5909bcc12", "type": "lens" }, { @@ -1016,17 +1016,18 @@ "type": "lens", "visualizationType": "lnsPie" }, - "enhancements": {} + "enhancements": {}, + "hidePanelTitles": false }, "gridData": { "h": 15, - "i": "0720a83e-43d7-4993-8072-26be8aa3feb6", + "i": "d2d44378-0c79-488b-873b-fdce4502144e", "w": 16, "x": 0, "y": 15 }, - "panelIndex": "0720a83e-43d7-4993-8072-26be8aa3feb6", - "title": "", + "panelIndex": "d2d44378-0c79-488b-873b-fdce4502144e", + "title": "Top 15 Status Codes by Exchange-URL", "type": "lens" }, { @@ -1191,17 +1192,18 @@ "type": "lens", "visualizationType": "lnsPie" }, - "enhancements": {} + "enhancements": {}, + "hidePanelTitles": false }, "gridData": { "h": 15, - "i": "70ef3233-def0-42d0-9b35-2e48221fcd16", + "i": "65e3b7a6-139d-4c8d-9df7-12b20e6cde7a", "w": 16, "x": 16, "y": 15 }, - "panelIndex": "70ef3233-def0-42d0-9b35-2e48221fcd16", - "title": "", + "panelIndex": "65e3b7a6-139d-4c8d-9df7-12b20e6cde7a", + "title": "Top 15 Users by Exchange-URL", "type": "lens" }, { @@ -1333,17 +1335,18 @@ "type": "lens", "visualizationType": "lnsPie" }, - "enhancements": {} + "enhancements": {}, + "hidePanelTitles": false }, "gridData": { "h": 15, - "i": "4f7e8e5e-8dc8-4fe7-98b1-16ce0cc6cbcb", + "i": "64ccf2d3-e961-4215-9ad4-8330b65ecb7c", "w": 16, "x": 32, "y": 15 }, - "panelIndex": "4f7e8e5e-8dc8-4fe7-98b1-16ce0cc6cbcb", - "title": "", + "panelIndex": "64ccf2d3-e961-4215-9ad4-8330b65ecb7c", + "title": "Top 15 Users", "type": "lens" }, { @@ -1352,13 +1355,13 @@ }, "gridData": { "h": 27, - "i": "f2260518-d4c1-4b3b-a602-c18c06fc1562", + "i": "48468992-018f-4f15-9607-4fc855e54d83", "w": 48, "x": 0, "y": 30 }, - "panelIndex": "f2260518-d4c1-4b3b-a602-c18c06fc1562", - "panelRefName": "panel_f2260518-d4c1-4b3b-a602-c18c06fc1562", + "panelIndex": "48468992-018f-4f15-9607-4fc855e54d83", + "panelRefName": "panel_48468992-018f-4f15-9607-4fc855e54d83", "type": "search" } ], @@ -1367,8 +1370,8 @@ "version": 1 }, "coreMigrationVersion": "8.8.0", - "created_at": "2024-03-11T10:15:01.086Z", - "id": "microsoft_exchange_server-8e9d55c5-637a-4fd8-b53b-9501e98a8e88", + "created_at": "2024-04-10T07:08:36.139Z", + "id": "microsoft_exchange_server-66a4ce40-1a00-4ced-9547-7e96def93f02", "managed": true, "references": [ { @@ -1378,112 +1381,112 @@ }, { "id": "logs-*", - "name": "d2e19276-b24c-4239-ab0f-3b9c328fb252:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "35ad8ad6-63a5-4a0d-a034-9e5324bc6a6e:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "d2e19276-b24c-4239-ab0f-3b9c328fb252:e6c91c87-ff12-4e3b-9ce7-b54ed4facc16", + "name": "35ad8ad6-63a5-4a0d-a034-9e5324bc6a6e:e6c91c87-ff12-4e3b-9ce7-b54ed4facc16", "type": "index-pattern" }, { "id": "logs-*", - "name": "8a0f3277-f4af-40f5-9526-0b8be36b2daf:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "30970f92-d438-4033-b472-cd7716e8a8ab:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "8cd05d59-543a-4b41-9bdd-49b7b8e2cd31:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "90e7fb8c-9bfe-4787-aafc-b9397b4d305a:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "3fdd01ea-f1a6-4aef-9f4c-ceb6d2c787ba:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "75939550-1b6c-4e7b-88ab-3b5b32a0c046:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "3fdd01ea-f1a6-4aef-9f4c-ceb6d2c787ba:db318c6d-c8a9-4f58-89ce-3cafe82ddb9d", + "name": "75939550-1b6c-4e7b-88ab-3b5b32a0c046:db318c6d-c8a9-4f58-89ce-3cafe82ddb9d", "type": "index-pattern" }, { "id": "logs-*", - "name": "fdf2a0a3-389d-4f7c-9684-5b8d1ed89c91:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "9a947804-caeb-4286-9cc7-6b46ecf897da:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "fdf2a0a3-389d-4f7c-9684-5b8d1ed89c91:7eefe26a-cbbb-424b-a989-b3be44ac08ed", + "name": "9a947804-caeb-4286-9cc7-6b46ecf897da:7eefe26a-cbbb-424b-a989-b3be44ac08ed", "type": "index-pattern" }, { "id": "logs-*", - "name": "2997a185-6ea5-4e41-bd70-f5a46bd4e127:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "badfa697-4f42-49c1-8ab5-c163ec169e30:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "2997a185-6ea5-4e41-bd70-f5a46bd4e127:b3936adc-f4db-45b1-845e-a13a7c890d2c", + "name": "badfa697-4f42-49c1-8ab5-c163ec169e30:b3936adc-f4db-45b1-845e-a13a7c890d2c", "type": "index-pattern" }, { "id": "logs-*", - "name": "b489c5cc-9794-46a7-9fe1-a5370fc7d4b3:indexpattern-datasource-layer-f50b399c-7fd8-43f7-8464-fcf7127eb0c4", + "name": "1b517ef6-c22b-493a-9c3d-76b5909bcc12:indexpattern-datasource-layer-f50b399c-7fd8-43f7-8464-fcf7127eb0c4", "type": "index-pattern" }, { "id": "logs-*", - "name": "b489c5cc-9794-46a7-9fe1-a5370fc7d4b3:46fa66b7-9fa0-45f5-8e0b-c9ef86b8acc3", + "name": "1b517ef6-c22b-493a-9c3d-76b5909bcc12:46fa66b7-9fa0-45f5-8e0b-c9ef86b8acc3", "type": "index-pattern" }, { "id": "logs-*", - "name": "0720a83e-43d7-4993-8072-26be8aa3feb6:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "d2d44378-0c79-488b-873b-fdce4502144e:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "0720a83e-43d7-4993-8072-26be8aa3feb6:2f74c5df-c534-4145-a74f-8489c346879e", + "name": "d2d44378-0c79-488b-873b-fdce4502144e:2f74c5df-c534-4145-a74f-8489c346879e", "type": "index-pattern" }, { "id": "logs-*", - "name": "70ef3233-def0-42d0-9b35-2e48221fcd16:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "65e3b7a6-139d-4c8d-9df7-12b20e6cde7a:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "70ef3233-def0-42d0-9b35-2e48221fcd16:af78ff4d-82f1-410b-8478-0732fffc9e5b", + "name": "65e3b7a6-139d-4c8d-9df7-12b20e6cde7a:af78ff4d-82f1-410b-8478-0732fffc9e5b", "type": "index-pattern" }, { "id": "logs-*", - "name": "4f7e8e5e-8dc8-4fe7-98b1-16ce0cc6cbcb:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", + "name": "64ccf2d3-e961-4215-9ad4-8330b65ecb7c:indexpattern-datasource-layer-d64931ec-87ab-4503-9c67-dbb397048ac8", "type": "index-pattern" }, { "id": "logs-*", - "name": "4f7e8e5e-8dc8-4fe7-98b1-16ce0cc6cbcb:c9c5c37e-da56-4106-b488-560a5da4a1f8", + "name": "64ccf2d3-e961-4215-9ad4-8330b65ecb7c:c9c5c37e-da56-4106-b488-560a5da4a1f8", "type": "index-pattern" }, { "id": "microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af", - "name": "f2260518-d4c1-4b3b-a602-c18c06fc1562:panel_f2260518-d4c1-4b3b-a602-c18c06fc1562", + "name": "48468992-018f-4f15-9607-4fc855e54d83:panel_48468992-018f-4f15-9607-4fc855e54d83", "type": "search" }, { "id": "logs-*", - "name": "controlGroup_a5fe2192-b77c-4f16-888e-4e59fe064c78:optionsListDataView", + "name": "controlGroup_b5f2cda4-ccb5-442f-a766-dddfc5e8826d:optionsListDataView", "type": "index-pattern" }, { "id": "logs-*", - "name": "controlGroup_7c8291ec-dc6d-4fa0-8d67-bb53efdf6c57:optionsListDataView", + "name": "controlGroup_ab5425b5-a5b1-41f5-bd66-2a9f036ef103:optionsListDataView", "type": "index-pattern" }, { "id": "logs-*", - "name": "controlGroup_f542c63c-4265-4ebc-a9d6-7278f4d3976a:optionsListDataView", + "name": "controlGroup_7514f639-d5c3-4623-a69d-960608a4cb51:optionsListDataView", "type": "index-pattern" } ], diff --git a/packages/microsoft_exchange_server/kibana/search/microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af.json b/packages/microsoft_exchange_server/kibana/search/microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af.json index 1beffc5ea94f..ec277a4ba136 100644 --- a/packages/microsoft_exchange_server/kibana/search/microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af.json +++ b/packages/microsoft_exchange_server/kibana/search/microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af.json @@ -57,7 +57,7 @@ "viewMode": "documents" }, "coreMigrationVersion": "8.8.0", - "created_at": "2024-03-11T10:14:48.072Z", + "created_at": "2024-04-10T06:56:23.933Z", "id": "microsoft_exchange_server-75b14bd0-c034-11ee-a682-0f218cc418af", "managed": true, "references": [ diff --git a/packages/microsoft_exchange_server/manifest.yml b/packages/microsoft_exchange_server/manifest.yml index 1b62ad6d1d61..84cc1c95cc73 100644 --- a/packages/microsoft_exchange_server/manifest.yml +++ b/packages/microsoft_exchange_server/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: microsoft_exchange_server title: "Microsoft Exchange Server" -version: 0.1.2 +version: 1.0.0 source: license: "Elastic-2.0" description: Collect logs from Microsoft Exchange Server with Elastic Agent. diff --git a/packages/nginx/_dev/deploy/docker/nginx.conf b/packages/nginx/_dev/deploy/docker/nginx.conf index f530f31a6407..a69af3f01095 100755 --- a/packages/nginx/_dev/deploy/docker/nginx.conf +++ b/packages/nginx/_dev/deploy/docker/nginx.conf @@ -20,6 +20,7 @@ http { access_log /var/log/nginx/access.log main; server { + listen [::]:80; listen 80; server_name localhost; diff --git a/packages/rapid7_insightvm/changelog.yml b/packages/rapid7_insightvm/changelog.yml index 4bfc5cd9d6b6..fdfb46691c2c 100644 --- a/packages/rapid7_insightvm/changelog.yml +++ b/packages/rapid7_insightvm/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.10.0" + changes: + - description: Canonicalize `host.name` to lower case and map subdomain to `host.hostname`. + type: enhancement + link: https://github.com/elastic/integrations/pull/9665 - version: "1.9.0" changes: - description: Set sensitive values as secret. diff --git a/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log b/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log index aaf992de3a8a..f0dd0a77b5c8 100644 --- a/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log +++ b/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log @@ -1,3 +1,3 @@ {"assessed_for_policies":false,"assessed_for_vulnerabilities":true,"critical_vulnerabilities":0,"exploits":0,"id":"452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-199","ip":"10.1.0.128","last_assessed_for_vulnerabilities":"2020-03-20T19:19:42.611Z","last_scan_end":"2020-03-20T19:19:42.611Z","last_scan_start":"2020-03-20T19:18:13.611Z","malware_kits":0,"moderate_vulnerabilities":2,"os_architecture":"x86_64","os_description":"CentOS Linux 2.6.18","os_family":"Linux","os_name":"Linux","os_system_name":"CentOS Linux","os_type":"General","os_vendor":"CentOS","os_version":"2.6.18","risk_score":0,"severe_vulnerabilities":0,"tags":[{"name":"lab","type":"SITE"}],"total_vulnerabilities":2,"new":[],"remediated":[]} -{"assessed_for_policies":false,"assessed_for_vulnerabilities":true,"critical_vulnerabilities":1,"exploits":9,"host_name":"host.domain.com","id":"452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198","ip":"10.4.24.164","last_scan_end":"2020-03-20T19:12:39.766Z","last_scan_start":"2020-03-20T19:05:06.766Z","malware_kits":0,"moderate_vulnerabilities":11,"os_architecture":"","os_description":"Ubuntu Linux 12.04","os_family":"Linux","os_name":"Linux","os_system_name":"Ubuntu Linux","os_type":"","os_vendor":"Ubuntu","os_version":"12.04","risk_score":12251.76171875,"severe_vulnerabilities":16,"tags":[{"name":"all_assets2","type":"CUSTOM"},{"name":"all_assets","type":"CUSTOM"},{"name":"Linux","type":"CUSTOM"},{"name":"docker hosts","type":"SITE"},{"name":"lab","type":"SITE"}],"total_vulnerabilities":28,"new":[],"remediated":[],"unique_identifiers":{"id":"4421d73dfe04f594df731e6bcd8156a","source":"R7 Agent"}} +{"assessed_for_policies":false,"assessed_for_vulnerabilities":true,"critical_vulnerabilities":1,"exploits":9,"host_name":"HOST.domain.com","id":"452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198","ip":"10.4.24.164","last_scan_end":"2020-03-20T19:12:39.766Z","last_scan_start":"2020-03-20T19:05:06.766Z","malware_kits":0,"moderate_vulnerabilities":11,"os_architecture":"","os_description":"Ubuntu Linux 12.04","os_family":"Linux","os_name":"Linux","os_system_name":"Ubuntu Linux","os_type":"","os_vendor":"Ubuntu","os_version":"12.04","risk_score":12251.76171875,"severe_vulnerabilities":16,"tags":[{"name":"all_assets2","type":"CUSTOM"},{"name":"all_assets","type":"CUSTOM"},{"name":"Linux","type":"CUSTOM"},{"name":"docker hosts","type":"SITE"},{"name":"lab","type":"SITE"}],"total_vulnerabilities":28,"new":[],"remediated":[],"unique_identifiers":{"id":"4421d73dfe04f594df731e6bcd8156a","source":"R7 Agent"}} {"data":[],"metadata":{"number":0,"size":0,"totalResources":2195,"totalPages":2195,"cursor":null},"links":[{"href":"https://us.api.insight.rapid7.com:443/vm/v4/integration/assets?page=0&size=2","rel":"first"},{"href":"https://us.api.insight.rapid7.com:443/vm/v4/integration/assets?page=0&size=2","rel":"self"},{"href":"https://us.api.insight.rapid7.com:443/vm/v4/integration/assets?page=1097&size=2","rel":"last"}]} diff --git a/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log-expected.json b/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log-expected.json index f638edce24bd..724951114342 100644 --- a/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log-expected.json +++ b/packages/rapid7_insightvm/data_stream/asset/_dev/test/pipeline/test-asset.log-expected.json @@ -85,12 +85,13 @@ "host" ], "kind": "state", - "original": "{\"assessed_for_policies\":false,\"assessed_for_vulnerabilities\":true,\"critical_vulnerabilities\":1,\"exploits\":9,\"host_name\":\"host.domain.com\",\"id\":\"452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198\",\"ip\":\"10.4.24.164\",\"last_scan_end\":\"2020-03-20T19:12:39.766Z\",\"last_scan_start\":\"2020-03-20T19:05:06.766Z\",\"malware_kits\":0,\"moderate_vulnerabilities\":11,\"os_architecture\":\"\",\"os_description\":\"Ubuntu Linux 12.04\",\"os_family\":\"Linux\",\"os_name\":\"Linux\",\"os_system_name\":\"Ubuntu Linux\",\"os_type\":\"\",\"os_vendor\":\"Ubuntu\",\"os_version\":\"12.04\",\"risk_score\":12251.76171875,\"severe_vulnerabilities\":16,\"tags\":[{\"name\":\"all_assets2\",\"type\":\"CUSTOM\"},{\"name\":\"all_assets\",\"type\":\"CUSTOM\"},{\"name\":\"Linux\",\"type\":\"CUSTOM\"},{\"name\":\"docker hosts\",\"type\":\"SITE\"},{\"name\":\"lab\",\"type\":\"SITE\"}],\"total_vulnerabilities\":28,\"new\":[],\"remediated\":[],\"unique_identifiers\":{\"id\":\"4421d73dfe04f594df731e6bcd8156a\",\"source\":\"R7 Agent\"}}", + "original": "{\"assessed_for_policies\":false,\"assessed_for_vulnerabilities\":true,\"critical_vulnerabilities\":1,\"exploits\":9,\"host_name\":\"HOST.domain.com\",\"id\":\"452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198\",\"ip\":\"10.4.24.164\",\"last_scan_end\":\"2020-03-20T19:12:39.766Z\",\"last_scan_start\":\"2020-03-20T19:05:06.766Z\",\"malware_kits\":0,\"moderate_vulnerabilities\":11,\"os_architecture\":\"\",\"os_description\":\"Ubuntu Linux 12.04\",\"os_family\":\"Linux\",\"os_name\":\"Linux\",\"os_system_name\":\"Ubuntu Linux\",\"os_type\":\"\",\"os_vendor\":\"Ubuntu\",\"os_version\":\"12.04\",\"risk_score\":12251.76171875,\"severe_vulnerabilities\":16,\"tags\":[{\"name\":\"all_assets2\",\"type\":\"CUSTOM\"},{\"name\":\"all_assets\",\"type\":\"CUSTOM\"},{\"name\":\"Linux\",\"type\":\"CUSTOM\"},{\"name\":\"docker hosts\",\"type\":\"SITE\"},{\"name\":\"lab\",\"type\":\"SITE\"}],\"total_vulnerabilities\":28,\"new\":[],\"remediated\":[],\"unique_identifiers\":{\"id\":\"4421d73dfe04f594df731e6bcd8156a\",\"source\":\"R7 Agent\"}}", "type": [ "info" ] }, "host": { + "hostname": "host", "id": "452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198", "ip": [ "10.4.24.164" @@ -113,7 +114,7 @@ "assessed_for_vulnerabilities": true, "critical_vulnerabilities": 1, "exploits": 9, - "host_name": "host.domain.com", + "host_name": "HOST.domain.com", "id": "452534235-25a7-40a3-9321-28ce0b5cc90e-default-asset-198", "ip": "10.4.24.164", "last_scan_end": "2020-03-20T19:12:39.766Z", @@ -162,7 +163,8 @@ }, "related": { "hosts": [ - "host.domain.com" + "host.domain.com", + "host" ], "ip": [ "10.4.24.164" diff --git a/packages/rapid7_insightvm/data_stream/asset/elasticsearch/ingest_pipeline/default.yml b/packages/rapid7_insightvm/data_stream/asset/elasticsearch/ingest_pipeline/default.yml index a441d3f21476..3b0295cc9679 100644 --- a/packages/rapid7_insightvm/data_stream/asset/elasticsearch/ingest_pipeline/default.yml +++ b/packages/rapid7_insightvm/data_stream/asset/elasticsearch/ingest_pipeline/default.yml @@ -115,10 +115,28 @@ processors: field: host.name copy_from: rapid7.insightvm.asset.host_name ignore_empty_value: true + - lowercase: + field: host.name + ignore_missing: true + - append: + field: related.hosts + value: '{{{host.name}}}' + if: ctx.host?.name != null + allow_duplicates: false + - script: + lang: painless + if: ctx.host?.name != null + source: | + int idx = ctx.host.name.indexOf("."); + if (idx == -1) { + ctx.host.hostname = ctx.host.name; + } else { + ctx.host.hostname = ctx.host.name.substring(0, idx); + } - append: field: related.hosts - value: '{{{rapid7.insightvm.asset.host_name}}}' - if: ctx.rapid7?.insightvm?.asset?.host_name != null + value: '{{{host.hostname}}}' + if: ctx.host?.hostname != null allow_duplicates: false - rename: field: json.id diff --git a/packages/rapid7_insightvm/manifest.yml b/packages/rapid7_insightvm/manifest.yml index 18678963c25f..8a24711bc0bc 100644 --- a/packages/rapid7_insightvm/manifest.yml +++ b/packages/rapid7_insightvm/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: rapid7_insightvm title: Rapid7 InsightVM -version: "1.9.0" +version: "1.10.0" source: license: "Elastic-2.0" description: Collect logs from Rapid7 InsightVM with Elastic Agent. diff --git a/packages/security_detection_engine/changelog.yml b/packages/security_detection_engine/changelog.yml index 134023a32d95..30a079813492 100644 --- a/packages/security_detection_engine/changelog.yml +++ b/packages/security_detection_engine/changelog.yml @@ -1,5 +1,15 @@ # newer versions go on top # NOTE: please use pre-release versions (e.g. -beta.0) until a package is ready for production +- version: 8.13.5 + changes: + - description: Release security rules update + type: enhancement + link: https://github.com/elastic/integrations/pull/9762 +- version: 8.13.5-beta.1 + changes: + - description: Release security rules update + type: enhancement + link: https://github.com/elastic/integrations/pull/9758 - version: 8.13.4 changes: - description: Release security rules update diff --git a/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_4.json b/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_4.json new file mode 100644 index 000000000000..d00f552056df --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/25d917c4-aa3c-4111-974c-286c0312ff95_4.json @@ -0,0 +1,122 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for network connections from a kworker process. kworker, or kernel worker, processes are part of the kernel's workqueue mechanism. They are responsible for executing work that has been scheduled to be done in kernel space, which might include tasks like handling interrupts, background activities, and other kernel-related tasks. Attackers may attempt to evade detection by masquerading as a kernel worker process.", + "from": "now-9m", + "history_window_start": "now-14d", + "index": [ + "logs-endpoint.events.*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Network Activity Detected via Kworker", + "new_terms_fields": [ + "process.name", + "destination.ip", + "destination.port" + ], + "query": "host.os.type:linux and event.category:network and event.action:(connection_attempted or connection_accepted) and \nprocess.name:kworker* and not destination.ip:(\n 10.0.0.0/8 or\n 127.0.0.0/8 or\n 169.254.0.0/16 or\n 172.16.0.0/12 or\n 192.168.0.0/16 or\n 224.0.0.0/4 or\n \"::1\" or\n \"FE80::/10\" or\n \"FF00::/8\"\n) and not destination.port:2049\n", + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "destination.ip", + "type": "ip" + }, + { + "ecs": true, + "name": "destination.port", + "type": "long" + }, + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + } + ], + "risk_score": 21, + "rule_id": "25d917c4-aa3c-4111-974c-286c0312ff95", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows\nthe Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest to select \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "low", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + }, + { + "id": "T1014", + "name": "Rootkit", + "reference": "https://attack.mitre.org/techniques/T1014/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0010", + "name": "Exfiltration", + "reference": "https://attack.mitre.org/tactics/TA0010/" + }, + "technique": [ + { + "id": "T1041", + "name": "Exfiltration Over C2 Channel", + "reference": "https://attack.mitre.org/techniques/T1041/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 4 + }, + "id": "25d917c4-aa3c-4111-974c-286c0312ff95_4", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/28f6f34b-8e16-487a-b5fd-9d22eb903db8_1.json b/packages/security_detection_engine/kibana/security_rule/28f6f34b-8e16-487a-b5fd-9d22eb903db8_1.json new file mode 100644 index 000000000000..0d2808a8dc87 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/28f6f34b-8e16-487a-b5fd-9d22eb903db8_1.json @@ -0,0 +1,113 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors the creation/alteration of a shell configuration by a previously unknown process executable using the new terms rule type. Unix systems use shell configuration files to set environment variables, create aliases, and customize the user's environment. Adversaries may modify or add a shell configuration file to execute malicious code and gain persistence in the system. This behavior is consistent with the Kaiji malware family.", + "false_positives": [ + "Legitimate user shell modification activity." + ], + "from": "now-9m", + "history_window_start": "now-10d", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "kuery", + "license": "Elastic License v2", + "name": "Shell Configuration Modification", + "new_terms_fields": [ + "host.id", + "user.id", + "process.executable" + ], + "query": "event.category:file and host.os.type:linux and\nevent.action:(creation or file_create_event or rename or file_rename_event) and file.path:(\n \"/etc/profile\" or \"/etc/profile.local\" or \"/etc/bashrc\" or \"/etc/bash.bashrc\" or \"/etc/bash.bashrc.local\" or\n \"/etc/zshenv\" or \"/etc/zprofile\" or \"/etc/zlogin\" or \"/etc/zlogout\" or \"/root/.profile\" or \"/root/.bash_logout\" or\n \"/root/.bashrc\" or \"/root/.bash_login\" or /etc/profile.d/* or /home/*/.profile or /home/*/.bash_logout or\n /home/*/.bashrc or /home/*/.bash_login\n) and not (\n (process.executable: (\n \"/bin/dpkg\" or \"/usr/bin/dpkg\" or \"/bin/useradd\" or \"/usr/sbin/useradd\" or \"/bin/adduser\" or \"/usr/sbin/adduser\" or\n \"/bin/dockerd\" or \"/usr/bin/dockerd\" or \"/bin/microdnf\" or \"/usr/bin/microdnf\" or \"/bin/rpm\" or \"/usr/bin/rpm\" or\n \"/bin/snapd\" or \"/usr/bin/snapd\" or \"/bin/yum\" or \"/usr/bin/yum\" or \"/bin/dnf\" or \"/usr/bin/dnf\" or \"/bin/podman\" or\n \"/usr/bin/podman\" or \"/bin/dnf-automatic\" or \"/usr/bin/dnf-automatic\" or \"/bin/pacman\" or \"/usr/bin/pacman\"\n )\n) or\n (file.extension:(\"swp\" or \"swpx\")) or\n (process.executable:(\"/bin/sed\" or \"/usr/bin/sed\") and file.name:sed*) or\n (process.executable:(\"/bin/perl\" or \"/usr/bin/perl\") and file.name:e2scrub_all.tmp*)\n)\n", + "references": [ + "https://intezer.com/blog/research/kaiji-new-chinese-linux-malware-turning-to-golang/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.category", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.extension", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.executable", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "28f6f34b-8e16-487a-b5fd-9d22eb903db8", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Persistence", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0003", + "name": "Persistence", + "reference": "https://attack.mitre.org/tactics/TA0003/" + }, + "technique": [ + { + "id": "T1546", + "name": "Event Triggered Execution", + "reference": "https://attack.mitre.org/techniques/T1546/", + "subtechnique": [ + { + "id": "T1546.004", + "name": "Unix Shell Configuration Modification", + "reference": "https://attack.mitre.org/techniques/T1546/004/" + } + ] + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "new_terms", + "version": 1 + }, + "id": "28f6f34b-8e16-487a-b5fd-9d22eb903db8_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_7.json b/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_7.json new file mode 100644 index 000000000000..699a3f67b314 --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/6ee947e9-de7e-4281-a55d-09289bdf947e_7.json @@ -0,0 +1,99 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "This rule monitors for a set of Linux utilities that can be used for tunneling and port forwarding. Attackers can leverage tunneling and port forwarding techniques to bypass network defenses, establish hidden communication channels, and gain unauthorized access to internal resources, facilitating data exfiltration, lateral movement, and remote control.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential Linux Tunneling and/or Port Forwarding", + "note": "## Triage and analysis\n\n### Investigating Potential Linux Tunneling and/or Port Forwarding\n\nAttackers can leverage many utilities to clandestinely tunnel network communications and evade security measures, potentially gaining unauthorized access to sensitive systems.\n\nThis rule looks for several utilities that are capable of setting up tunnel network communications by analyzing process names or command line arguments. \n\n> **Note**:\n> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/master/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.\n> This investigation guide uses [placeholder fields](https://www.elastic.co/guide/en/security/current/osquery-placeholder-fields.html) to dynamically pass alert data into Osquery queries. Placeholder fields were introduced in Elastic Stack version 8.7.0. If you're using Elastic Stack version 8.6.0 or earlier, you'll need to manually adjust this investigation guide's queries to ensure they properly run.\n\n#### Possible investigation steps\n\n- Identify any signs of suspicious network activity or anomalies that may indicate protocol tunneling. This could include unexpected traffic patterns or unusual network behavior.\n - Investigate listening ports and open sockets to look for potential protocol tunneling, reverse shells, or data exfiltration.\n - !{osquery{\"label\":\"Osquery - Retrieve Listening Ports\",\"query\":\"SELECT pid, address, port, socket, protocol, path FROM listening_ports\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Open Sockets\",\"query\":\"SELECT pid, family, remote_address, remote_port, socket, state FROM process_open_sockets\"}}\n- Identify the user account that performed the action, analyze it, and check whether it should perform this kind of action.\n - !{osquery{\"label\":\"Osquery - Retrieve Information for a Specific User\",\"query\":\"SELECT * FROM users WHERE username = {{user.name}}\"}}\n- Investigate whether the user is currently logged in and active.\n - !{osquery{\"label\":\"Osquery - Investigate the Account Authentication Status\",\"query\":\"SELECT * FROM logged_in_users WHERE user = {{user.name}}\"}}\n- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence and whether they are located in expected locations.\n - !{osquery{\"label\":\"Osquery - Retrieve Running Processes by User\",\"query\":\"SELECT pid, username, name FROM processes p JOIN users u ON u.uid = p.uid ORDER BY username\"}}\n - !{osquery{\"label\":\"Osquery - Retrieve Process Info\",\"query\":\"SELECT name, cmdline, parent, path, uid FROM processes\"}}\n- Investigate other alerts associated with the user/host during the past 48 hours.\n - If scripts or executables were dropped, retrieve the files and determine if they are malicious:\n - Use a private sandboxed malware analysis system to perform analysis.\n - Observe and collect information about the following activities:\n - Attempts to contact external domains and addresses.\n - Check if the domain is newly registered or unexpected.\n - Check the reputation of the domain or IP address.\n - File access, modification, and creation activities.\n\n### Related rules\n\n- Potential Protocol Tunneling via Chisel Client - 3f12325a-4cc6-410b-8d4c-9fbbeb744cfd\n- Potential Protocol Tunneling via Chisel Server - ac8805f6-1e08-406c-962e-3937057fa86f\n- Potential Protocol Tunneling via EarthWorm - 9f1c4ca3-44b5-481d-ba42-32dc215a2769\n- Suspicious Utility Launched via ProxyChains - 6ace94ba-f02c-4d55-9f53-87d99b6f9af4\n- ProxyChains Activity - 4b868f1f-15ff-4ba3-8c11-d5a7a6356d37\n\n### False positive analysis\n\n- If this activity is related to new benign software installation activity, consider adding exceptions \u2014 preferably with a combination of user and command line conditions.\n- If this activity is related to a system administrator or developer who uses port tunneling/forwarding for benign purposes, consider adding exceptions for specific user accounts or hosts. \n- Try to understand the context of the execution by thinking about the user, machine, or business purpose. A small number of endpoints, such as servers with unique software, might appear unusual but satisfy a specific business need.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Isolate the involved host to prevent further post-compromise behavior.\n- If the triage identified malware, search the environment for additional compromised hosts.\n - Implement temporary network rules, procedures, and segmentation to contain the malware.\n - Stop suspicious processes.\n - Immediately block the identified indicators of compromise (IoCs).\n - Inspect the affected systems for additional malware backdoors, such as reverse shells, reverse proxies, or droppers, that attackers could use to reinfect the system.\n- Remove and block malicious artifacts identified during triage.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.\n- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.\n- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.\n- Leverage the incident response data and logging to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n", + "query": "process where host.os.type == \"linux\" and event.type == \"start\" and event.action in (\"exec\", \"exec_event\") and (\n (\n // gost & pivotnacci - spawned without process.parent.name\n (process.name == \"gost\" and process.args : (\"-L*\", \"-C*\", \"-R*\")) or (process.name == \"pivotnacci\")) or (\n // ssh\n (process.name in (\"ssh\", \"sshd\") and (process.args in (\"-R\", \"-L\", \"-D\", \"-w\") and process.args_count >= 4 and \n not process.args : \"chmod\")) or\n // sshuttle\n (process.name == \"sshuttle\" and process.args in (\"-r\", \"--remote\", \"-l\", \"--listen\") and process.args_count >= 4) or\n // socat\n (process.name == \"socat\" and process.args : (\"TCP4-LISTEN:*\", \"SOCKS*\") and process.args_count >= 3) or\n // chisel\n (process.name : \"chisel*\" and process.args in (\"client\", \"server\")) or\n // iodine(d), dnscat, hans, ptunnel-ng, ssf, 3proxy & ngrok \n (process.name in (\"iodine\", \"iodined\", \"dnscat\", \"hans\", \"hans-ubuntu\", \"ptunnel-ng\", \"ssf\", \"3proxy\", \"ngrok\"))\n ) and process.parent.name in (\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\", \"csh\", \"zsh\", \"ksh\", \"fish\")\n)\n", + "references": [ + "https://blog.bitsadmin.com/living-off-the-foreign-land-windows-as-offensive-platform", + "https://book.hacktricks.xyz/generic-methodologies-and-resources/tunneling-and-port-forwarding" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "event.action", + "type": "keyword" + }, + { + "ecs": true, + "name": "event.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.args_count", + "type": "long" + }, + { + "ecs": true, + "name": "process.name", + "type": "keyword" + }, + { + "ecs": true, + "name": "process.parent.name", + "type": "keyword" + } + ], + "risk_score": 47, + "rule_id": "6ee947e9-de7e-4281-a55d-09289bdf947e", + "setup": "## Setup\n\nThis rule requires data coming in from Elastic Defend.\n\n### Elastic Defend Integration Setup\nElastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.\n\n#### Prerequisite Requirements:\n- Fleet is required for Elastic Defend.\n- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).\n\n#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:\n- Go to the Kibana home page and click \"Add integrations\".\n- In the query bar, search for \"Elastic Defend\" and select the integration to see more details about it.\n- Click \"Add Elastic Defend\".\n- Configure the integration name and optionally add a description.\n- Select the type of environment you want to protect, either \"Traditional Endpoints\" or \"Cloud Workloads\".\n- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).\n- We suggest selecting \"Complete EDR (Endpoint Detection and Response)\" as a configuration setting, that provides \"All events; all preventions\"\n- Enter a name for the agent policy in \"New agent policy name\". If other agent policies already exist, you can click the \"Existing hosts\" tab and select an existing policy instead.\nFor more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).\n- Click \"Save and Continue\".\n- To complete the integration, select \"Add Elastic Agent to your hosts\" and continue to the next section to install the Elastic Agent on your hosts.\nFor more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).\n", + "severity": "medium", + "tags": [ + "Domain: Endpoint", + "OS: Linux", + "Use Case: Threat Detection", + "Tactic: Command and Control", + "Data Source: Elastic Defend", + "Data Source: Elastic Endgame" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0011", + "name": "Command and Control", + "reference": "https://attack.mitre.org/tactics/TA0011/" + }, + "technique": [ + { + "id": "T1572", + "name": "Protocol Tunneling", + "reference": "https://attack.mitre.org/techniques/T1572/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 7 + }, + "id": "6ee947e9-de7e-4281-a55d-09289bdf947e_7", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/kibana/security_rule/dffbd37c-d4c5-46f8-9181-5afdd9172b4c_1.json b/packages/security_detection_engine/kibana/security_rule/dffbd37c-d4c5-46f8-9181-5afdd9172b4c_1.json new file mode 100644 index 000000000000..db4101d6340c --- /dev/null +++ b/packages/security_detection_engine/kibana/security_rule/dffbd37c-d4c5-46f8-9181-5afdd9172b4c_1.json @@ -0,0 +1,93 @@ +{ + "attributes": { + "author": [ + "Elastic" + ], + "description": "Identifies a privilege escalation attempt via exploiting CVE-2022-38028 to hijack the print spooler service execution.", + "from": "now-9m", + "index": [ + "logs-endpoint.events.file-*", + "logs-windows.sysmon_operational-*", + "endgame-*" + ], + "language": "eql", + "license": "Elastic License v2", + "name": "Potential privilege escalation via CVE-2022-38028", + "query": "file where host.os.type == \"windows\" and\n file.path : (\"?:\\\\*\\\\Windows\\\\system32\\\\DriVerStoRe\\\\FiLeRePoSiToRy\\\\*\\\\MPDW-constraints.js\",\n \"?:\\\\*\\\\Windows\\\\WinSxS\\\\amd64_microsoft-windows-printing-printtopdf_*\\\\MPDW-constraints.js\")\n", + "references": [ + "https://www.microsoft.com/en-us/security/blog/2024/04/22/analyzing-forest-blizzards-custom-post-compromise-tool-for-exploiting-cve-2022-38028-to-obtain-credentials/" + ], + "related_integrations": [ + { + "package": "endpoint", + "version": "^8.2.0" + }, + { + "package": "windows", + "version": "^1.5.0" + } + ], + "required_fields": [ + { + "ecs": true, + "name": "file.path", + "type": "keyword" + }, + { + "ecs": true, + "name": "host.os.type", + "type": "keyword" + } + ], + "risk_score": 73, + "rule_id": "dffbd37c-d4c5-46f8-9181-5afdd9172b4c", + "severity": "high", + "tags": [ + "Domain: Endpoint", + "OS: Windows", + "Use Case: Threat Detection", + "Tactic: Privilege Escalation", + "Tactic: Defense Evasion", + "Data Source: Elastic Endgame", + "Data Source: Elastic Defend", + "Data Source: Sysmon" + ], + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0004", + "name": "Privilege Escalation", + "reference": "https://attack.mitre.org/tactics/TA0004/" + }, + "technique": [ + { + "id": "T1068", + "name": "Exploitation for Privilege Escalation", + "reference": "https://attack.mitre.org/techniques/T1068/" + } + ] + }, + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0005", + "name": "Defense Evasion", + "reference": "https://attack.mitre.org/tactics/TA0005/" + }, + "technique": [ + { + "id": "T1036", + "name": "Masquerading", + "reference": "https://attack.mitre.org/techniques/T1036/" + } + ] + } + ], + "timestamp_override": "event.ingested", + "type": "eql", + "version": 1 + }, + "id": "dffbd37c-d4c5-46f8-9181-5afdd9172b4c_1", + "type": "security-rule" +} \ No newline at end of file diff --git a/packages/security_detection_engine/manifest.yml b/packages/security_detection_engine/manifest.yml index b7c3fbba5077..16f955d9ceba 100644 --- a/packages/security_detection_engine/manifest.yml +++ b/packages/security_detection_engine/manifest.yml @@ -19,4 +19,4 @@ source: license: Elastic-2.0 title: Prebuilt Security Detection Rules type: integration -version: 8.13.4 +version: 8.13.5 diff --git a/packages/zscaler_zia/_dev/deploy/docker/sample_logs/web-http_endpoint.log b/packages/zscaler_zia/_dev/deploy/docker/sample_logs/web-http_endpoint.log index 074c9a963b88..2e5fefd09d80 100644 --- a/packages/zscaler_zia/_dev/deploy/docker/sample_logs/web-http_endpoint.log +++ b/packages/zscaler_zia/_dev/deploy/docker/sample_logs/web-http_endpoint.log @@ -1 +1 @@ -{ "sourcetype" : "zscalernss-web", "event" :{"time":"2021-12-31 08:08:08","login":"test@example.com","proto":"HTTP_PROXY","eurl":"www.example.com","action":"Blocked","appname":"General Browsing","appclass":"General Browsing","reqsize":"600","respsize":"65","stime":"0","ctime":"0","urlclass":"Business Use","urlsupercat":"Information Technology","urlcat":"Web Search","malwarecat":"None","threatname":"None","riskscore":"0","dlpeng":"None","dlpdict":"None","location":"Test DB","dept":"Unknown","cip":"1.128.3.4","sip":"1.128.3.4","reqmethod":"CONNECT","respcode":"200","eua":"Windows Microsoft Windows 10 Pro ZTunnel/1.0","ereferer":"None","ruletype":"FwFilter","rulelabel":"Zscaler Proxy Traffic","contenttype":"Other","unscannabletype":"None","deviceowner":"administrator1","devicehostname":"TestMachine35"}} +{ "sourcetype" : "zscalernss-web", "event" :{"time":"2021-12-31 08:08:08","login":"test@example.com","proto":"HTTP_PROXY","eurl":"www.example.com","action":"Blocked","appname":"General Browsing","appclass":"General Browsing","reqsize":"600","respsize":"65","stime":"0","ctime":"0","urlclass":"Business Use","urlsupercat":"Information Technology","urlcat":"Web Search","malwarecat":"None","threatname":"None","riskscore":"0","dlpeng":"None","dlpdict":"None","location":"Test DB","dept":"Unknown","cip":"192.168.1.35","cintip":"203.0.113.5","sip":"1.128.3.4","reqmethod":"CONNECT","respcode":"200","eua":"Windows Microsoft Windows 10 Pro ZTunnel/1.0","ereferer":"None","ruletype":"FwFilter","rulelabel":"Zscaler Proxy Traffic","contenttype":"Other","unscannabletype":"None","deviceowner":"administrator1","devicehostname":"TestMachine35"}} diff --git a/packages/zscaler_zia/changelog.yml b/packages/zscaler_zia/changelog.yml index 639a2331ac1b..90607aefdcc8 100644 --- a/packages/zscaler_zia/changelog.yml +++ b/packages/zscaler_zia/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.19.1" + changes: + - description: Fix mapping of source.ip and source.nat.ip + type: bugfix + link: https://github.com/elastic/integrations/pull/9727 - version: "2.19.0" changes: - description: Set sensitive values as secret. diff --git a/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web-http-endpoint.log-expected.json b/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web-http-endpoint.log-expected.json index 475a6756a69b..3710a7395d0e 100644 --- a/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web-http-endpoint.log-expected.json +++ b/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web-http-endpoint.log-expected.json @@ -43,8 +43,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.145" + "81.2.69.145", + "81.2.69.193" ], "user": [ "test", @@ -57,9 +57,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -169,8 +167,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.145" + "81.2.69.145", + "81.2.69.193" ], "user": [ "test", @@ -183,9 +181,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" diff --git a/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web.log-expected.json b/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web.log-expected.json index 25bbff8a1a5c..dadc3e9b71e3 100644 --- a/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web.log-expected.json +++ b/packages/zscaler_zia/data_stream/web/_dev/test/pipeline/test-web.log-expected.json @@ -43,8 +43,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.145" + "81.2.69.145", + "81.2.69.193" ], "user": [ "test", @@ -57,9 +57,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -171,8 +169,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "89.160.20.156" + "89.160.20.156", + "81.2.69.193" ], "user": [ "test", @@ -185,9 +183,7 @@ "ruleset": "SSLPol" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -294,8 +290,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "89.160.20.112" + "89.160.20.112", + "81.2.69.193" ], "user": [ "test", @@ -308,9 +304,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -422,8 +416,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.144" + "81.2.69.144", + "81.2.69.193" ], "user": [ "test", @@ -436,9 +430,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -550,8 +542,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test", @@ -564,9 +556,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -674,8 +664,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "89.160.20.112" + "89.160.20.112", + "81.2.69.193" ], "user": [ "test", @@ -688,9 +678,7 @@ "ruleset": "None" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -802,8 +790,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test", @@ -816,9 +804,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -930,8 +916,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test" @@ -942,9 +928,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -1050,8 +1034,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test", @@ -1063,9 +1047,7 @@ "ruleset": "FwFilter" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -1173,8 +1155,8 @@ "TestMachine35" ], "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test", @@ -1187,9 +1169,7 @@ "ruleset": "None" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" @@ -1289,8 +1269,8 @@ }, "related": { "ip": [ - "81.2.69.193", - "81.2.69.143" + "81.2.69.143", + "81.2.69.193" ], "user": [ "test", @@ -1302,9 +1282,7 @@ "ruleset": "None" }, "source": { - "nat": { - "ip": "81.2.69.193" - } + "ip": "81.2.69.193" }, "tags": [ "preserve_original_event" diff --git a/packages/zscaler_zia/data_stream/web/elasticsearch/ingest_pipeline/default.yml b/packages/zscaler_zia/data_stream/web/elasticsearch/ingest_pipeline/default.yml index d0df2ee03b99..1614baadd692 100644 --- a/packages/zscaler_zia/data_stream/web/elasticsearch/ingest_pipeline/default.yml +++ b/packages/zscaler_zia/data_stream/web/elasticsearch/ingest_pipeline/default.yml @@ -78,14 +78,14 @@ processors: field: event.type value: info - convert: - field: json.cip + field: json.cintip target_field: source.nat.ip if: ctx.json?.cip != ctx.json?.cintip type: ip ignore_missing: true on_failure: - remove: - field: json.cip + field: json.cintip - append: field: error.message value: '{{{_ingest.on_failure_message}}}' @@ -364,13 +364,13 @@ processors: target_field: zscaler_zia.web.bandwidth_throttle ignore_missing: true - convert: - field: json.cintip + field: json.cip target_field: source.ip type: ip ignore_missing: true on_failure: - remove: - field: json.cintip + field: json.cip - append: field: error.message value: '{{{_ingest.on_failure_message}}}' diff --git a/packages/zscaler_zia/data_stream/web/sample_event.json b/packages/zscaler_zia/data_stream/web/sample_event.json index 93e83150c5e3..51a3b40b75e9 100644 --- a/packages/zscaler_zia/data_stream/web/sample_event.json +++ b/packages/zscaler_zia/data_stream/web/sample_event.json @@ -63,6 +63,7 @@ "TestMachine35" ], "ip": [ + "203.0.113.5", "1.128.3.4" ], "user": [ @@ -76,8 +77,9 @@ }, "source": { "nat": { - "ip": "1.128.3.4" - } + "ip": "203.0.113.5" + }, + "ip": "192.168.1.35" }, "tags": [ "forwarded", diff --git a/packages/zscaler_zia/docs/README.md b/packages/zscaler_zia/docs/README.md index c0917efb2f90..caf67bad596b 100644 --- a/packages/zscaler_zia/docs/README.md +++ b/packages/zscaler_zia/docs/README.md @@ -767,6 +767,7 @@ An example event for `web` looks as following: "TestMachine35" ], "ip": [ + "203.0.113.5", "1.128.3.4" ], "user": [ @@ -780,8 +781,9 @@ An example event for `web` looks as following: }, "source": { "nat": { - "ip": "1.128.3.4" - } + "ip": "203.0.113.5" + }, + "ip": "192.168.1.35" }, "tags": [ "forwarded", diff --git a/packages/zscaler_zia/manifest.yml b/packages/zscaler_zia/manifest.yml index 9ff2e157ec11..abba8599039f 100644 --- a/packages/zscaler_zia/manifest.yml +++ b/packages/zscaler_zia/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: zscaler_zia title: Zscaler Internet Access -version: "2.19.0" +version: "2.19.1" description: Collect logs from Zscaler Internet Access (ZIA) with Elastic Agent. type: integration categories: