Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[APM] Span link #126630

Merged
merged 68 commits into from
May 16, 2022
Merged
Show file tree
Hide file tree
Changes from 64 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
21223f0
adding span links data generation
cauemarcondes Mar 1, 2022
d9a03db
fixing span links synthtrace
cauemarcondes Apr 13, 2022
57e81c8
adding span links
cauemarcondes Apr 14, 2022
42acf76
span links route
cauemarcondes Apr 19, 2022
5a21117
fixing span links new scenario
cauemarcondes Apr 19, 2022
b09bbc5
adding span links
cauemarcondes Apr 20, 2022
824e0eb
improved tab structure
boriskirov Apr 21, 2022
0215419
span links table
cauemarcondes Apr 21, 2022
ededa2b
Merge branch 'apm-span-links-synthtrace' of github.com:cauemarcondes/…
cauemarcondes Apr 21, 2022
c96aee2
adding span links data generation
cauemarcondes Mar 1, 2022
8aeac1e
fixing span links synthtrace
cauemarcondes Apr 13, 2022
085edba
adding span links
cauemarcondes Apr 14, 2022
b6bf869
span links route
cauemarcondes Apr 19, 2022
835fbd5
fixing span links new scenario
cauemarcondes Apr 19, 2022
425761b
adding span links
cauemarcondes Apr 20, 2022
c7adb65
span links table
cauemarcondes Apr 21, 2022
755ad68
improved tab structure
boriskirov Apr 21, 2022
b765588
adjusting table
cauemarcondes Apr 25, 2022
1a1672b
fixing ts issue
cauemarcondes Apr 25, 2022
98c97d0
filtering data within timerange
cauemarcondes Apr 25, 2022
4b0e098
fixing ts
cauemarcondes Apr 25, 2022
9da866b
fixing ci
cauemarcondes Apr 26, 2022
7e79a64
disabling select option when no link available
cauemarcondes Apr 26, 2022
5027998
adding api tests
cauemarcondes Apr 26, 2022
a49ebdd
fixing tests
cauemarcondes Apr 27, 2022
87ee8fe
e2e tests
cauemarcondes Apr 27, 2022
02d04df
fixing too_many_nested_clauses issue
cauemarcondes Apr 27, 2022
ba6f41a
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine Apr 28, 2022
f536ab7
Merge branch 'apm-span-links-synthtrace' of https://github.com/cauema…
boriskirov Apr 29, 2022
1f76865
refactoring apis
cauemarcondes Apr 29, 2022
ada91a7
Merge branch 'apm-span-links-synthtrace' of github.com:cauemarcondes/…
cauemarcondes Apr 29, 2022
36a97a7
api tests
cauemarcondes Apr 29, 2022
5bf983f
fixing e2e tests
cauemarcondes Apr 29, 2022
9621fda
fixing links
cauemarcondes Apr 29, 2022
c8d7778
renaming link
cauemarcondes Apr 29, 2022
86906cd
fixing tests
cauemarcondes Apr 29, 2022
e49ea5b
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 2, 2022
aa96d6e
addressing PR comments
cauemarcondes May 2, 2022
4154568
fixing test
cauemarcondes May 2, 2022
69ada5b
fixing ci
cauemarcondes May 2, 2022
111fb2f
fixing ci
cauemarcondes May 2, 2022
aec64b7
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 3, 2022
18fc18d
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 3, 2022
3434c52
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 4, 2022
9ef9839
addressing pr comments
cauemarcondes May 4, 2022
35e1d99
passing processor event to incoming links API
cauemarcondes May 4, 2022
185886f
updating api tests
cauemarcondes May 4, 2022
84d480a
renaming incoming and outgoing
cauemarcondes May 4, 2022
83a23fa
wrapping type into details property
cauemarcondes May 4, 2022
93b87df
renaming incoming/outgoing
cauemarcondes May 5, 2022
83dd140
pr comments
cauemarcondes May 5, 2022
ba9ffbf
adding processor event to query
cauemarcondes May 5, 2022
1e6cb97
renaming
cauemarcondes May 5, 2022
651bf45
new API tests
cauemarcondes May 6, 2022
552bc4a
import fix
cauemarcondes May 6, 2022
0be11f3
renaming
cauemarcondes May 6, 2022
1c492c6
adding e2e tests
cauemarcondes May 6, 2022
b9c9824
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 6, 2022
31849b8
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 9, 2022
e61eb95
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 10, 2022
9f48fb0
addressing pr changes
cauemarcondes May 11, 2022
9add102
changing link
cauemarcondes May 11, 2022
c189bd0
Adding filter on children fetch
cauemarcondes May 12, 2022
bb5b7de
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 12, 2022
adcfc6d
Merge branch 'main' into apm-span-links-synthtrace
kibanamachine May 16, 2022
dcd7eb6
renaming services on test
cauemarcondes May 16, 2022
9edfb1c
renaming
cauemarcondes May 16, 2022
ca2e10b
Merge branch 'apm-span-links-synthtrace' of github.com:cauemarcondes/…
cauemarcondes May 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/elastic-apm-synthtrace/src/lib/apm/apm_fields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ export type ApmFields = Fields &
'span.destination.service.response_time.count': number;
'span.self_time.count': number;
'span.self_time.sum.us': number;
'span.links': Array<{
trace: { id: string };
span: { id: string };
}>;
'cloud.provider': string;
'cloud.project.name': string;
'cloud.service.name': string;
Expand Down
110 changes: 110 additions & 0 deletions packages/elastic-apm-synthtrace/src/scripts/examples/04_span_links.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

import { compact, shuffle } from 'lodash';
import { apm, ApmFields, EntityArrayIterable, timerange } from '../..';
import { generateLongId, generateShortId } from '../../lib/utils/generate_id';
import { Scenario } from '../scenario';

function generateExternalSpanLinks() {
// randomly creates external span links 0 - 10
return Array(Math.floor(Math.random() * 11))
cauemarcondes marked this conversation as resolved.
Show resolved Hide resolved
.fill(0)
.map(() => ({ span: { id: generateLongId() }, trace: { id: generateShortId() } }));
}

function getSpanLinksFromEvents(events: ApmFields[]) {
return compact(
events.map((event) => {
const spanId = event['span.id'];
return spanId ? { span: { id: spanId }, trace: { id: event['trace.id']! } } : undefined;
})
);
}

const scenario: Scenario<ApmFields> = async () => {
return {
generate: ({ from, to }) => {
const instanceGo = apm.service('Service A', 'production', 'go').instance('instance-a');
const serviceAEvents = timerange(
new Date('2022-04-25T19:00:00.000Z'),
new Date('2022-04-25T19:01:00.000Z')
)
.interval('1m')
.rate(1)
.generator((timestamp) => {
return instanceGo
.transaction('Transaction A')
.timestamp(timestamp)
.duration(1000)
.success()
.children(
instanceGo
.span('GET /service_A', 'custom')
.timestamp(timestamp + 50)
.duration(100)
.success()
);
});

const serviceAAsArray = serviceAEvents.toArray();
const serviceALinks = getSpanLinksFromEvents(serviceAAsArray);

const instanceJava = apm.service('Service B', 'production', 'java').instance('instance-b');
const serviceBevents = timerange(from, to)
.interval('1m')
.rate(1)
.generator((timestamp) => {
return instanceJava
.transaction('Transaction B')
.timestamp(timestamp)
.duration(1000)
.success()
.children(
instanceJava
.span('GET /service_B', 'external')
.defaults({
'span.links': shuffle([...generateExternalSpanLinks(), ...serviceALinks]),
})
.timestamp(timestamp + 50)
.duration(900)
.success()
);
});

const serviceBAsArray = serviceBevents.toArray();
const serviceBLinks = getSpanLinksFromEvents(serviceBAsArray);

const instanceRuby = apm.service('Service C', 'production', 'ruby').instance('instance-c');
const serviceC = timerange(from, to)
.interval('1m')
.rate(1)
.generator((timestamp) => {
return instanceRuby
.transaction('Transaction C')
.timestamp(timestamp)
.duration(1000)
.success()
.children(
instanceRuby
.span('GET /service_C', 'external')
.defaults({ 'span.links': serviceBLinks })
.timestamp(timestamp + 50)
.duration(900)
.success()
);
});

return new EntityArrayIterable(serviceAAsArray)
.merge(serviceC)
.merge(new EntityArrayIterable(serviceBAsArray));
},
};
};

export default scenario;

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions x-pack/plugins/apm/common/elasticsearch_fieldnames.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ export const SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT =
export const SPAN_DESTINATION_SERVICE_RESPONSE_TIME_SUM =
'span.destination.service.response_time.sum.us';

export const SPAN_LINKS = 'span.links';
export const SPAN_LINKS_TRACE_ID = 'span.links.trace.id';
export const SPAN_LINKS_SPAN_ID = 'span.links.span.id';

// Parent ID for a transaction or span
export const PARENT_ID = 'parent.id';

Expand Down
24 changes: 24 additions & 0 deletions x-pack/plugins/apm/common/span_links.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { AgentName } from '../typings/es_schemas/ui/fields/agent';
import { Environment } from './environment_rt';

export interface SpanLinkDetails {
traceId: string;
spanId: string;
details?: {
agentName: AgentName;
serviceName: string;
duration: number;
environment: Environment;
transactionId?: string;
spanName?: string;
spanSubtype?: string;
spanType?: string;
};
}
Loading