dd-trace-js
dd-trace-js copied to clipboard
PeriodicExportingMetricReader fails with Cannot read properties of undefined (reading '_ddSpan')
Expected behaviour
According to these docs https://docs.datadoghq.com/opentelemetry/otlp_ingest_in_the_agent/?tab=host we should be able to use open telemetry metrics in conjunction with the dd-trace-js library.
Actual behaviour
When configuring the opentelemetry metrics inconjunction with the dd-trace library an error occurs while trying to use the PeriodicExportingMetricReader.
TypeError: Cannot read properties of undefined (reading '_ddSpan')
at ContextManager.with (/npm-package-sources/nuorder-monitoring/node_modules/dd-trace/packages/dd-trace/src/opentelemetry/context_manager.js:56:34)
at ContextAPI.with (/npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/api/build/src/api/context.js:60:46)
at /npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/core/build/src/internal/exporter.js:28:27
at new Promise (<anonymous>)
at Object._export (/npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/core/build/src/internal/exporter.js:26:12)
at doExport (/npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.js:74:50)
at PeriodicExportingMetricReader._doRun (/npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.js:84:19)
at async PeriodicExportingMetricReader._runOnce (/npm-package-sources/nuorder-monitoring/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.js:55:13)
Steps to reproduce
// trace.js
// usage node --require ./trace.js app.js
const serviceName = "service-name";
const version = "0.0.1"
const resource = Resource.default().merge(
new Resource({
[SemanticResourceAttributes.SERVICE_VERSION]: version,
[SemanticResourceAttributes.SERVICE_NAME]: serviceName
}),
);
const metricsExporter = new OTLPMetricExporter({
url: `[agent end point]`,
concurrencyLimit: 1,
});
const metricReader = new PeriodicExportingMetricReader({
exportIntervalMillis: 1000,
exporter: metricsExporter,
});
const myServiceMeterProvider = new MeterProvider({
resource: resource,
});
myServiceMeterProvider.addMetricReader(metricReader);
metrics.setGlobalMeterProvider(myServiceMeterProvider);
// Now we install the dd-trace library.
const tracer = require('dd-trace').init({
service: serviceName,
version: version,
env: "testing",
profiling: true,
debug: true,
logLevel: "debug"
});
const tracerProvider = new tracer.TracerProvider()
tracerProvider.register()
Environment
- Operation system:
- Node.js version:
- Tracer version:
- Agent version:
- Relevant library versions: