@uoa/lambda-tracing
Version:
Library for logging & distributed tracing in UoA Lambda projects
44 lines (38 loc) • 1.63 kB
text/typescript
import {NodeTracerProvider} from '@opentelemetry/sdk-trace-node';
import {AwsLambdaInstrumentation} from '@opentelemetry/instrumentation-aws-lambda';
import {registerInstrumentations} from '@opentelemetry/instrumentation';
import {B3_INFO_KEY, UoaB3Propagator} from "./UoaB3Propagator";
import {context} from "@opentelemetry/api";
import {AlwaysOnSampler} from "@opentelemetry/sdk-trace-base";
const provider = new NodeTracerProvider({sampler: new AlwaysOnSampler()});
let infoHeader: string | undefined;
export function initializeTracing() {
provider.register({
propagator: new UoaB3Propagator()
});
registerInstrumentations({
instrumentations: [
new AwsLambdaInstrumentation({
requestHook: (span, { event, context }) => {
span.setAttribute('faas.name', context.functionName);
infoHeader = undefined; //reset header value in case lambda execution environment maintained since last invocation
},
responseHook: (span, { err, res }) => {
if (err instanceof Error) span.setAttribute('faas.error', err.message);
if (res) span.setAttribute('faas.res', res);
},
disableAwsContextPropagation: true
})
]
});
}
export function getTraceInfoHeader(): string {
if (infoHeader) {
return infoHeader;
} else {
return <string>context.active().getValue(B3_INFO_KEY);
}
}
export function setTraceInfoHeader(info: string) {
infoHeader = info;
}