Skip to content

Cannot find module '@opentelemetry/semantic-conventions/incubating' from 'node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/instrumentation.js' #5557

@GuidoGagliardini

Description

@GuidoGagliardini

Hello Community

I have encountered this issue and would like to know if I should report it as a bug or if anyone has found a solution.

Node version: 16.14.0

First package.json version I have tried-->

"@opentelemetry/api": "^1.9.0",
"@opentelemetry/auto-instrumentations-node": "^0.55.1",
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.57.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.57.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.57.0",
"@opentelemetry/instrumentation-express": "^0.47.0",
"@opentelemetry/instrumentation-http": "^0.57.0",
"@opentelemetry/resources": "^1.30.0",
"@opentelemetry/sdk-metrics": "^1.30.0",
"@opentelemetry/sdk-node": "^0.57.0",
"@opentelemetry/sdk-trace-node": "^1.30.0",
"@opentelemetry/semantic-conventions": "^1.28.0"

I receive the following error when running the tests using npm run test:

FAIL  tests/controllers/healt.test.ts
 ● Test suite failed to run

  Cannot find module '@opentelemetry/semantic-conventions/incubating' from 'node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/instrumentation.js'

  Require stack:
    node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/instrumentation.js
    node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/index.js
    node_modules/@opentelemetry/auto-instrumentations-node/build/src/utils.js
    node_modules/@opentelemetry/auto-instrumentations-node/build/src/index.js
    src/configuration/opentelemetry.ts
    src/server/index.ts
    tests/controllers/healt.test.ts

I also tried changing the package versions to:

"@opentelemetry/api": "^1.9.0",
"@opentelemetry/auto-instrumentations-node": "^0.56.1",
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.57.2",
"@opentelemetry/exporter-metrics-otlp-http": "^0.57.2",
"@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
"@opentelemetry/instrumentation-aws-lambda": "^0.51.0",
"@opentelemetry/instrumentation-express": "^0.48.0",
"@opentelemetry/instrumentation-grpc": "^0.51.0",
"@opentelemetry/instrumentation-http": "^0.57.2",
"@opentelemetry/resources": "^1.30.1",
"@opentelemetry/sdk-metrics": "^1.30.1",
"@opentelemetry/sdk-node": "^0.57.2",
"@opentelemetry/sdk-trace-node": "^1.30.1",
"@opentelemetry/semantic-conventions": "^1.30.0",

But I received the following error:

FAIL  tests/index.test.ts
 ● Test suite failed to run

  ENOENT: no such file or directory, open 'events'

    at Runtime.readFile (node_modules/jest-runtime/build/index.js:1987:21)
    at Object.<anonymous> (node_modules/google-logging-utils/src/logging-utils.ts:15:1)

This is the component where I implement Opentelemetry:

import opentelemetry from '@opentelemetry/api';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
import { AggregationTemporality, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
import { MeterProvider } from '@opentelemetry/sdk-metrics';
import { Resource } from '@opentelemetry/resources';
import { environment } from '../configuration/environment'; // Adjust the path to your config file
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import fs from 'fs';

// Dynatrace Metadata
let dtmetadata = new Resource({});
for (const name of [
    'dt_metadata_e617c525669e072eebe3d0f08212e8f2.json',
    '/var/lib/dynatrace/enrichment/dt_metadata.json',
    '/var/lib/dynatrace/enrichment/dt_host_metadata.json',
]) {
    try {
        dtmetadata = dtmetadata.merge(
            new Resource(
                JSON.parse(
                    fs
                        .readFileSync(name.startsWith('/var') ? name : fs.readFileSync(name).toString('utf-8').trim())
                        .toString('utf-8'),
                ),
            ),
        );
        break;
    } catch {}
}

const resource = Resource.default()
    .merge(
        new Resource({
            [ATTR_SERVICE_NAME]: 'test-test-test-test',
            [ATTR_SERVICE_VERSION]: '1.0.0',
        }),
    )
    .merge(dtmetadata);

const traceExporter = new OTLPTraceExporter({
    url: environment.OTEL_EXPORTER_OTLP_ENDPOINT_TRACES,
    headers: {
        Authorization: 'Api-Token xxxxxxxxx',
    },
});

const processor = new BatchSpanProcessor(traceExporter);

const provider = new NodeTracerProvider({
    resource: resource,
    spanProcessors: [processor],
});
provider.register();

const metricExporter = new OTLPMetricExporter({
    url: environment.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
    headers: {
        Authorization: 'Api-Token xxxxxxxxxxxxx',
    },
    temporalityPreference: AggregationTemporality.DELTA,
});

const metricReader = new PeriodicExportingMetricReader({
    exporter: metricExporter,
    exportIntervalMillis: 60000,
});

const meterProvider = new MeterProvider({
    resource: resource,
    readers: [metricReader],
});

opentelemetry.metrics.setGlobalMeterProvider(meterProvider);
const instrumentations = getNodeAutoInstrumentations();
instrumentations.forEach((instrumentation) => {
    instrumentation.enable();
});

Expected Behavior:

The tests should run successfully.

Question or discussion:

  • Has anyone encountered this issue before?
  • Is my implementation incorrect?
  • Or is this a bug that should be reported?

Thanks in advance!

  • This only affects the JavaScript OpenTelemetry library
  • This may affect other libraries, but I would like to get opinions here first

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions