[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:
Yngrid Coello 2023-03-10 14:09:40 +01:00 committed by GitHub
parent aa1037f958
commit e36ed9658d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 117 additions and 35 deletions

View file

@ -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;

View file

@ -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[] {

View file

@ -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",

View file

@ -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`;

View file

@ -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.

View file

@ -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),
};
}),
};
}

View file

@ -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,
};

View file

@ -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');