From 354d8218f7609bbc0a5897f90a0cd72e15abcab7 Mon Sep 17 00:00:00 2001 From: Milosz Marcinkowski Date: Mon, 30 Sep 2024 11:17:33 +0200 Subject: [PATCH 1/2] use one mapping for metadata details --- .../get_service_instance_metadata_details.ts | 13 +-- .../apm/server/utils/es_fields_mappings.ts | 106 ++---------------- 2 files changed, 15 insertions(+), 104 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/server/routes/services/get_service_instance_metadata_details.ts b/x-pack/plugins/observability_solution/apm/server/routes/services/get_service_instance_metadata_details.ts index 23491821aa9cf4..2054c29deae79b 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/services/get_service_instance_metadata_details.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/services/get_service_instance_metadata_details.ts @@ -7,11 +7,7 @@ import { merge } from 'lodash'; import { rangeQuery } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; -import { - metadataAppMetricMapping, - metadataAppTransactionEventMapping, - metaDataAppTransactionMetricMapping, -} from '../../utils/es_fields_mappings'; +import { serviceInstanceMetadataDetailsMapping } from '../../utils/es_fields_mappings'; import { METRICSET_NAME, SERVICE_NAME, SERVICE_NODE_NAME } from '../../../common/es_fields/apm'; import { maybe } from '../../../common/utils/maybe'; import { @@ -76,7 +72,7 @@ export async function getServiceInstanceMetadataDetails({ } ); - return maybe(metadataAppMetricMapping(response.hits.hits[0]?.fields)); + return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields)); } async function getTransactionEventSample() { @@ -96,7 +92,7 @@ export async function getServiceInstanceMetadataDetails({ } ); - return maybe(metadataAppTransactionEventMapping(response.hits.hits[0]?.fields)); + return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields)); } async function getTransactionMetricSample() { @@ -119,7 +115,7 @@ export async function getServiceInstanceMetadataDetails({ }, } ); - return maybe(metaDataAppTransactionMetricMapping(response.hits.hits[0]?.fields)); + return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields)); } // we can expect the most detail of application metrics, @@ -138,7 +134,6 @@ export async function getServiceInstanceMetadataDetails({ applicationMetricSample ); - // todo: find scenarios for container and cloud then add to mappings const { agent, service, container, kubernetes, host, cloud } = sample; return { diff --git a/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts b/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts index b8b57b5f36b021..f48b6015105a02 100644 --- a/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts +++ b/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts @@ -87,6 +87,7 @@ import { SERVICE_TARGET_NAME, SERVICE_TARGET_TYPE, SPAN_REPRESENTATIVE_COUNT, + SERVICE_LANGUAGE_VERSION, } from '@kbn/apm-types'; import { Transaction } from '../../typings/es_schemas/ui/transaction'; import { TransactionRaw } from '../../typings/es_schemas/raw/transaction_raw'; @@ -566,35 +567,28 @@ export const serviceVersionMapping = ( }; }; -export const metadataAppMetricMapping = (fields: Partial>) => { +// todo: missing `container` and `could` mappings +export const serviceInstanceMetadataDetailsMapping = ( + fields: Partial> = {} +) => { if (!fields) return undefined; return { '@timestamp': normalizeValue(fields[AT_TIMESTAMP]), agent: { - name: normalizeValue(fields[AGENT_NAME]), + name: normalizeValue(fields[AGENT_NAME]), version: normalizeValue(fields[AGENT_VERSION]), activation_method: normalizeValue(fields[AGENT_ACTIVATION_METHOD]), }, host: { architecture: normalizeValue(fields[HOST_ARCHITECTURE]), hostname: normalizeValue(fields[HOST_HOSTNAME]), - ip: normalizeValue(fields[HOST_IP]), name: normalizeValue(fields[HOST_NAME]), + ip: normalizeValue(fields[HOST_IP]), os: { platform: normalizeValue(fields[HOST_OS_PLATFORM]), }, }, - kubernetes: { - namespace: normalizeValue(fields[KUBERNETES_NAMESPACE]), - node: { - name: normalizeValue(fields[KUBERNETES_NODE_NAME]), - }, - pod: { - name: normalizeValue(fields[KUBERNETES_POD_NAME]), - uid: normalizeValue(fields[KUBERNETES_POD_UID]), - }, - }, service: { name: normalizeValue(fields[SERVICE_NAME]), environment: normalizeValue(fields[SERVICE_ENVIRONMENT]), @@ -602,9 +596,6 @@ export const metadataAppMetricMapping = (fields: Partial(fields[SERVICE_FRAMEWORK_NAME]), versions: normalizeValue(fields[SERVICE_FRAMEWORK_VERSION]), }, - language: { - name: normalizeValue(fields[SERVICE_LANGUAGE_NAME]), - }, node: { name: normalizeValue(fields[SERVICE_NODE_NAME]), }, @@ -612,15 +603,12 @@ export const metadataAppMetricMapping = (fields: Partial(fields[SERVICE_RUNTIME_NAME]), version: normalizeValue(fields[SERVICE_RUNTIME_VERSION]), }, + language: { + name: normalizeValue(fields[SERVICE_LANGUAGE_NAME]), + version: normalizeValue(fields[SERVICE_LANGUAGE_VERSION]), + }, version: normalizeValue(fields[SERVICE_VERSION]), }, - }; -}; - -export const metadataAppTransactionEventMapping = (fields: Partial>) => { - if (!fields) return undefined; - - return { kubernetes: { namespace: normalizeValue(fields[KUBERNETES_NAMESPACE]), node: { @@ -631,78 +619,6 @@ export const metadataAppTransactionEventMapping = (fields: Partial(fields[KUBERNETES_POD_UID]), }, }, - agent: { - name: normalizeValue(fields[AGENT_NAME]), - version: normalizeValue(fields[AGENT_VERSION]), - activation_method: normalizeValue(fields[AGENT_ACTIVATION_METHOD]), - }, - '@timestamp': normalizeValue(fields[AT_TIMESTAMP]), - service: { - name: normalizeValue(fields[SERVICE_NAME]), - environment: normalizeValue(fields[SERVICE_ENVIRONMENT]), - framework: { - name: normalizeValue(fields[SERVICE_FRAMEWORK_NAME]), - versions: normalizeValue(fields[SERVICE_FRAMEWORK_VERSION]), - }, - language: { - name: normalizeValue(fields[SERVICE_LANGUAGE_NAME]), - }, - node: { - name: normalizeValue(fields[SERVICE_NODE_NAME]), - }, - runtime: { - name: normalizeValue(fields[SERVICE_RUNTIME_NAME]), - version: normalizeValue(fields[SERVICE_RUNTIME_VERSION]), - }, - version: normalizeValue(fields[SERVICE_VERSION]), - }, - host: { - architecture: normalizeValue(fields[HOST_ARCHITECTURE]), - hostname: normalizeValue(fields[HOST_HOSTNAME]), - ip: fields[HOST_IP] as string[] | undefined, - name: normalizeValue(fields[HOST_NAME]), - os: { - platform: normalizeValue(fields[HOST_OS_PLATFORM]), - }, - }, - }; -}; - -export const metaDataAppTransactionMetricMapping = (fields: Partial>) => { - if (!fields) return undefined; - - return { - '@timestamp': normalizeValue(fields[AT_TIMESTAMP]), - agent: { - name: normalizeValue(fields[AGENT_NAME]), - }, - host: { - hostname: normalizeValue(fields[HOST_HOSTNAME]), - name: normalizeValue(fields[HOST_NAME]), - os: { - platform: normalizeValue(fields[HOST_OS_PLATFORM]), - }, - }, - kubernetes: { - pod: { - name: normalizeValue(fields[KUBERNETES_POD_NAME]), - }, - }, - service: { - name: normalizeValue(fields[SERVICE_NAME]), - environment: normalizeValue(fields[SERVICE_ENVIRONMENT]), - language: { - name: normalizeValue(fields[SERVICE_LANGUAGE_NAME]), - }, - node: { - name: normalizeValue(fields[SERVICE_NODE_NAME]), - }, - runtime: { - name: normalizeValue(fields[SERVICE_RUNTIME_NAME]), - version: normalizeValue(fields[SERVICE_RUNTIME_VERSION]), - }, - version: normalizeValue(fields[SERVICE_VERSION]), - }, }; }; From aebea67779fc34029c1917c61670e539c80918bf Mon Sep 17 00:00:00 2001 From: Milosz Marcinkowski Date: Mon, 30 Sep 2024 12:37:15 +0200 Subject: [PATCH 2/2] update 'todo' and processor_name typo --- packages/kbn-apm-types/src/es_fields/apm.ts | 2 +- .../apm/server/utils/es_fields_mappings.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/kbn-apm-types/src/es_fields/apm.ts b/packages/kbn-apm-types/src/es_fields/apm.ts index eaf6e4e0282f86..a8b7ae558b3e69 100644 --- a/packages/kbn-apm-types/src/es_fields/apm.ts +++ b/packages/kbn-apm-types/src/es_fields/apm.ts @@ -61,7 +61,7 @@ export const OBSERVER_TYPE = 'observer.type'; export const OBSERVER_VERSION = 'observer.version'; export const OBSERVER_VERSION_MAJOR = 'observer.version_major'; export const PROCESSOR_EVENT = 'processor.event'; -export const PROCESOR_NAME = 'processor.name'; +export const PROCESSOR_NAME = 'processor.name'; export const TRANSACTION_DURATION = 'transaction.duration.us'; export const TRANSACTION_DURATION_HISTOGRAM = 'transaction.duration.histogram'; diff --git a/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts b/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts index f48b6015105a02..ccd116c8d59494 100644 --- a/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts +++ b/x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts @@ -29,7 +29,7 @@ import { OBSERVER_VERSION, OBSERVER_VERSION_MAJOR, PARENT_ID, - PROCESOR_NAME, + PROCESSOR_NAME, PROCESSOR_EVENT, SERVICE_ENVIRONMENT, SERVICE_FRAMEWORK_NAME, @@ -198,7 +198,7 @@ export const spanMapping = (fields: Partial>) => { success_count: normalizeValue(fields[EVENT_SUCCESS_COUNT]), }, processor: { - name: normalizeValue<'transaction'>(fields[PROCESOR_NAME]), + name: normalizeValue<'transaction'>(fields[PROCESSOR_NAME]), event: normalizeValue<'span'>(fields[PROCESSOR_EVENT]), }, transaction: { @@ -518,7 +518,7 @@ export const errorSampleDetailsMapping = ( grouping_key: normalizeValue(fields[ERROR_GROUP_ID]), }, processor: { - name: normalizeValue<'error'>(fields[PROCESOR_NAME]), + name: normalizeValue<'error'>(fields[PROCESSOR_NAME]), event: normalizeValue<'error'>(fields[PROCESSOR_EVENT]), }, transaction: { @@ -553,7 +553,7 @@ export const serviceMetadataIconsMapping = ( }; }; -// todo(milosz): test it +// todo: check https://github.com/jennypavlova/kibana/pull/6#discussion_r1771611817 export const serviceVersionMapping = ( fields: Partial> ): Pick | undefined => { @@ -622,7 +622,7 @@ export const serviceInstanceMetadataDetailsMapping = ( }; }; -// todo: missing cloud and service properties +// todo: missing `cloud` and `service` properties export const serviceAgentNameMapping = (fields: Partial>) => { if (!fields) return undefined;