import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api"; import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc"; import { registerInstrumentations } from "@opentelemetry/instrumentation"; import { awsLambdaDetector } from "@opentelemetry/resource-detector-aws"; import { detectResourcesSync, envDetector, processDetector, } from "@opentelemetry/resources"; import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"; import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"; const initTracing = () => { diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); const defaultCollector = "https://o11y.ops.internal.dev:4317" const resource = detectResourcesSync({ detectors: [awsLambdaDetector, envDetector, processDetector], }); const provider = new NodeTracerProvider({ resource: resource, }); const exporter = new OTLPTraceExporter({ url: defaultCollector, }); provider.addSpanProcessor(new BatchSpanProcessor(exporter)); registerInstrumentations({ tracerProvider: provider, instrumentations: [ getNodeAutoInstrumentations({ "@opentelemetry/instrumentation-aws-lambda": { disableAwsContextPropagation: true, }, "@opentelemetry/instrumentation-fs": { enabled: false, // This is very noisy, and at least on lambda isn't very helpful }, }), ], }); provider.register(); }; initTracing();