From 6c5258a8c39500652755a87b08bd2bf6bcbaf315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Wed, 16 Sep 2020 12:39:32 +0100 Subject: [PATCH 1/5] Fixing service maps API test (#77586) * fixing api tests * fixing api tests --- .../__snapshots__/service_maps.snap | 63 +++++++ .../trial/tests/service_maps/service_maps.ts | 163 ++---------------- 2 files changed, 74 insertions(+), 152 deletions(-) diff --git a/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap b/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap index 2306ca16dd71d..1424ca42539c0 100644 --- a/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap +++ b/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap @@ -1,5 +1,68 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Service Maps with a trial license /api/apm/service-map when there is data returns service map elements filtering by environment not defined 1`] = ` +Object { + "elements": Array [ + Object { + "data": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-node", + }, + }, + Object { + "data": Object { + "agent.name": "python", + "id": "opbeans-python", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-python", + }, + }, + Object { + "data": Object { + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-ruby", + }, + }, + Object { + "data": Object { + "agent.name": "java", + "id": "opbeans-java", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-java", + }, + }, + Object { + "data": Object { + "agent.name": "go", + "id": "opbeans-go", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-go", + }, + }, + Object { + "data": Object { + "agent.name": "rum-js", + "id": "opbeans-rum", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-rum", + }, + }, + Object { + "data": Object { + "agent.name": "dotnet", + "id": "opbeans-dotnet", + "service.environment": "ENVIRONMENT_NOT_DEFINED", + "service.name": "opbeans-dotnet", + }, + }, + ], +} +`; + exports[`Service Maps with a trial license /api/apm/service-map when there is data returns the correct data 3`] = ` Array [ Object { diff --git a/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts b/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts index 5be9f2c836af9..be3301964bd3c 100644 --- a/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts +++ b/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts @@ -86,159 +86,18 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext) }); it('returns service map elements filtering by environment not defined', async () => { - const encodedStart = encodeURIComponent('2020-06-28T10:24:46.055Z'); - const encodedEnd = encodeURIComponent('2020-06-29T10:24:46.055Z'); - const environment = 'ENVIRONMENT_NOT_DEFINED'; - const resp = await supertest.get( - `/api/apm/service-map?start=${encodedStart}&end=${encodedEnd}&environment=${environment}` + const ENVIRONMENT_NOT_DEFINED = 'ENVIRONMENT_NOT_DEFINED'; + const { body, status } = await supertest.get( + `/api/apm/service-map?start=${start}&end=${end}&environment=${ENVIRONMENT_NOT_DEFINED}` ); - expect(resp.status).to.be(200); - expectSnapshot(resp.body).toMatchInline(` - Object { - "elements": Array [ - Object { - "data": Object { - "id": "client~opbeans-node", - "source": "client", - "sourceData": Object { - "agent.name": "rum-js", - "id": "client", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "client", - }, - "target": "opbeans-node", - "targetData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - }, - }, - Object { - "data": Object { - "id": "opbeans-java~>postgresql", - "source": "opbeans-java", - "sourceData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-java", - }, - "target": ">postgresql", - "targetData": Object { - "id": ">postgresql", - "label": "postgresql", - "span.destination.service.resource": "postgresql", - "span.subtype": "postgresql", - "span.type": "db", - }, - }, - }, - Object { - "data": Object { - "id": "opbeans-node~>postgresql", - "source": "opbeans-node", - "sourceData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - "target": ">postgresql", - "targetData": Object { - "id": ">postgresql", - "label": "postgresql", - "span.destination.service.resource": "postgresql", - "span.subtype": "postgresql", - "span.type": "db", - }, - }, - }, - Object { - "data": Object { - "id": "opbeans-node~>redis", - "source": "opbeans-node", - "sourceData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - "target": ">redis", - "targetData": Object { - "id": ">redis", - "label": "redis", - "span.destination.service.resource": "redis", - "span.subtype": "redis", - "span.type": "cache", - }, - }, - }, - Object { - "data": Object { - "id": "opbeans-node~opbeans-java", - "source": "opbeans-node", - "sourceData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - "target": "opbeans-java", - "targetData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-java", - }, - }, - }, - Object { - "data": Object { - "agent.name": "rum-js", - "id": "client", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "client", - }, - }, - Object { - "data": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - }, - Object { - "data": Object { - "id": ">redis", - "label": "redis", - "span.destination.service.resource": "redis", - "span.subtype": "redis", - "span.type": "cache", - }, - }, - Object { - "data": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-java", - }, - }, - Object { - "data": Object { - "id": ">postgresql", - "label": "postgresql", - "span.destination.service.resource": "postgresql", - "span.subtype": "postgresql", - "span.type": "db", - }, - }, - ], - } - `); + expect(status).to.be(200); + const environments = new Set(); + body.elements.forEach((element: { data: Record }) => { + environments.add(element.data['service.environment']); + }); + expect(environments.size).to.eql(1); + expect(environments.has(ENVIRONMENT_NOT_DEFINED)).to.eql(true); + expectSnapshot(body).toMatch(); }); }); }); From 10b192b5b057915590fabebe83a576c6be93b76d Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 16 Sep 2020 15:34:28 +0200 Subject: [PATCH 2/5] [RUM Dashboard] User experience metrics (#77384) Co-authored-by: Elastic Machine --- .../app/RumDashboard/CoreVitals/index.tsx | 35 +- .../RumDashboard/CoreVitals/translations.ts | 21 + .../app/RumDashboard/RumDashboard.tsx | 14 +- .../RumDashboard/UXMetrics/KeyUXMetrics.tsx | 103 + .../UXMetrics/__tests__/FormatToSec.test.ts | 19 + .../app/RumDashboard/UXMetrics/index.tsx | 78 + .../app/RumDashboard/translations.ts | 3 + .../__snapshots__/queries.test.ts.snap | 178 + .../lib/rum_client/get_long_task_metrics.ts | 117 + .../lib/rum_client/get_web_core_vitals.ts | 47 +- .../apm/server/lib/rum_client/queries.test.ts | 20 + .../apm/server/projections/rum_overview.ts | 32 +- .../apm/server/routes/create_apm_api.ts | 2 + .../plugins/apm/server/routes/rum_client.ts | 13 + .../apm/typings/elasticsearch/aggregations.ts | 10 + .../es_archiver/rum_8.0.0/data.json.gz | Bin 11144 -> 126016 bytes .../es_archiver/rum_8.0.0/mappings.json | 7919 ++++++++++++++++- .../rum_services.ts => csm/csm_services.ts} | 9 +- .../trial/tests/csm/long_task_metrics.ts | 58 + .../trial/tests/csm/web_core_vitals.ts | 80 + .../apm_api_integration/trial/tests/index.ts | 7 +- 21 files changed, 8374 insertions(+), 391 deletions(-) create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/KeyUXMetrics.tsx create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/__tests__/FormatToSec.test.ts create mode 100644 x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/index.tsx create mode 100644 x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts rename x-pack/test/apm_api_integration/trial/tests/{services/rum_services.ts => csm/csm_services.ts} (89%) create mode 100644 x-pack/test/apm_api_integration/trial/tests/csm/long_task_metrics.ts create mode 100644 x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx index d0bd674ef5c79..b027609fd3a7f 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/index.tsx @@ -5,11 +5,9 @@ */ import * as React from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; - -import { useFetcher } from '../../../../hooks/useFetcher'; -import { useUrlParams } from '../../../../hooks/useUrlParams'; import { CLS_LABEL, FID_LABEL, LCP_LABEL } from './translations'; import { CoreVitalItem } from './CoreVitalItem'; +import { UXMetrics } from '../UXMetrics'; const CoreVitalsThresholds = { LCP: { good: '2.5s', bad: '4.0s' }, @@ -17,27 +15,12 @@ const CoreVitalsThresholds = { CLS: { good: '0.1', bad: '0.25' }, }; -export function CoreVitals() { - const { urlParams, uiFilters } = useUrlParams(); - - const { start, end } = urlParams; - - const { data, status } = useFetcher( - (callApmApi) => { - const { serviceName } = uiFilters; - if (start && end && serviceName) { - return callApmApi({ - pathname: '/api/apm/rum-client/web-core-vitals', - params: { - query: { start, end, uiFilters: JSON.stringify(uiFilters) }, - }, - }); - } - return Promise.resolve(null); - }, - [start, end, uiFilters] - ); +interface Props { + data?: UXMetrics | null; + loading: boolean; +} +export function CoreVitals({ data, loading }: Props) { const { lcp, lcpRanks, fid, fidRanks, cls, clsRanks } = data || {}; return ( @@ -47,7 +30,7 @@ export function CoreVitals() { title={LCP_LABEL} value={lcp ? lcp + 's' : '0'} ranks={lcpRanks} - loading={status !== 'success'} + loading={loading} thresholds={CoreVitalsThresholds.LCP} /> @@ -56,7 +39,7 @@ export function CoreVitals() { title={FID_LABEL} value={fid ? fid + 's' : '0'} ranks={fidRanks} - loading={status !== 'success'} + loading={loading} thresholds={CoreVitalsThresholds.FID} /> @@ -65,7 +48,7 @@ export function CoreVitals() { title={CLS_LABEL} value={cls ?? '0'} ranks={clsRanks} - loading={status !== 'success'} + loading={loading} thresholds={CoreVitalsThresholds.CLS} /> diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts index 136dfb279e336..063d062db7650 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/CoreVitals/translations.ts @@ -26,6 +26,27 @@ export const TBT_LABEL = i18n.translate('xpack.apm.rum.coreVitals.tbt', { defaultMessage: 'Total blocking time', }); +export const NO_OF_LONG_TASK = i18n.translate( + 'xpack.apm.rum.uxMetrics.noOfLongTasks', + { + defaultMessage: 'No. of long tasks', + } +); + +export const LONGEST_LONG_TASK = i18n.translate( + 'xpack.apm.rum.uxMetrics.longestLongTasks', + { + defaultMessage: 'Longest long task duration', + } +); + +export const SUM_LONG_TASKS = i18n.translate( + 'xpack.apm.rum.uxMetrics.sumLongTasks', + { + defaultMessage: 'Total long tasks duration', + } +); + export const POOR_LABEL = i18n.translate('xpack.apm.rum.coreVitals.poor', { defaultMessage: 'a poor', }); diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx index 48c0f6cc60d84..296c0d268d131 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/RumDashboard.tsx @@ -17,7 +17,7 @@ import { PageViewsTrend } from './PageViewsTrend'; import { PageLoadDistribution } from './PageLoadDistribution'; import { I18LABELS } from './translations'; import { VisitorBreakdown } from './VisitorBreakdown'; -import { CoreVitals } from './CoreVitals'; +import { UXMetrics } from './UXMetrics'; import { VisitorBreakdownMap } from './VisitorBreakdownMap'; export function RumDashboard() { @@ -37,17 +37,7 @@ export function RumDashboard() { - - - - -

{I18LABELS.coreWebVitals}

-
- - -
-
-
+
diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/KeyUXMetrics.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/KeyUXMetrics.tsx new file mode 100644 index 0000000000000..b4a350d41557f --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/KeyUXMetrics.tsx @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { EuiFlexItem, EuiStat, EuiFlexGroup } from '@elastic/eui'; +import { UXMetrics } from './index'; +import { + FCP_LABEL, + LONGEST_LONG_TASK, + NO_OF_LONG_TASK, + SUM_LONG_TASKS, + TBT_LABEL, +} from '../CoreVitals/translations'; +import { useUrlParams } from '../../../../hooks/useUrlParams'; +import { useFetcher } from '../../../../hooks/useFetcher'; + +export function formatToSec( + value?: number | string, + fromUnit = 'MicroSec' +): string { + const valueInMs = Number(value ?? 0) / (fromUnit === 'MicroSec' ? 1000 : 1); + + if (valueInMs < 1000) { + return valueInMs + ' ms'; + } + return (valueInMs / 1000).toFixed(2) + ' s'; +} +const STAT_STYLE = { width: '240px' }; + +interface Props { + data?: UXMetrics | null; + loading: boolean; +} + +export function KeyUXMetrics({ data, loading }: Props) { + const { urlParams, uiFilters } = useUrlParams(); + + const { start, end, serviceName } = urlParams; + + const { data: longTaskData, status } = useFetcher( + (callApmApi) => { + if (start && end && serviceName) { + return callApmApi({ + pathname: '/api/apm/rum-client/long-task-metrics', + params: { + query: { start, end, uiFilters: JSON.stringify(uiFilters) }, + }, + }); + } + return Promise.resolve(null); + }, + [start, end, serviceName, uiFilters] + ); + + // Note: FCP value is in ms unit + return ( + + + + + + + + + + + + + + + + + + ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/__tests__/FormatToSec.test.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/__tests__/FormatToSec.test.ts new file mode 100644 index 0000000000000..6cdf469d980fa --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/__tests__/FormatToSec.test.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { formatToSec } from '../KeyUXMetrics'; + +describe('FormatToSec', () => { + test('it returns the expected value', () => { + expect(formatToSec(3413000)).toStrictEqual('3.41 s'); + expect(formatToSec(15548000)).toStrictEqual('15.55 s'); + expect(formatToSec(1147.5, 'ms')).toStrictEqual('1.15 s'); + expect(formatToSec(114, 'ms')).toStrictEqual('114 ms'); + expect(formatToSec(undefined, 'ms')).toStrictEqual('0 ms'); + expect(formatToSec(undefined)).toStrictEqual('0 ms'); + expect(formatToSec('1123232')).toStrictEqual('1.12 s'); + }); +}); diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/index.tsx new file mode 100644 index 0000000000000..bb5d37a10fb33 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/UXMetrics/index.tsx @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiPanel, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; +import { I18LABELS } from '../translations'; +import { CoreVitals } from '../CoreVitals'; +import { KeyUXMetrics } from './KeyUXMetrics'; +import { useUrlParams } from '../../../../hooks/useUrlParams'; +import { useFetcher } from '../../../../hooks/useFetcher'; + +export interface UXMetrics { + cls: string; + fid: string; + lcp: string; + tbt: string; + fcp: number; + lcpRanks: number[]; + fidRanks: number[]; + clsRanks: number[]; +} + +export function UXMetrics() { + const { urlParams, uiFilters } = useUrlParams(); + + const { start, end } = urlParams; + + const { data, status } = useFetcher( + (callApmApi) => { + const { serviceName } = uiFilters; + if (start && end && serviceName) { + return callApmApi({ + pathname: '/api/apm/rum-client/web-core-vitals', + params: { + query: { start, end, uiFilters: JSON.stringify(uiFilters) }, + }, + }); + } + return Promise.resolve(null); + }, + [start, end, uiFilters] + ); + + return ( + + + + +

{I18LABELS.userExperienceMetrics}

+
+ + +
+
+ + + + + +

{I18LABELS.coreWebVitals}

+
+ + +
+
+
+ ); +} diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts index ec135168729b4..1fafb7d1ed4d0 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/translations.ts @@ -64,6 +64,9 @@ export const I18LABELS = { defaultMessage: 'Operating system', } ), + userExperienceMetrics: i18n.translate('xpack.apm.rum.userExperienceMetrics', { + defaultMessage: 'User experience metrics', + }), avgPageLoadDuration: i18n.translate( 'xpack.apm.rum.visitorBreakdownMap.avgPageLoadDuration', { diff --git a/x-pack/plugins/apm/server/lib/rum_client/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/lib/rum_client/__snapshots__/queries.test.ts.snap index 2cb28d378e8fd..32b4343a7f81b 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/lib/rum_client/__snapshots__/queries.test.ts.snap @@ -72,6 +72,64 @@ Object { } `; +exports[`rum client dashboard queries fetches long task metrics 1`] = ` +Object { + "apm": Object { + "events": Array [ + "span", + ], + }, + "body": Object { + "aggs": Object { + "transIds": Object { + "aggs": Object { + "longestLongTask": Object { + "max": Object { + "field": "span.duration.us", + }, + }, + "sumLongTask": Object { + "sum": Object { + "field": "span.duration.us", + }, + }, + }, + "terms": Object { + "field": "transaction.id", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "format": "epoch_millis", + "gte": 1528113600000, + "lte": 1528977600000, + }, + }, + }, + Object { + "term": Object { + "span.type": "longtask", + }, + }, + Object { + "term": Object { + "my.custom.ui.filter": "foo-bar", + }, + }, + ], + }, + }, + "size": 0, + }, +} +`; + exports[`rum client dashboard queries fetches page load distribution 1`] = ` Object { "apm": Object { @@ -190,6 +248,126 @@ Object { } `; +exports[`rum client dashboard queries fetches rum core vitals 1`] = ` +Object { + "apm": Object { + "events": Array [ + "transaction", + ], + }, + "body": Object { + "aggs": Object { + "cls": Object { + "percentiles": Object { + "field": "transaction.experience.cls", + "percents": Array [ + 50, + ], + }, + }, + "clsRanks": Object { + "percentile_ranks": Object { + "field": "transaction.experience.cls", + "keyed": false, + "values": Array [ + 0.1, + 0.25, + ], + }, + }, + "fcp": Object { + "percentiles": Object { + "field": "transaction.marks.agent.firstContentfulPaint", + "percents": Array [ + 50, + ], + }, + }, + "fid": Object { + "percentiles": Object { + "field": "transaction.experience.fid", + "percents": Array [ + 50, + ], + }, + }, + "fidRanks": Object { + "percentile_ranks": Object { + "field": "transaction.experience.fid", + "keyed": false, + "values": Array [ + 100, + 300, + ], + }, + }, + "lcp": Object { + "percentiles": Object { + "field": "transaction.marks.agent.largestContentfulPaint", + "percents": Array [ + 50, + ], + }, + }, + "lcpRanks": Object { + "percentile_ranks": Object { + "field": "transaction.marks.agent.largestContentfulPaint", + "keyed": false, + "values": Array [ + 2500, + 4000, + ], + }, + }, + "tbt": Object { + "percentiles": Object { + "field": "transaction.experience.tbt", + "percents": Array [ + 50, + ], + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "format": "epoch_millis", + "gte": 1528113600000, + "lte": 1528977600000, + }, + }, + }, + Object { + "term": Object { + "transaction.type": "page-load", + }, + }, + Object { + "exists": Object { + "field": "transaction.marks.navigationTiming.fetchStart", + }, + }, + Object { + "term": Object { + "my.custom.ui.filter": "foo-bar", + }, + }, + Object { + "term": Object { + "user_agent.name": "Chrome", + }, + }, + ], + }, + }, + "size": 0, + }, +} +`; + exports[`rum client dashboard queries fetches rum services 1`] = ` Object { "apm": Object { diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts b/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts new file mode 100644 index 0000000000000..fba1b6a0a634d --- /dev/null +++ b/x-pack/plugins/apm/server/lib/rum_client/get_long_task_metrics.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + getRumLongTasksProjection, + getRumOverviewProjection, +} from '../../projections/rum_overview'; +import { mergeProjection } from '../../projections/util/merge_projection'; +import { + Setup, + SetupTimeRange, + SetupUIFilters, +} from '../helpers/setup_request'; +import { SPAN_DURATION } from '../../../common/elasticsearch_fieldnames'; + +export async function getLongTaskMetrics({ + setup, +}: { + setup: Setup & SetupTimeRange & SetupUIFilters; +}) { + const projection = getRumLongTasksProjection({ + setup, + }); + + const params = mergeProjection(projection, { + body: { + size: 0, + query: { + bool: projection.body.query.bool, + }, + aggs: { + transIds: { + terms: { + field: 'transaction.id', + size: 1000, + }, + aggs: { + sumLongTask: { + sum: { + field: SPAN_DURATION, + }, + }, + longestLongTask: { + max: { + field: SPAN_DURATION, + }, + }, + }, + }, + }, + }, + }); + + const { apmEventClient } = setup; + + const response = await apmEventClient.search(params); + const { transIds } = response.aggregations ?? {}; + + const validTransactions: string[] = await filterPageLoadTransactions( + setup, + (transIds?.buckets ?? []).map((bucket) => bucket.key as string) + ); + let noOfLongTasks = 0; + let sumOfLongTasks = 0; + let longestLongTask = 0; + + (transIds?.buckets ?? []).forEach((bucket) => { + if (validTransactions.includes(bucket.key as string)) { + noOfLongTasks += bucket.doc_count; + sumOfLongTasks += bucket.sumLongTask.value ?? 0; + if ((bucket.longestLongTask.value ?? 0) > longestLongTask) { + longestLongTask = bucket.longestLongTask.value!; + } + } + }); + return { + noOfLongTasks, + sumOfLongTasks, + longestLongTask, + }; +} + +async function filterPageLoadTransactions( + setup: Setup & SetupTimeRange & SetupUIFilters, + transactionIds: string[] +) { + const projection = getRumOverviewProjection({ + setup, + }); + + const params = mergeProjection(projection, { + body: { + size: transactionIds.length, + query: { + bool: { + must: [ + { + terms: { + 'transaction.id': transactionIds, + }, + }, + ], + filter: [...projection.body.query.bool.filter], + }, + }, + _source: ['transaction.id'], + }, + }); + + const { apmEventClient } = setup; + + const response = await apmEventClient.search(params); + return response.hits.hits.map((hit) => (hit._source as any).transaction.id)!; +} diff --git a/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts index 9395e5fe14336..25d1877cbb123 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/get_web_core_vitals.ts @@ -13,8 +13,10 @@ import { } from '../helpers/setup_request'; import { CLS_FIELD, + FCP_FIELD, FID_FIELD, LCP_FIELD, + TBT_FIELD, } from '../../../common/elasticsearch_fieldnames'; export async function getWebCoreVitals({ @@ -60,6 +62,18 @@ export async function getWebCoreVitals({ percents: [50], }, }, + tbt: { + percentiles: { + field: TBT_FIELD, + percents: [50], + }, + }, + fcp: { + percentiles: { + field: FCP_FIELD, + percents: [50], + }, + }, lcpRanks: { percentile_ranks: { field: LCP_FIELD, @@ -88,21 +102,13 @@ export async function getWebCoreVitals({ const { apmEventClient } = setup; const response = await apmEventClient.search(params); - const { - lcp, - cls, - fid, - lcpRanks, - fidRanks, - clsRanks, - } = response.aggregations!; + const { lcp, cls, fid, tbt, fcp, lcpRanks, fidRanks, clsRanks } = + response.aggregations ?? {}; const getRanksPercentages = ( ranks: Array<{ key: number; value: number }> ) => { - const ranksVal = (ranks ?? [0, 0]).map( - ({ value }) => value?.toFixed(0) ?? 0 - ); + const ranksVal = ranks.map(({ value }) => value?.toFixed(0) ?? 0); return [ Number(ranksVal?.[0]), Number(ranksVal?.[1]) - Number(ranksVal?.[0]), @@ -110,14 +116,21 @@ export async function getWebCoreVitals({ ]; }; + const defaultRanks = [ + { value: 0, key: 0 }, + { value: 0, key: 0 }, + ]; + // Divide by 1000 to convert ms into seconds return { - cls: String(cls.values['50.0'] || 0), - fid: ((fid.values['50.0'] || 0) / 1000).toFixed(2), - lcp: ((lcp.values['50.0'] || 0) / 1000).toFixed(2), + cls: String(cls?.values['50.0'] || 0), + fid: ((fid?.values['50.0'] || 0) / 1000).toFixed(2), + lcp: ((lcp?.values['50.0'] || 0) / 1000).toFixed(2), + tbt: ((tbt?.values['50.0'] || 0) / 1000).toFixed(2), + fcp: fcp?.values['50.0'] || 0, - lcpRanks: getRanksPercentages(lcpRanks.values), - fidRanks: getRanksPercentages(fidRanks.values), - clsRanks: getRanksPercentages(clsRanks.values), + lcpRanks: getRanksPercentages(lcpRanks?.values ?? defaultRanks), + fidRanks: getRanksPercentages(fidRanks?.values ?? defaultRanks), + clsRanks: getRanksPercentages(clsRanks?.values ?? defaultRanks), }; } diff --git a/x-pack/plugins/apm/server/lib/rum_client/queries.test.ts b/x-pack/plugins/apm/server/lib/rum_client/queries.test.ts index 986e99f79904a..14cec21cceb79 100644 --- a/x-pack/plugins/apm/server/lib/rum_client/queries.test.ts +++ b/x-pack/plugins/apm/server/lib/rum_client/queries.test.ts @@ -12,6 +12,8 @@ import { getClientMetrics } from './get_client_metrics'; import { getPageViewTrends } from './get_page_view_trends'; import { getPageLoadDistribution } from './get_page_load_distribution'; import { getRumServices } from './get_rum_services'; +import { getLongTaskMetrics } from './get_long_task_metrics'; +import { getWebCoreVitals } from './get_web_core_vitals'; describe('rum client dashboard queries', () => { let mock: SearchParamsMock; @@ -59,4 +61,22 @@ describe('rum client dashboard queries', () => { ); expect(mock.params).toMatchSnapshot(); }); + + it('fetches rum core vitals', async () => { + mock = await inspectSearchParams((setup) => + getWebCoreVitals({ + setup, + }) + ); + expect(mock.params).toMatchSnapshot(); + }); + + it('fetches long task metrics', async () => { + mock = await inspectSearchParams((setup) => + getLongTaskMetrics({ + setup, + }) + ); + expect(mock.params).toMatchSnapshot(); + }); }); diff --git a/x-pack/plugins/apm/server/projections/rum_overview.ts b/x-pack/plugins/apm/server/projections/rum_overview.ts index 4588ec2a0451f..ac5a7df235267 100644 --- a/x-pack/plugins/apm/server/projections/rum_overview.ts +++ b/x-pack/plugins/apm/server/projections/rum_overview.ts @@ -9,7 +9,10 @@ import { SetupTimeRange, SetupUIFilters, } from '../../server/lib/helpers/setup_request'; -import { TRANSACTION_TYPE } from '../../common/elasticsearch_fieldnames'; +import { + SPAN_TYPE, + TRANSACTION_TYPE, +} from '../../common/elasticsearch_fieldnames'; import { rangeFilter } from '../../common/utils/range_filter'; import { ProcessorEvent } from '../../common/processor_event'; @@ -45,3 +48,30 @@ export function getRumOverviewProjection({ }, }; } + +export function getRumLongTasksProjection({ + setup, +}: { + setup: Setup & SetupTimeRange & SetupUIFilters; +}) { + const { start, end, uiFiltersES } = setup; + + const bool = { + filter: [ + { range: rangeFilter(start, end) }, + { term: { [SPAN_TYPE]: 'longtask' } }, + ...uiFiltersES, + ], + }; + + return { + apm: { + events: [ProcessorEvent.span], + }, + body: { + query: { + bool, + }, + }, + }; +} diff --git a/x-pack/plugins/apm/server/routes/create_apm_api.ts b/x-pack/plugins/apm/server/routes/create_apm_api.ts index cf7a02cde975c..a15b37945ce01 100644 --- a/x-pack/plugins/apm/server/routes/create_apm_api.ts +++ b/x-pack/plugins/apm/server/routes/create_apm_api.ts @@ -78,6 +78,7 @@ import { rumServicesRoute, rumVisitorsBreakdownRoute, rumWebCoreVitals, + rumLongTaskMetrics, } from './rum_client'; import { observabilityOverviewHasDataRoute, @@ -174,6 +175,7 @@ const createApmApi = () => { .add(rumServicesRoute) .add(rumVisitorsBreakdownRoute) .add(rumWebCoreVitals) + .add(rumLongTaskMetrics) // Observability dashboard .add(observabilityOverviewHasDataRoute) diff --git a/x-pack/plugins/apm/server/routes/rum_client.ts b/x-pack/plugins/apm/server/routes/rum_client.ts index e17791f56eef2..d4adca6a6658f 100644 --- a/x-pack/plugins/apm/server/routes/rum_client.ts +++ b/x-pack/plugins/apm/server/routes/rum_client.ts @@ -15,6 +15,7 @@ import { getPageLoadDistBreakdown } from '../lib/rum_client/get_pl_dist_breakdow import { getRumServices } from '../lib/rum_client/get_rum_services'; import { getVisitorBreakdown } from '../lib/rum_client/get_visitor_breakdown'; import { getWebCoreVitals } from '../lib/rum_client/get_web_core_vitals'; +import { getLongTaskMetrics } from '../lib/rum_client/get_long_task_metrics'; export const percentileRangeRt = t.partial({ minPercentile: t.string, @@ -130,3 +131,15 @@ export const rumWebCoreVitals = createRoute(() => ({ return getWebCoreVitals({ setup }); }, })); + +export const rumLongTaskMetrics = createRoute(() => ({ + path: '/api/apm/rum-client/long-task-metrics', + params: { + query: t.intersection([uiFiltersRt, rangeRt]), + }, + handler: async ({ context, request }) => { + const setup = await setupRequest(context, request); + + return getLongTaskMetrics({ setup }); + }, +})); diff --git a/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts b/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts index bbd2c9eb86249..44211601204cd 100644 --- a/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts +++ b/x-pack/plugins/apm/typings/elasticsearch/aggregations.ts @@ -94,6 +94,9 @@ export interface AggregationOptionsByType { percents?: number[]; hdr?: { number_of_significant_value_digits: number }; } & AggregationSourceOptions; + stats: { + field: string; + }; extended_stats: { field: string; }; @@ -223,6 +226,13 @@ interface AggregationResponsePart< percentiles: { values: Record; }; + stats: { + count: number; + min: number | null; + max: number | null; + avg: number | null; + sum: number | null; + }; extended_stats: { count: number; min: number | null; diff --git a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/data.json.gz b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/data.json.gz index ad3f2351ed30aff77f40ff7098e37ebd0915a0ef..35b2243cf060498d4e49310ebe6690e8f61ab155 100644 GIT binary patch literal 126016 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

fhfq>(=a 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 literal 11144 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 diff --git a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/mappings.json b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/mappings.json index 48ac74d97dfa7..2867292828e8e 100644 --- a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/mappings.json +++ b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/rum_8.0.0/mappings.json @@ -2,589 +2,7841 @@ "type": "index", "value": { "aliases": { + "apm-8.0.0-span": { + "is_write_index": true + } }, - "index": "apm-8.0.0-transaction-005", + "index": "apm-8.0.0-span-000001", "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], "properties": { "@timestamp": { "type": "date" }, "agent": { + "dynamic": "false", "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" }, "version": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" } } }, - "client": { + "as": { "properties": { - "geo": { + "number": { + "type": "long" + }, + "organization": { "properties": { - "continent_name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "country_iso_code": { + "name": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" - }, - "location": { - "properties": { - "lat": { - "type": "float" - }, - "lon": { - "type": "float" - } - } - } - } - }, - "ip": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "ecs": { - "properties": { - "version": { - "fields": { - "keyword": { - "ignore_above": 256, + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } } } }, - "event": { + "child": { + "dynamic": "false", "properties": { - "ingested": { - "type": "date" + "id": { + "ignore_above": 1024, + "type": "keyword" } } }, - "http": { + "client": { + "dynamic": "false", "properties": { - "request": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { "properties": { - "referrer": { - "fields": { - "keyword": { - "ignore_above": 256, + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } } } }, - "response": { + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { "properties": { - "decoded_body_size": { - "type": "long" + "city_name": { + "ignore_above": 1024, + "type": "keyword" }, - "encoded_body_size": { - "type": "long" + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" }, - "transfer_size": { + "port": { "type": "long" } } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } } } }, - "observer": { + "cloud": { "properties": { - "ephemeral_id": { - "fields": { - "keyword": { - "ignore_above": 256, + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } }, - "hostname": { - "fields": { - "keyword": { - "ignore_above": 256, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } }, - "id": { - "fields": { - "keyword": { - "ignore_above": 256, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } }, - "type": { - "fields": { - "keyword": { - "ignore_above": 256, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } }, - "version": { - "fields": { - "keyword": { - "ignore_above": 256, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } }, - "version_major": { - "type": "long" + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" } } }, - "processor": { + "code_signature": { "properties": { - "event": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "exists": { + "type": "boolean" }, - "name": { - "fields": { - "keyword": { - "ignore_above": 256, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" } } }, - "service": { + "destination": { "properties": { - "language": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "dynamic": "false", + "properties": { + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { "fields": { - "keyword": { - "ignore_above": 256, + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, "type": "keyword" } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" } } }, "name": { - "fields": { - "keyword": { - "ignore_above": 256, + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { "version": { - "fields": { - "keyword": { - "ignore_above": 256, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, "type": "keyword" } - }, + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" } } }, - "source": { + "event": { "properties": { - "ip": { - "fields": { - "keyword": { - "ignore_above": 256, + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "git_rev": { + "type": "keyword" + }, + "kibana_uuid": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-span" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "max_docvalue_fields_search": "200", + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "1ms" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-transaction": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-transaction-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "dynamic": "false", + "properties": { + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "foo": { + "type": "keyword" + }, + "git_rev": { + "type": "keyword" + }, + "kibana_uuid": { + "type": "keyword" + }, + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" } } }, - "timestamp": { + "trace": { + "dynamic": "false", "properties": { - "us": { - "type": "long" + "id": { + "ignore_above": 1024, + "type": "keyword" } } }, - "trace": { + "tracing": { "properties": { - "id": { - "fields": { - "keyword": { - "ignore_above": 256, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } } } }, "transaction": { + "dynamic": "false", "properties": { - "custom": { + "breakdown": { "properties": { - "userConfig": { - "properties": { - "featureFlags": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "showDashboard": { - "type": "boolean" - } - } + "count": { + "type": "long" } } }, "duration": { "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, "us": { "type": "long" } } }, - "id": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" } - }, - "type": "text" + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" }, "marks": { + "dynamic": "true", "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + }, "agent": { "properties": { "domComplete": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domInteractive": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "firstContentfulPaint": { - "type": "float" + "scaling_factor": 1000000, + "type": "scaled_float" }, "largestContentfulPaint": { - "type": "float" + "scaling_factor": 1000000, + "type": "scaled_float" }, "timeToFirstByte": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" } } }, "navigationTiming": { "properties": { "connectEnd": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "connectStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domComplete": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domContentLoadedEventEnd": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domContentLoadedEventStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domInteractive": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domLoading": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domainLookupEnd": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "domainLookupStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "fetchStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "loadEventEnd": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "loadEventStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "requestStart": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "responseEnd": { - "type": "long" + "scaling_factor": 1000000, + "type": "scaled_float" }, "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { "type": "long" } } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } } } }, "name": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" }, - "page": { + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { "properties": { - "referer": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "count": { + "type": "long" }, - "url": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "sum": { + "properties": { + "us": { + "type": "long" } - }, - "type": "text" + } } } }, - "sampled": { - "type": "boolean" - }, "span_count": { "properties": { - "started": { + "dropped": { "type": "long" } } }, "type": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" } } }, "url": { + "dynamic": "false", "properties": { "domain": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" }, "full": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" }, "original": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" }, "path": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" }, "port": { "type": "long" }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, "scheme": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" } } }, "user": { + "dynamic": "false", "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" }, - "id": { - "fields": { - "keyword": { - "ignore_above": 256, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, "type": "keyword" } - }, - "type": "text" + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" }, "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" } } }, "user_agent": { + "dynamic": "false", "properties": { "device": { "properties": { "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" } } }, "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" }, "original": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" }, "os": { "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, "full": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" }, "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" }, "version": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" } } }, "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" + "text": { + "norms": false, + "type": "text" } }, - "type": "text" + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" } } } @@ -592,9 +7844,22 @@ }, "settings": { "index": { - "number_of_replicas": "1", - "number_of_shards": "1" + "codec": "best_compression", + "lifecycle": { + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-transaction" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "max_docvalue_fields_search": "200", + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "1ms" } } } -} +} \ No newline at end of file diff --git a/x-pack/test/apm_api_integration/trial/tests/services/rum_services.ts b/x-pack/test/apm_api_integration/trial/tests/csm/csm_services.ts similarity index 89% rename from x-pack/test/apm_api_integration/trial/tests/services/rum_services.ts rename to x-pack/test/apm_api_integration/trial/tests/csm/csm_services.ts index 088488bc143fd..6235e7abd37ec 100644 --- a/x-pack/test/apm_api_integration/trial/tests/services/rum_services.ts +++ b/x-pack/test/apm_api_integration/trial/tests/csm/csm_services.ts @@ -12,7 +12,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - describe('RUM Services', () => { + describe('CSM Services', () => { describe('when there is no data', () => { it('returns empty list', async () => { const response = await supertest.get( @@ -41,12 +41,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) expect(response.status).to.be(200); - expectSnapshot(response.body).toMatchInline(` - Array [ - "client", - "opbean-client-rum", - ] - `); + expectSnapshot(response.body).toMatchInline(`Array []`); }); }); }); diff --git a/x-pack/test/apm_api_integration/trial/tests/csm/long_task_metrics.ts b/x-pack/test/apm_api_integration/trial/tests/csm/long_task_metrics.ts new file mode 100644 index 0000000000000..425268264612f --- /dev/null +++ b/x-pack/test/apm_api_integration/trial/tests/csm/long_task_metrics.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { expectSnapshot } from '../../../common/match_snapshot'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +export default function rumServicesApiTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + describe('CSM long task metrics', () => { + describe('when there is no data', () => { + it('returns empty list', async () => { + const response = await supertest.get( + '/api/apm/rum-client/long-task-metrics?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D' + ); + + expect(response.status).to.be(200); + expect(response.body).to.eql({ + longestLongTask: 0, + noOfLongTasks: 0, + sumOfLongTasks: 0, + }); + }); + }); + + describe('when there is data', () => { + before(async () => { + await esArchiver.load('8.0.0'); + await esArchiver.load('rum_8.0.0'); + }); + after(async () => { + await esArchiver.unload('8.0.0'); + await esArchiver.unload('rum_8.0.0'); + }); + + it('returns web core vitals values', async () => { + const response = await supertest.get( + '/api/apm/rum-client/long-task-metrics?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D' + ); + + expect(response.status).to.be(200); + + expectSnapshot(response.body).toMatchInline(` + Object { + "longestLongTask": 109000, + "noOfLongTasks": 2, + "sumOfLongTasks": 168000, + } + `); + }); + }); + }); +} diff --git a/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts b/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts new file mode 100644 index 0000000000000..654386cb9987b --- /dev/null +++ b/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { expectSnapshot } from '../../../common/match_snapshot'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +export default function rumServicesApiTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + describe('CSM web core vitals', () => { + describe('when there is no data', () => { + it('returns empty list', async () => { + const response = await supertest.get( + '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D' + ); + + expect(response.status).to.be(200); + expect(response.body).to.eql({ + cls: '0', + fid: '0.00', + lcp: '0.00', + tbt: '0.00', + fcp: 0, + lcpRanks: [0, 0, 100], + fidRanks: [0, 0, 100], + clsRanks: [0, 0, 100], + }); + }); + }); + + describe('when there is data', () => { + before(async () => { + await esArchiver.load('8.0.0'); + await esArchiver.load('rum_8.0.0'); + }); + after(async () => { + await esArchiver.unload('8.0.0'); + await esArchiver.unload('rum_8.0.0'); + }); + + it('returns web core vitals values', async () => { + const response = await supertest.get( + '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D' + ); + + expect(response.status).to.be(200); + + expectSnapshot(response.body).toMatchInline(` + Object { + "cls": "0", + "clsRanks": Array [ + 100, + 0, + 0, + ], + "fcp": 1072, + "fid": "1.35", + "fidRanks": Array [ + 0, + 0, + 100, + ], + "lcp": "1.27", + "lcpRanks": Array [ + 100, + 0, + 0, + ], + "tbt": "0.00", + } + `); + }); + }); + }); +} diff --git a/x-pack/test/apm_api_integration/trial/tests/index.ts b/x-pack/test/apm_api_integration/trial/tests/index.ts index c5ca086b5f370..bf32c4661afd5 100644 --- a/x-pack/test/apm_api_integration/trial/tests/index.ts +++ b/x-pack/test/apm_api_integration/trial/tests/index.ts @@ -15,7 +15,6 @@ export default function observabilityApiIntegrationTests({ loadTestFile }: FtrPr describe('Services', function () { loadTestFile(require.resolve('./services/annotations')); - loadTestFile(require.resolve('./services/rum_services.ts')); loadTestFile(require.resolve('./services/top_services.ts')); }); @@ -30,5 +29,11 @@ export default function observabilityApiIntegrationTests({ loadTestFile }: FtrPr describe('Service Maps', function () { loadTestFile(require.resolve('./service_maps/service_maps')); }); + + describe('CSM', function () { + loadTestFile(require.resolve('./csm/csm_services.ts')); + loadTestFile(require.resolve('./csm/web_core_vitals.ts')); + loadTestFile(require.resolve('./csm/long_task_metrics.ts')); + }); }); } From 5511f0f977ce92a9c82fd3157939d482df657109 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Wed, 16 Sep 2020 09:23:59 -0500 Subject: [PATCH 3/5] IndexPatternService - remove getFields function (#77571) * remove getFields fn --- .../index_patterns/index_patterns.test.ts | 4 +--- .../index_patterns/index_patterns.ts | 18 ------------------ .../__snapshots__/flyout.test.tsx.snap | 2 ++ .../objects_table/components/flyout.test.tsx | 5 ++++- .../objects_table/components/flyout.tsx | 5 ++++- 5 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts index c79c7900148ea..d3b3a73a4b50f 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.test.ts @@ -113,15 +113,13 @@ describe('IndexPatterns', () => { test('caches saved objects', async () => { await indexPatterns.getIds(); await indexPatterns.getTitles(); - await indexPatterns.getFields(['id', 'title']); expect(savedObjectsClient.find).toHaveBeenCalledTimes(1); }); test('can refresh the saved objects caches', async () => { await indexPatterns.getIds(); await indexPatterns.getTitles(true); - await indexPatterns.getFields(['id', 'title'], true); - expect(savedObjectsClient.find).toHaveBeenCalledTimes(3); + expect(savedObjectsClient.find).toHaveBeenCalledTimes(2); }); test('deletes the index pattern', async () => { diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts index 88a7e9f6cef4c..47484f8ec75bb 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts @@ -41,8 +41,6 @@ const indexPatternCache = createIndexPatternCache(); const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3; const savedObjectType = 'index-pattern'; -type IndexPatternCachedFieldType = 'id' | 'title'; - export interface IndexPatternSavedObjectAttrs { title: string; } @@ -116,22 +114,6 @@ export class IndexPatternsService { return this.savedObjectsCache.map((obj) => obj?.attributes?.title); }; - getFields = async (fields: IndexPatternCachedFieldType[], refresh: boolean = false) => { - if (!this.savedObjectsCache || refresh) { - await this.refreshSavedObjectsCache(); - } - if (!this.savedObjectsCache) { - return []; - } - return this.savedObjectsCache.map((obj: Record) => { - const result: Partial> = {}; - fields.forEach( - (f: IndexPatternCachedFieldType) => (result[f] = obj[f] || obj?.attributes?.[f]) - ); - return result; - }); - }; - getFieldsForTimePattern = (options: GetFieldsOptions = {}) => { return this.apiClient.getFieldsForTimePattern(options); }; diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap index 0a330d074fd42..3a03c5c01b3c2 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap @@ -222,9 +222,11 @@ exports[`Flyout conflicts should allow conflict resolution 2`] = ` "indexPatterns": Array [ Object { "id": "1", + "title": undefined, }, Object { "id": "2", + "title": undefined, }, ], "isLegacyFile": false, diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx index cc9d2ed160241..72ed69cdca816 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx @@ -64,7 +64,10 @@ describe('Flyout', () => { done: jest.fn(), newIndexPatternUrl: '', indexPatterns: { - getFields: jest.fn().mockImplementation(() => [{ id: '1' }, { id: '2' }]), + getCache: jest.fn().mockImplementation(() => [ + { id: '1', attributes: {} }, + { id: '2', attributes: {} }, + ]), } as any, overlays, http, diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx index 47d82077294cc..3165ea4ca0794 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx @@ -132,7 +132,10 @@ export class Flyout extends Component { } fetchIndexPatterns = async () => { - const indexPatterns = await this.props.indexPatterns.getFields(['id', 'title']); + const indexPatterns = (await this.props.indexPatterns.getCache())?.map((savedObject) => ({ + id: savedObject.id, + title: savedObject.attributes.title, + })); this.setState({ indexPatterns } as any); }; From 78774e49255da90ae1876eca8e94000ee4ce90be Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 16 Sep 2020 16:50:45 +0200 Subject: [PATCH 4/5] [APM] Disable incremental builds for APM-only type check (#77581) --- x-pack/plugins/apm/scripts/optimize-tsconfig/optimize.js | 8 +++++++- x-pack/plugins/apm/scripts/optimize-tsconfig/paths.js | 1 + x-pack/plugins/apm/server/lib/traces/get_trace_items.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/apm/scripts/optimize-tsconfig/optimize.js b/x-pack/plugins/apm/scripts/optimize-tsconfig/optimize.js index f6f64db164f9a..1de98515e1aac 100644 --- a/x-pack/plugins/apm/scripts/optimize-tsconfig/optimize.js +++ b/x-pack/plugins/apm/scripts/optimize-tsconfig/optimize.js @@ -11,6 +11,7 @@ const { promisify } = require('util'); const path = require('path'); const json5 = require('json5'); const execa = require('execa'); +const { omit } = require('lodash'); const readFile = promisify(fs.readFile); const writeFile = promisify(fs.writeFile); @@ -27,6 +28,7 @@ function prepareParentTsConfigs() { return Promise.all( [ path.resolve(xpackRoot, 'tsconfig.json'), + path.resolve(kibanaRoot, 'tsconfig.base.json'), path.resolve(kibanaRoot, 'tsconfig.json'), ].map(async (filename) => { const config = json5.parse(await readFile(filename, 'utf-8')); @@ -35,7 +37,11 @@ function prepareParentTsConfigs() { filename, JSON.stringify( { - ...config, + ...omit(config, 'references'), + compilerOptions: { + ...config.compilerOptions, + incremental: false, + }, include: [], }, null, diff --git a/x-pack/plugins/apm/scripts/optimize-tsconfig/paths.js b/x-pack/plugins/apm/scripts/optimize-tsconfig/paths.js index c75e16f74b932..b32bb9b20796e 100644 --- a/x-pack/plugins/apm/scripts/optimize-tsconfig/paths.js +++ b/x-pack/plugins/apm/scripts/optimize-tsconfig/paths.js @@ -13,6 +13,7 @@ const tsconfigTpl = path.resolve(__dirname, './tsconfig.json'); const filesToIgnore = [ path.resolve(xpackRoot, 'tsconfig.json'), path.resolve(kibanaRoot, 'tsconfig.json'), + path.resolve(kibanaRoot, 'tsconfig.base.json'), ]; module.exports = { diff --git a/x-pack/plugins/apm/server/lib/traces/get_trace_items.ts b/x-pack/plugins/apm/server/lib/traces/get_trace_items.ts index 17f9743ae9f00..9aebadba23b2a 100644 --- a/x-pack/plugins/apm/server/lib/traces/get_trace_items.ts +++ b/x-pack/plugins/apm/server/lib/traces/get_trace_items.ts @@ -88,7 +88,7 @@ export async function getTraceItems( // explicit intermediary types to avoid TS "excessively deep" error PromiseValueType, PromiseValueType - ] = await Promise.all([errorResponsePromise, traceResponsePromise]); + ] = (await Promise.all([errorResponsePromise, traceResponsePromise])) as any; const exceedsMax = traceResponse.hits.total.value > maxTraceItems; From 9b6edc5cd5e699a5164579291aba98111ae42c3a Mon Sep 17 00:00:00 2001 From: Josh Dover Date: Wed, 16 Sep 2020 08:52:42 -0600 Subject: [PATCH 5/5] Allow legacy imports size respect `savedObjects.maxImportPayloadBytes` config (#77409) --- docs/api/dashboard/import-dashboard.asciidoc | 2 +- ...ana-plugin-core-server.sharedglobalconfig.md | 1 + src/core/server/mocks.ts | 4 ++++ src/core/server/plugins/plugin_context.test.ts | 2 ++ src/core/server/plugins/plugin_context.ts | 11 +++++++---- src/core/server/plugins/types.ts | 3 +++ src/core/server/server.api.md | 6 ++++-- src/plugins/legacy_export/server/plugin.ts | 17 +++++++++++------ .../legacy_export/server/routes/import.ts | 5 ++++- .../legacy_export/server/routes/index.ts | 8 ++++++-- 10 files changed, 43 insertions(+), 16 deletions(-) diff --git a/docs/api/dashboard/import-dashboard.asciidoc b/docs/api/dashboard/import-dashboard.asciidoc index 020ec8018b85b..56bd4abbc8023 100644 --- a/docs/api/dashboard/import-dashboard.asciidoc +++ b/docs/api/dashboard/import-dashboard.asciidoc @@ -23,7 +23,7 @@ experimental[] Import dashboards and corresponding saved objects. [[dashboard-api-import-request-body]] ==== Request body -Use the complete response body from the <> as the request body. Do not manually construct a payload to the endpoint. +Use the complete response body from the <> as the request body. Do not manually construct a payload to the endpoint. The max payload size is determined by the `savedObjects.maxImportPayloadBytes` configuration key. [[dashboard-api-import-response-body]] ==== Response body diff --git a/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md b/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md index 7f306919101ef..ec2e1b227a2d7 100644 --- a/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md +++ b/docs/development/core/server/kibana-plugin-core-server.sharedglobalconfig.md @@ -12,5 +12,6 @@ export declare type SharedGlobalConfig = RecursiveReadonly<{ kibana: Pick; elasticsearch: Pick; path: Pick; + savedObjects: Pick; }>; ``` diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts index 5d6bf41fec3f3..52dccb6880882 100644 --- a/src/core/server/mocks.ts +++ b/src/core/server/mocks.ts @@ -18,6 +18,7 @@ */ import { of } from 'rxjs'; import { duration } from 'moment'; +import { ByteSizeValue } from '@kbn/config-schema'; import { PluginInitializerContext, CoreSetup, CoreStart, StartServicesAccessor } from '.'; import { loggingSystemMock } from './logging/logging_system.mock'; import { loggingServiceMock } from './logging/logging_service.mock'; @@ -66,6 +67,9 @@ export function pluginInitializerContextConfigMock(config: T) { startupTimeout: duration('30s'), }, path: { data: '/tmp' }, + savedObjects: { + maxImportPayloadBytes: new ByteSizeValue(10485760), + }, }; const mock: jest.Mocked['config']> = { diff --git a/src/core/server/plugins/plugin_context.test.ts b/src/core/server/plugins/plugin_context.test.ts index 5ce91c9a623dc..cb4e8f20be982 100644 --- a/src/core/server/plugins/plugin_context.test.ts +++ b/src/core/server/plugins/plugin_context.test.ts @@ -28,6 +28,7 @@ import { rawConfigServiceMock, getEnvOptions } from '../config/mocks'; import { PluginManifest } from './types'; import { Server } from '../server'; import { fromRoot } from '../utils'; +import { ByteSizeValue } from '@kbn/config-schema'; const logger = loggingSystemMock.create(); @@ -93,6 +94,7 @@ describe('createPluginInitializerContext', () => { startupTimeout: duration(5, 's'), }, path: { data: fromRoot('data') }, + savedObjects: { maxImportPayloadBytes: new ByteSizeValue(10485760) }, }); }); diff --git a/src/core/server/plugins/plugin_context.ts b/src/core/server/plugins/plugin_context.ts index 8d17300965680..6529e83b4d818 100644 --- a/src/core/server/plugins/plugin_context.ts +++ b/src/core/server/plugins/plugin_context.ts @@ -35,6 +35,7 @@ import { ElasticsearchConfigType, config as elasticsearchConfig, } from '../elasticsearch/elasticsearch_config'; +import { SavedObjectsConfigType, savedObjectsConfig } from '../saved_objects/saved_objects_config'; import { CoreSetup, CoreStart } from '..'; export interface InstanceInfo { @@ -91,16 +92,18 @@ export function createPluginInitializerContext( * Note: naming not final here, it will be renamed in a near future (https://github.com/elastic/kibana/issues/46240) * @deprecated */ - globalConfig$: combineLatest( + globalConfig$: combineLatest([ coreContext.configService.atPath(kibanaConfig.path), coreContext.configService.atPath(elasticsearchConfig.path), - coreContext.configService.atPath(pathConfig.path) - ).pipe( - map(([kibana, elasticsearch, path]) => + coreContext.configService.atPath(pathConfig.path), + coreContext.configService.atPath(savedObjectsConfig.path), + ]).pipe( + map(([kibana, elasticsearch, path, savedObjects]) => deepFreeze({ kibana: pick(kibana, SharedGlobalConfigKeys.kibana), elasticsearch: pick(elasticsearch, SharedGlobalConfigKeys.elasticsearch), path: pick(path, SharedGlobalConfigKeys.path), + savedObjects: pick(savedObjects, SharedGlobalConfigKeys.savedObjects), }) ) ), diff --git a/src/core/server/plugins/types.ts b/src/core/server/plugins/types.ts index 34d5e044222eb..9de181124a349 100644 --- a/src/core/server/plugins/types.ts +++ b/src/core/server/plugins/types.ts @@ -26,6 +26,7 @@ import { ConfigPath, EnvironmentMode, PackageInfo, ConfigDeprecationProvider } f import { LoggerFactory } from '../logging'; import { KibanaConfigType } from '../kibana_config'; import { ElasticsearchConfigType } from '../elasticsearch/elasticsearch_config'; +import { SavedObjectsConfigType } from '../saved_objects/saved_objects_config'; import { CoreSetup, CoreStart } from '..'; /** @@ -263,6 +264,7 @@ export const SharedGlobalConfigKeys = { kibana: ['index', 'autocompleteTerminateAfter', 'autocompleteTimeout'] as const, elasticsearch: ['shardTimeout', 'requestTimeout', 'pingTimeout', 'startupTimeout'] as const, path: ['data'] as const, + savedObjects: ['maxImportPayloadBytes'] as const, }; /** @@ -272,6 +274,7 @@ export type SharedGlobalConfig = RecursiveReadonly<{ kibana: Pick; elasticsearch: Pick; path: Pick; + savedObjects: Pick; }>; /** diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index ab26f29dce3af..ef5eb55632ed1 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -2661,6 +2661,7 @@ export type SharedGlobalConfig = RecursiveReadonly<{ kibana: Pick; elasticsearch: Pick; path: Pick; + savedObjects: Pick; }>; // @public @@ -2745,7 +2746,8 @@ export const validBodyOutput: readonly ["data", "stream"]; // // src/core/server/http/router/response.ts:316:3 - (ae-forgotten-export) The symbol "KibanaResponse" needs to be exported by the entry point index.d.ts // src/core/server/legacy/types.ts:135:16 - (ae-forgotten-export) The symbol "LegacyPluginSpec" needs to be exported by the entry point index.d.ts -// src/core/server/plugins/types.ts:272:3 - (ae-forgotten-export) The symbol "KibanaConfigType" needs to be exported by the entry point index.d.ts -// src/core/server/plugins/types.ts:272:3 - (ae-forgotten-export) The symbol "SharedGlobalConfigKeys" needs to be exported by the entry point index.d.ts +// src/core/server/plugins/types.ts:274:3 - (ae-forgotten-export) The symbol "KibanaConfigType" needs to be exported by the entry point index.d.ts +// src/core/server/plugins/types.ts:274:3 - (ae-forgotten-export) The symbol "SharedGlobalConfigKeys" needs to be exported by the entry point index.d.ts +// src/core/server/plugins/types.ts:277:3 - (ae-forgotten-export) The symbol "SavedObjectsConfigType" needs to be exported by the entry point index.d.ts ``` diff --git a/src/plugins/legacy_export/server/plugin.ts b/src/plugins/legacy_export/server/plugin.ts index 22c7c1a05dddb..9e1e631903240 100644 --- a/src/plugins/legacy_export/server/plugin.ts +++ b/src/plugins/legacy_export/server/plugin.ts @@ -18,18 +18,23 @@ */ import { Plugin, CoreSetup, PluginInitializerContext } from 'kibana/server'; +import { first } from 'rxjs/operators'; import { registerRoutes } from './routes'; export class LegacyExportPlugin implements Plugin<{}, {}> { - private readonly kibanaVersion: string; + constructor(private readonly initContext: PluginInitializerContext) {} - constructor(context: PluginInitializerContext) { - this.kibanaVersion = context.env.packageInfo.version; - } + public async setup({ http }: CoreSetup) { + const globalConfig = await this.initContext.config.legacy.globalConfig$ + .pipe(first()) + .toPromise(); - public setup({ http }: CoreSetup) { const router = http.createRouter(); - registerRoutes(router, this.kibanaVersion); + registerRoutes( + router, + this.initContext.env.packageInfo.version, + globalConfig.savedObjects.maxImportPayloadBytes.getValueInBytes() + ); return {}; } diff --git a/src/plugins/legacy_export/server/routes/import.ts b/src/plugins/legacy_export/server/routes/import.ts index cf6f28683be17..8d33983ad7e3c 100644 --- a/src/plugins/legacy_export/server/routes/import.ts +++ b/src/plugins/legacy_export/server/routes/import.ts @@ -21,7 +21,7 @@ import { schema } from '@kbn/config-schema'; import { IRouter, SavedObject } from 'src/core/server'; import { importDashboards } from '../lib'; -export const registerImportRoute = (router: IRouter) => { +export const registerImportRoute = (router: IRouter, maxImportPayloadBytes: number) => { router.post( { path: '/api/kibana/dashboards/import', @@ -39,6 +39,9 @@ export const registerImportRoute = (router: IRouter) => { }, options: { tags: ['api'], + body: { + maxBytes: maxImportPayloadBytes, + }, }, }, async (ctx, req, res) => { diff --git a/src/plugins/legacy_export/server/routes/index.ts b/src/plugins/legacy_export/server/routes/index.ts index 7b9de7f016b6b..cac405ce9bdf9 100644 --- a/src/plugins/legacy_export/server/routes/index.ts +++ b/src/plugins/legacy_export/server/routes/index.ts @@ -21,7 +21,11 @@ import { IRouter } from 'src/core/server'; import { registerImportRoute } from './import'; import { registerExportRoute } from './export'; -export const registerRoutes = (router: IRouter, kibanaVersion: string) => { +export const registerRoutes = ( + router: IRouter, + kibanaVersion: string, + maxImportPayloadBytes: number +) => { registerExportRoute(router, kibanaVersion); - registerImportRoute(router); + registerImportRoute(router, maxImportPayloadBytes); };