From c2ef407d0431660bc46f40ebf6817baec3aeb5f2 Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Tue, 29 Sep 2020 14:33:29 -0500 Subject: [PATCH] OpenTelemetry icons and data telemetry (#78499) Add OpenTelemetry agent names and and icon. OpenTelemetry services will have the same icon as the corresponding APM services. Services that report "otlp" as their agent name use the OpenTelemetry icon. The OpenTelemetry agents are now collected in the data telemetry along with the other agent names. Change "ratio" in the telemetry to a float. --- .../__snapshots__/apm_telemetry.test.ts.snap | 754 +++++++++++++++++- x-pack/plugins/apm/common/agent_name.ts | 42 +- x-pack/plugins/apm/common/apm_telemetry.ts | 6 +- .../components/app/RumDashboard/index.tsx | 4 +- .../shared/AgentIcon/get_agent_icon.test.ts | 42 + .../shared/AgentIcon/get_agent_icon.ts | 43 +- .../shared/AgentIcon/icons/opentelemetry.svg | 1 + .../collect_data_telemetry/tasks.ts | 4 +- .../apm/typings/es_schemas/ui/fields/agent.ts | 13 +- 9 files changed, 875 insertions(+), 34 deletions(-) create mode 100644 x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.test.ts create mode 100644 x-pack/plugins/apm/public/components/shared/AgentIcon/icons/opentelemetry.svg diff --git a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap index e9763082a399..663411dff76f 100644 --- a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap @@ -524,6 +524,710 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the } } } + }, + "otlp": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/cpp": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/dotnet": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/erlang": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/go": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/java": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/nodejs": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/php": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/python": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/ruby": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } + }, + "opentelemetry/webjs": { + "properties": { + "agent": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "language": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "runtime": { + "properties": { + "composite": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } } } }, @@ -538,7 +1242,7 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "type": "long" }, "ratio": { - "type": "long" + "type": "float" } } }, @@ -551,7 +1255,7 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "type": "long" }, "ratio": { - "type": "long" + "type": "float" } } }, @@ -564,7 +1268,7 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "type": "long" }, "ratio": { - "type": "long" + "type": "float" } } } @@ -885,6 +1589,50 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "rum-js": { "type": "long", "null_value": 0 + }, + "otlp": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/cpp": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/dotnet": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/erlang": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/go": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/java": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/nodejs": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/php": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/python": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/ruby": { + "type": "long", + "null_value": 0 + }, + "opentelemetry/webjs": { + "type": "long", + "null_value": 0 } } }, diff --git a/x-pack/plugins/apm/common/agent_name.ts b/x-pack/plugins/apm/common/agent_name.ts index 8b479d1d82fe..ca9e59e050c9 100644 --- a/x-pack/plugins/apm/common/agent_name.ts +++ b/x-pack/plugins/apm/common/agent_name.ts @@ -14,6 +14,20 @@ import { AgentName } from '../typings/es_schemas/ui/fields/agent'; * AGENT_NAMES array. */ +export const OPEN_TELEMETRY_AGENT_NAMES: AgentName[] = [ + 'otlp', + 'opentelemetry/cpp', + 'opentelemetry/dotnet', + 'opentelemetry/erlang', + 'opentelemetry/go', + 'opentelemetry/java', + 'opentelemetry/nodejs', + 'opentelemetry/php', + 'opentelemetry/python', + 'opentelemetry/ruby', + 'opentelemetry/webjs', +]; + export const AGENT_NAMES: AgentName[] = [ 'dotnet', 'go', @@ -23,18 +37,19 @@ export const AGENT_NAMES: AgentName[] = [ 'python', 'ruby', 'rum-js', + ...OPEN_TELEMETRY_AGENT_NAMES, ]; -export function isAgentName(agentName: string): agentName is AgentName { - return AGENT_NAMES.includes(agentName as AgentName); -} - -export const RUM_AGENTS = ['js-base', 'rum-js']; +export const RUM_AGENT_NAMES: AgentName[] = [ + 'js-base', + 'rum-js', + 'opentelemetry/webjs', +]; export function isRumAgentName( agentName?: string -): agentName is 'js-base' | 'rum-js' { - return RUM_AGENTS.includes(agentName!); +): agentName is 'js-base' | 'rum-js' | 'opentelemetry/webjs' { + return RUM_AGENT_NAMES.includes(agentName! as AgentName); } export function isJavaAgentName( @@ -42,16 +57,3 @@ export function isJavaAgentName( ): agentName is 'java' { return agentName === 'java'; } - -/** - * "Normalizes" and agent name by: - * - * * Converting to lowercase - * * Converting "rum-js" to "js-base" - * - * This helps dealing with some older agent versions - */ -export function getNormalizedAgentName(agentName?: string) { - const lowercased = agentName && agentName.toLowerCase(); - return isRumAgentName(lowercased) ? 'js-base' : lowercased; -} diff --git a/x-pack/plugins/apm/common/apm_telemetry.ts b/x-pack/plugins/apm/common/apm_telemetry.ts index 3e885f4948c1..874cee05553d 100644 --- a/x-pack/plugins/apm/common/apm_telemetry.ts +++ b/x-pack/plugins/apm/common/apm_telemetry.ts @@ -19,6 +19,10 @@ export function getApmTelemetryMapping() { ignore_above: 1024, }; + const float = { + type: 'float', + }; + const long = { type: 'long', }; @@ -78,7 +82,7 @@ export function getApmTelemetryMapping() { properties: { expected_metric_document_count: long, transaction_count: long, - ratio: long, + ratio: float, }, }; diff --git a/x-pack/plugins/apm/public/components/app/RumDashboard/index.tsx b/x-pack/plugins/apm/public/components/app/RumDashboard/index.tsx index 588831d55771..33a7a23ab086 100644 --- a/x-pack/plugins/apm/public/components/app/RumDashboard/index.tsx +++ b/x-pack/plugins/apm/public/components/app/RumDashboard/index.tsx @@ -16,7 +16,7 @@ import { Projection } from '../../../../common/projections'; import { RumDashboard } from './RumDashboard'; import { useUrlParams } from '../../../hooks/useUrlParams'; import { useFetcher } from '../../../hooks/useFetcher'; -import { RUM_AGENTS } from '../../../../common/agent_name'; +import { RUM_AGENT_NAMES } from '../../../../common/agent_name'; import { EnvironmentFilter } from '../../shared/EnvironmentFilter'; import { URLFilter } from './URLFilter'; import { LocalUIFilters } from '../../shared/LocalUIFilters'; @@ -48,7 +48,7 @@ export function RumOverview() { query: { start, end, - uiFilters: JSON.stringify({ agentName: RUM_AGENTS }), + uiFilters: JSON.stringify({ agentName: RUM_AGENT_NAMES }), }, }, }); diff --git a/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.test.ts b/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.test.ts new file mode 100644 index 000000000000..6a739a668c40 --- /dev/null +++ b/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.test.ts @@ -0,0 +1,42 @@ +/* + * 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 { getAgentIconKey } from './get_agent_icon'; + +const examples = { + DotNet: 'dotnet', // Test for case sensitivity + dotnet: 'dotnet', + go: 'go', + java: 'java', + 'js-base': 'rum', + nodejs: 'nodejs', + 'opentelemetry/cpp': 'opentelemetry', + 'opentelemetry/dotnet': 'dotnet', + 'opentelemetry/erlang': 'opentelemetry', + 'opentelemetry/go': 'go', + 'opentelemetry/java': 'java', + 'opentelemetry/nodejs': 'nodejs', + 'opentelemetry/php': 'php', + 'opentelemetry/python': 'python', + 'opentelemetry/ruby': 'ruby', + 'opentelemetry/webjs': 'rum', + otlp: 'opentelemetry', + php: 'php', + python: 'python', + ruby: 'ruby', + 'rum-js': 'rum', + 'something else': undefined, +}; + +describe('getAgentIconKey', () => { + Object.entries(examples).forEach(([key, value]) => { + describe(`with ${key}`, () => { + it(`returns ${value}`, () => { + expect(getAgentIconKey(key)).toEqual(value); + }); + }); + }); +}); diff --git a/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.ts b/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.ts index 2475eecee8e3..939b55f6ae6f 100644 --- a/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.ts +++ b/x-pack/plugins/apm/public/components/shared/AgentIcon/get_agent_icon.ts @@ -4,11 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getNormalizedAgentName } from '../../../../common/agent_name'; +import { + OPEN_TELEMETRY_AGENT_NAMES, + RUM_AGENT_NAMES, +} from '../../../../common/agent_name'; +import { AgentName } from '../../../../typings/es_schemas/ui/fields/agent'; import dotNetIcon from './icons/dot-net.svg'; import goIcon from './icons/go.svg'; import javaIcon from './icons/java.svg'; import nodeJsIcon from './icons/nodejs.svg'; +import openTelemetryIcon from './icons/opentelemetry.svg'; import phpIcon from './icons/php.svg'; import pythonIcon from './icons/python.svg'; import rubyIcon from './icons/ruby.svg'; @@ -18,14 +23,42 @@ const agentIcons: { [key: string]: string } = { dotnet: dotNetIcon, go: goIcon, java: javaIcon, - 'js-base': rumJsIcon, nodejs: nodeJsIcon, + opentelemetry: openTelemetryIcon, php: phpIcon, python: pythonIcon, ruby: rubyIcon, + rum: rumJsIcon, }; -export function getAgentIcon(agentName?: string) { - const normalizedAgentName = getNormalizedAgentName(agentName); - return normalizedAgentName && agentIcons[normalizedAgentName]; +// This only needs to be exported for testing purposes, since we stub the SVG +// import values in test. +export function getAgentIconKey(agentName: string) { + // Ignore case + const lowercasedAgentName = agentName.toLowerCase(); + + // RUM agent names + if (RUM_AGENT_NAMES.includes(lowercasedAgentName as AgentName)) { + return 'rum'; + } + + // Remove "opentelemetry/" prefix + const agentNameWithoutPrefix = lowercasedAgentName.replace( + /^opentelemetry\//, + '' + ); + + if (Object.keys(agentIcons).includes(agentNameWithoutPrefix)) { + return agentNameWithoutPrefix; + } + + // OpenTelemetry-only agents + if (OPEN_TELEMETRY_AGENT_NAMES.includes(lowercasedAgentName as AgentName)) { + return 'opentelemetry'; + } +} + +export function getAgentIcon(agentName?: string) { + const key = agentName && getAgentIconKey(agentName); + return key && agentIcons[key]; } diff --git a/x-pack/plugins/apm/public/components/shared/AgentIcon/icons/opentelemetry.svg b/x-pack/plugins/apm/public/components/shared/AgentIcon/icons/opentelemetry.svg new file mode 100644 index 000000000000..1ce99fcc497d --- /dev/null +++ b/x-pack/plugins/apm/public/components/shared/AgentIcon/icons/opentelemetry.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index fcd4f468d436..ac82d353417b 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -8,7 +8,7 @@ import { flatten, merge, sortBy, sum, pickBy } from 'lodash'; import { AggregationOptionsByType } from '../../../../typings/elasticsearch/aggregations'; import { ProcessorEvent } from '../../../../common/processor_event'; import { TelemetryTask } from '.'; -import { AGENT_NAMES, RUM_AGENTS } from '../../../../common/agent_name'; +import { AGENT_NAMES, RUM_AGENT_NAMES } from '../../../../common/agent_name'; import { AGENT_NAME, AGENT_VERSION, @@ -1020,7 +1020,7 @@ export const tasks: TelemetryTask[] = [ timeout, query: { bool: { - filter: [range1d, { terms: { [AGENT_NAME]: RUM_AGENTS } }], + filter: [range1d, { terms: { [AGENT_NAME]: RUM_AGENT_NAMES } }], }, }, aggs: { diff --git a/x-pack/plugins/apm/typings/es_schemas/ui/fields/agent.ts b/x-pack/plugins/apm/typings/es_schemas/ui/fields/agent.ts index 4d98825f36b5..b5f3ae834d5e 100644 --- a/x-pack/plugins/apm/typings/es_schemas/ui/fields/agent.ts +++ b/x-pack/plugins/apm/typings/es_schemas/ui/fields/agent.ts @@ -16,7 +16,18 @@ export type AgentName = | 'nodejs' | 'python' | 'dotnet' - | 'ruby'; + | 'ruby' + | 'otlp' + | 'opentelemetry/cpp' + | 'opentelemetry/dotnet' + | 'opentelemetry/erlang' + | 'opentelemetry/go' + | 'opentelemetry/java' + | 'opentelemetry/nodejs' + | 'opentelemetry/php' + | 'opentelemetry/python' + | 'opentelemetry/ruby' + | 'opentelemetry/webjs'; export interface Agent { ephemeral_id?: string;