mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[APM] Add scenario for AWS lambda to synthtrace (#135019)
* Add a scenario for AWS lambda to synthtrace
This commit is contained in:
parent
ff6137fa1c
commit
876f9d5884
6 changed files with 66 additions and 2 deletions
|
@ -39,6 +39,11 @@ export class Instance extends Entity<ApmFields> {
|
|||
});
|
||||
}
|
||||
|
||||
containerId(containerId: string) {
|
||||
this.fields['container.id'] = containerId;
|
||||
return this;
|
||||
}
|
||||
|
||||
podId(podId: string) {
|
||||
this.fields['kubernetes.pod.uid'] = podId;
|
||||
return this;
|
||||
|
|
|
@ -16,7 +16,6 @@ export class Service extends Entity<ApmFields> {
|
|||
...this.fields,
|
||||
['service.node.name']: instanceName,
|
||||
'host.name': instanceName,
|
||||
'container.id': instanceName,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
58
packages/elastic-apm-synthtrace/src/scenarios/aws_lambda.ts
Normal file
58
packages/elastic-apm-synthtrace/src/scenarios/aws_lambda.ts
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* 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 { apm, timerange } from '..';
|
||||
import { ApmFields } from '../lib/apm/apm_fields';
|
||||
import { Scenario } from '../scripts/scenario';
|
||||
import { getLogger } from '../scripts/utils/get_common_services';
|
||||
import { RunOptions } from '../scripts/utils/parse_run_cli_flags';
|
||||
|
||||
const scenario: Scenario<ApmFields> = async (runOptions: RunOptions) => {
|
||||
const logger = getLogger(runOptions);
|
||||
|
||||
return {
|
||||
generate: ({ from, to }) => {
|
||||
const range = timerange(from, to);
|
||||
const timestamps = range.interval('1s').rate(3);
|
||||
|
||||
const instance = apm.service('lambda-python', 'production', 'python').instance('instance');
|
||||
|
||||
const traceEventsSetups = [
|
||||
{ functionName: 'lambda-python-1', coldStart: true },
|
||||
{ functionName: 'lambda-python-2', coldStart: false },
|
||||
];
|
||||
|
||||
const traceEvents = ({ functionName, coldStart }: typeof traceEventsSetups[0]) => {
|
||||
return timestamps.generator((timestamp) =>
|
||||
instance
|
||||
.transaction('GET /order/{id}')
|
||||
.defaults({
|
||||
'service.runtime.name': 'AWS_Lambda_python3.8',
|
||||
'cloud.provider': 'aws',
|
||||
'cloud.service.name': 'lambda',
|
||||
'cloud.region': 'us-east-1',
|
||||
'faas.id': `arn:aws:lambda:us-west-2:123456789012:function:${functionName}`,
|
||||
'faas.coldstart': coldStart,
|
||||
'faas.trigger.type': 'other',
|
||||
})
|
||||
.timestamp(timestamp)
|
||||
.duration(1000)
|
||||
.success()
|
||||
);
|
||||
};
|
||||
|
||||
return traceEventsSetups
|
||||
.map((traceEventsSetup) =>
|
||||
logger.perf('generating_apm_events', () => traceEvents(traceEventsSetup))
|
||||
)
|
||||
.reduce((p, c) => p.merge(c));
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default scenario;
|
|
@ -17,7 +17,7 @@ describe('simple trace', () => {
|
|||
|
||||
beforeEach(() => {
|
||||
const javaService = apm.service('opbeans-java', 'production', 'java');
|
||||
const javaInstance = javaService.instance('instance-1');
|
||||
const javaInstance = javaService.instance('instance-1').containerId('instance-1');
|
||||
|
||||
const range = timerange(
|
||||
new Date('2021-01-01T00:00:00.000Z'),
|
||||
|
|
|
@ -64,6 +64,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
.rate(1)
|
||||
.generator((timestamp) =>
|
||||
instance
|
||||
.containerId(instanceName)
|
||||
.transaction('GET /api/product/list')
|
||||
.timestamp(timestamp)
|
||||
.duration(1000)
|
||||
|
|
|
@ -73,6 +73,7 @@ export async function generateData({
|
|||
.rate(rate)
|
||||
.generator((timestamp) =>
|
||||
instance
|
||||
.containerId('instance-a')
|
||||
.transaction(transaction.name)
|
||||
.timestamp(timestamp)
|
||||
.defaults({
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue