dd-trace-js icon indicating copy to clipboard operation
dd-trace-js copied to clipboard

PeriodicExportingMetricReader fails with Cannot read properties of undefined (reading '_ddSpan')

Open ls-aron-kyle opened this issue 2 years ago • 0 comments

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:

ls-aron-kyle avatar Nov 10 '23 18:11 ls-aron-kyle