mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[APM] telemetry auto version over sdk version for otel agents in explorer (#152911)
Relates to https://github.com/elastic/kibana/issues/152326. ### Changes - Returning `labels.telemetry_auto_version` instead of `agent.version` when present for otel agents.
This commit is contained in:
parent
aa1037f958
commit
e36ed9658d
8 changed files with 117 additions and 35 deletions
|
@ -116,6 +116,7 @@ export type ApmFields = Fields<{
|
|||
'kubernetes.pod.name': string;
|
||||
'kubernetes.pod.uid': string;
|
||||
'labels.name': string;
|
||||
'labels.telemetry_auto_version': string;
|
||||
'metricset.name': string;
|
||||
'network.carrier.icc': string;
|
||||
'network.carrier.mcc': string;
|
||||
|
|
|
@ -41,6 +41,7 @@ const KEY_FIELDS: Array<keyof ApmFields> = [
|
|||
'transaction.name',
|
||||
'span.type',
|
||||
'span.subtype',
|
||||
'labels.telemetry_auto_version',
|
||||
];
|
||||
|
||||
export function getBreakdownMetrics(events: ApmFields[]): ApmFields[] {
|
||||
|
|
|
@ -48,7 +48,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -68,7 +68,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -129,7 +129,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -149,7 +149,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -210,7 +210,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -230,7 +230,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -291,7 +291,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -311,7 +311,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -372,7 +372,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -392,7 +392,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -453,7 +453,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -473,7 +473,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -534,7 +534,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -554,7 +554,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -615,7 +615,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -635,7 +635,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -696,7 +696,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -716,7 +716,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -777,7 +777,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -797,7 +797,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -858,7 +858,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -878,7 +878,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -939,7 +939,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -959,7 +959,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1020,7 +1020,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1040,7 +1040,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1101,7 +1101,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1121,7 +1121,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1182,7 +1182,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "256555875",
|
||||
"metricset.id": "1946223711",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
@ -1202,7 +1202,7 @@ Array [
|
|||
"container.id": "instance-1",
|
||||
"host.name": "instance-1",
|
||||
"meta": Object {
|
||||
"metricset.id": "290461557",
|
||||
"metricset.id": "3995767080",
|
||||
},
|
||||
"metricset.name": "span_breakdown",
|
||||
"processor.event": "metric",
|
||||
|
|
|
@ -154,6 +154,8 @@ exports[`Error KUBERNETES_REPLICASET_NAME 1`] = `undefined`;
|
|||
|
||||
exports[`Error LABEL_NAME 1`] = `undefined`;
|
||||
|
||||
exports[`Error LABEL_TELEMETRY_AUTO_VERSION 1`] = `undefined`;
|
||||
|
||||
exports[`Error METRIC_CGROUP_MEMORY_LIMIT_BYTES 1`] = `undefined`;
|
||||
|
||||
exports[`Error METRIC_CGROUP_MEMORY_USAGE_BYTES 1`] = `undefined`;
|
||||
|
@ -449,6 +451,8 @@ exports[`Span KUBERNETES_REPLICASET_NAME 1`] = `undefined`;
|
|||
|
||||
exports[`Span LABEL_NAME 1`] = `undefined`;
|
||||
|
||||
exports[`Span LABEL_TELEMETRY_AUTO_VERSION 1`] = `undefined`;
|
||||
|
||||
exports[`Span METRIC_CGROUP_MEMORY_LIMIT_BYTES 1`] = `undefined`;
|
||||
|
||||
exports[`Span METRIC_CGROUP_MEMORY_USAGE_BYTES 1`] = `undefined`;
|
||||
|
@ -754,6 +758,8 @@ exports[`Transaction KUBERNETES_REPLICASET_NAME 1`] = `undefined`;
|
|||
|
||||
exports[`Transaction LABEL_NAME 1`] = `undefined`;
|
||||
|
||||
exports[`Transaction LABEL_TELEMETRY_AUTO_VERSION 1`] = `undefined`;
|
||||
|
||||
exports[`Transaction METRIC_CGROUP_MEMORY_LIMIT_BYTES 1`] = `undefined`;
|
||||
|
||||
exports[`Transaction METRIC_CGROUP_MEMORY_USAGE_BYTES 1`] = `undefined`;
|
||||
|
|
|
@ -135,6 +135,7 @@ export const METRICSET_NAME = 'metricset.name';
|
|||
export const METRICSET_INTERVAL = 'metricset.interval';
|
||||
|
||||
export const LABEL_NAME = 'labels.name';
|
||||
export const LABEL_TELEMETRY_AUTO_VERSION = 'labels.telemetry_auto_version';
|
||||
|
||||
export const HOST = 'host';
|
||||
export const HOST_HOSTNAME = 'host.hostname'; // Do not use. Please use `HOST_NAME` instead.
|
||||
|
|
|
@ -5,12 +5,23 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { isOpenTelemetryAgentName } from '../../../common/agent_name';
|
||||
import { AgentName } from '../../../typings/es_schemas/ui/fields/agent';
|
||||
import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client';
|
||||
import { RandomSampler } from '../../lib/helpers/get_random_sampler';
|
||||
import { getAgentsItems } from './get_agents_items';
|
||||
import { getAgentDocsPageUrl } from './get_agent_url_repository';
|
||||
|
||||
const getOtelAgentVersion = (item: {
|
||||
agentTelemetryAutoVersion: string[];
|
||||
agentVersion: string[];
|
||||
}) => {
|
||||
// Auto version should take precedence over sdk version
|
||||
return item.agentTelemetryAutoVersion.length > 0
|
||||
? item.agentTelemetryAutoVersion
|
||||
: item.agentVersion;
|
||||
};
|
||||
|
||||
export async function getAgents({
|
||||
environment,
|
||||
serviceName,
|
||||
|
@ -42,9 +53,18 @@ export async function getAgents({
|
|||
});
|
||||
|
||||
return {
|
||||
items: items.map((item) => ({
|
||||
...item,
|
||||
agentDocsPageUrl: getAgentDocsPageUrl(item.agentName as AgentName),
|
||||
})),
|
||||
items: items.map((item) => {
|
||||
const agentVersion = isOpenTelemetryAgentName(item.agentName)
|
||||
? getOtelAgentVersion(item)
|
||||
: item.agentVersion;
|
||||
|
||||
const { agentTelemetryAutoVersion, ...rest } = item;
|
||||
|
||||
return {
|
||||
...rest,
|
||||
agentVersion,
|
||||
agentDocsPageUrl: getAgentDocsPageUrl(item.agentName as AgentName),
|
||||
};
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import {
|
|||
import {
|
||||
AGENT_NAME,
|
||||
AGENT_VERSION,
|
||||
LABEL_TELEMETRY_AUTO_VERSION,
|
||||
SERVICE_ENVIRONMENT,
|
||||
SERVICE_LANGUAGE_NAME,
|
||||
SERVICE_NAME,
|
||||
|
@ -91,6 +92,11 @@ export async function getAgentsItems({
|
|||
field: SERVICE_NODE_NAME,
|
||||
},
|
||||
},
|
||||
agentTelemetryAutoVersions: {
|
||||
terms: {
|
||||
field: LABEL_TELEMETRY_AUTO_VERSION,
|
||||
},
|
||||
},
|
||||
agentVersions: {
|
||||
terms: {
|
||||
field: AGENT_VERSION,
|
||||
|
@ -128,6 +134,10 @@ export async function getAgentsItems({
|
|||
agentVersion: bucket.agentVersions.buckets.map(
|
||||
(version) => version.key as string
|
||||
),
|
||||
agentTelemetryAutoVersion:
|
||||
bucket.agentTelemetryAutoVersions.buckets.map(
|
||||
(version) => version.key as string
|
||||
),
|
||||
// service.node.name is set by the server only if a container.id or host.name are set. Otherwise should be explicitly set by agents.
|
||||
instances: (bucket.instances.value as number) || 1,
|
||||
};
|
||||
|
|
|
@ -20,6 +20,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
|
||||
const goServiceName = 'opbeans-go';
|
||||
const nodeServiceName = 'opbeans-node';
|
||||
const otelJavaServiceName = 'opbeans-java-otel';
|
||||
|
||||
async function callApi(
|
||||
overrides?: RecursivePartial<
|
||||
|
@ -53,6 +54,19 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
registry.when('Agent explorer', { config: 'basic', archives: [] }, () => {
|
||||
describe('when data is loaded', () => {
|
||||
before(async () => {
|
||||
const serviceOtelJava = apm
|
||||
.service({
|
||||
name: otelJavaServiceName,
|
||||
environment: 'production',
|
||||
agentName: 'opentelemetry/java',
|
||||
})
|
||||
.instance('instance-otel-java')
|
||||
.defaults({
|
||||
'agent.version': '1.1.0',
|
||||
'service.language.name': 'java',
|
||||
'labels.telemetry_auto_version': '0.9.1',
|
||||
});
|
||||
|
||||
const serviceGo = apm
|
||||
.service({
|
||||
name: goServiceName,
|
||||
|
@ -90,6 +104,15 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
await synthtraceEsClient.index([
|
||||
timerange(start, end)
|
||||
.interval('5m')
|
||||
.rate(1)
|
||||
.generator((timestamp) =>
|
||||
serviceOtelJava
|
||||
.transaction({ transactionName: 'GET /api/cart/list' })
|
||||
.duration(2000)
|
||||
.timestamp(timestamp)
|
||||
),
|
||||
timerange(start, end)
|
||||
.interval('5m')
|
||||
.rate(1)
|
||||
|
@ -122,13 +145,33 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
|
||||
after(() => synthtraceEsClient.clean());
|
||||
|
||||
it('labels.telemetry_auto_version takes precedence over agent.version for otelAgets', async () => {
|
||||
const { status, body } = await callApi();
|
||||
expect(status).to.be(200);
|
||||
|
||||
const agents = keyBy(body.items, 'serviceName');
|
||||
|
||||
const otelJavaAgent = agents[otelJavaServiceName];
|
||||
expect(otelJavaAgent?.agentVersion).to.contain('0.9.1');
|
||||
expect(otelJavaAgent?.agentVersion).to.not.contain('1.1.0');
|
||||
});
|
||||
|
||||
it('returns correct agents information', async () => {
|
||||
const { status, body } = await callApi();
|
||||
expect(status).to.be(200);
|
||||
expect(body.items).to.have.length(2);
|
||||
expect(body.items).to.have.length(3);
|
||||
|
||||
const agents = keyBy(body.items, 'serviceName');
|
||||
|
||||
const otelJavaAgent = agents[otelJavaServiceName];
|
||||
expect(otelJavaAgent?.environments).to.have.length(1);
|
||||
expect(otelJavaAgent?.environments).to.contain('production');
|
||||
expect(otelJavaAgent?.agentName).to.be('opentelemetry/java');
|
||||
expect(otelJavaAgent?.agentVersion).to.contain('0.9.1');
|
||||
expect(otelJavaAgent?.agentDocsPageUrl).to.be(
|
||||
'https://opentelemetry.io/docs/instrumentation/java'
|
||||
);
|
||||
|
||||
const goAgent = agents[goServiceName];
|
||||
expect(goAgent?.environments).to.have.length(1);
|
||||
expect(goAgent?.environments).to.contain('production');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue