diff --git a/autoinstrumentation/nodejs/Dockerfile b/autoinstrumentation/nodejs/Dockerfile index 48f1f9ae75..c37549e40c 100644 --- a/autoinstrumentation/nodejs/Dockerfile +++ b/autoinstrumentation/nodejs/Dockerfile @@ -21,3 +21,7 @@ FROM busybox COPY --from=build /operator-build/build/workspace /autoinstrumentation RUN chmod -R go+r /autoinstrumentation + +# Backward compatibility with old operator version +RUN cp -r /autoinstrumentation/node_modules/@opentelemetry/auto-instrumentations-node/build/src/. /autoinstrumentation +RUN ln /autoinstrumentation/register.js /autoinstrumentation/autoinstrumentation.js diff --git a/autoinstrumentation/nodejs/package.json b/autoinstrumentation/nodejs/package.json index 11fc4006ce..14734573d8 100644 --- a/autoinstrumentation/nodejs/package.json +++ b/autoinstrumentation/nodejs/package.json @@ -4,9 +4,7 @@ "private": true, "scripts": { "clean": "rimraf build/*", - "prepare": "npm run compile", - "compile": "tsc -p .", - "postcompile": "copyfiles -f 'build/src/**' build/workspace/ && copyfiles 'node_modules/**' package.json build/workspace/ && npm -C build/workspace prune --omit=dev --no-package-lock" + "postinstall": "copyfiles -f 'build/src/**' build/workspace/ && copyfiles 'node_modules/**' package.json build/workspace/ && npm -C build/workspace prune --omit=dev --no-package-lock" }, "devDependencies": { "copyfiles": "^2.4.1", @@ -14,8 +12,7 @@ "typescript": "^5.6.3" }, "dependencies": { - "@opentelemetry/exporter-metrics-otlp-grpc": "0.55.0", - "@opentelemetry/auto-instrumentations-node": "0.53.0", - "@opentelemetry/exporter-prometheus": "0.55.0" + "@opentelemetry/api": "1.9.0", + "@opentelemetry/auto-instrumentations-node": "0.56.0" } } diff --git a/autoinstrumentation/nodejs/src/autoinstrumentation.ts b/autoinstrumentation/nodejs/src/autoinstrumentation.ts deleted file mode 100644 index 2a4aabc4a7..0000000000 --- a/autoinstrumentation/nodejs/src/autoinstrumentation.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; -import { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; -import { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; -import { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; -import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc'; -import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; -import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; -import { alibabaCloudEcsDetector } from '@opentelemetry/resource-detector-alibaba-cloud'; -import { awsEc2Detector, awsEksDetector } from '@opentelemetry/resource-detector-aws'; -import { containerDetector } from '@opentelemetry/resource-detector-container'; -import { gcpDetector } from '@opentelemetry/resource-detector-gcp'; -import { envDetector, hostDetector, osDetector, processDetector } from '@opentelemetry/resources'; -import { diag } from '@opentelemetry/api'; - -import { NodeSDK } from '@opentelemetry/sdk-node'; - -function getTraceExporter() { - let protocol = process.env.OTEL_EXPORTER_OTLP_PROTOCOL; - switch (protocol) { - case undefined: - case '': - case 'grpc': - return new OTLPGrpcTraceExporter(); - case 'http/json': - return new OTLPHttpTraceExporter(); - case 'http/protobuf': - return new OTLPProtoTraceExporter(); - default: - throw Error(`Creating traces exporter based on "${protocol}" protocol (configured via environment variable OTEL_EXPORTER_OTLP_PROTOCOL) is not implemented!`); - } -} - -function getMetricReader() { - switch (process.env.OTEL_METRICS_EXPORTER) { - case undefined: - case '': - case 'otlp': - diag.info('using otel metrics exporter'); - return new PeriodicExportingMetricReader({ - exporter: new OTLPMetricExporter(), - }); - case 'prometheus': - diag.info('using prometheus metrics exporter'); - return new PrometheusExporter({}); - case 'none': - diag.info('disabling metrics reader'); - return undefined; - default: - throw Error(`no valid option for OTEL_METRICS_EXPORTER: ${process.env.OTEL_METRICS_EXPORTER}`) - } -} - -const sdk = new NodeSDK({ - autoDetectResources: true, - instrumentations: [getNodeAutoInstrumentations()], - traceExporter: getTraceExporter(), - metricReader: getMetricReader(), - resourceDetectors: - [ - // Standard resource detectors. - containerDetector, - envDetector, - hostDetector, - osDetector, - processDetector, - - // Cloud resource detectors. - alibabaCloudEcsDetector, - // Ordered AWS Resource Detectors as per: - // https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md#ordering - awsEksDetector, - awsEc2Detector, - gcpDetector, - ], -}); - -sdk.start();