Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[exporter, instrumentation] module import issue #4588

Closed
Mahmaddz opened this issue Mar 27, 2024 · 1 comment
Closed

[exporter, instrumentation] module import issue #4588

Mahmaddz opened this issue Mar 27, 2024 · 1 comment
Labels
bug Something isn't working triage

Comments

@Mahmaddz
Copy link

Mahmaddz commented Mar 27, 2024

What happened?

Steps to Reproduce

clone and run this official example:
https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/esm-http-ts

or Manually setup this

Expected Result

Log traces

Actual Result

throw error

C:\rec\esm-http-ts>npm start
node --experimental-loader=@opentelemetry/instrumentation/hook.mjs ./build/index.js

(node:7368) ExperimentalWarning: '--experimental-loader' may be removed in the future; instead use 'register()':
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("%40opentelemetry/instrumentation/hook.mjs", pathToFileURL("./"));'
(Use node --trace-warnings ... to show where the warning was created)
file:///C:/rec/esm-http-ts/build/index.js:5
import { ConsoleSpanExporter, SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base';
^^^^^^^^^^^^^^^^^^^
SyntaxError: The requested module '@opentelemetry/sdk-trace-base' does not provide an export named 'ConsoleSpanExporter'
at ModuleJob._instantiate (node:internal/modules/esm/module_job:132:21)
at async ModuleJob.run (node:internal/modules/esm/module_job:214:5)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:113:12)

Node.js v20.11.1

`

also for HttpInstrumentation:
`

C:\rec\esm-http-ts>npm start

esm-http-ts@0.49.1 start
node --experimental-loader=@opentelemetry/instrumentation/hook.mjs ./build/index.js

(node:18688) ExperimentalWarning: --experimental-loader may be removed in the future; instead use register():
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("%40opentelemetry/instrumentation/hook.mjs", pathToFileURL("./"));'
(Use node --trace-warnings ... to show where the warning was created)
file:///C:/rec/esm-http-ts/build/index.js:3
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
^^^^^^^^^^^^^^^^^^^
SyntaxError: The requested module '@opentelemetry/instrumentation-http' does not provide an export named 'HttpInstrumentation'
at ModuleJob._instantiate (node:internal/modules/esm/module_job:132:21)
at async ModuleJob.run (node:internal/modules/esm/module_job:214:5)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:113:12)

Node.js v20.11.1

`

Additional Details

OpenTelemetry Setup Code

import { registerInstrumentations } from '@opentelemetry/instrumentation';
import { trace, DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { ConsoleSpanExporter, SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import http from 'http';
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
const tracerProvider = new NodeTracerProvider({
    resource: new Resource({
        [SemanticResourceAttributes.SERVICE_NAME]: 'esm-http-ts-example',
    }),
});
const exporter = new ConsoleSpanExporter();
const processor = new SimpleSpanProcessor(exporter);
tracerProvider.addSpanProcessor(processor);
tracerProvider.register();
registerInstrumentations({
    instrumentations: [new HttpInstrumentation()],
});

package.json

{
  "name": "esm-http-ts",
  "private": true,
  "version": "0.49.1",
  "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript",
  "main": "build/index.js",
  "type": "module",
  "scripts": {
    "build": "tsc --build",
    "start": "node --experimental-loader=@opentelemetry/instrumentation/hook.mjs ./build/index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git"
  },
  "keywords": [
    "opentelemetry",
    "http",
    "tracing",
    "esm",
    "typescript"
  ],
  "engines": {
    "node": ">=14"
  },
  "author": "OpenTelemetry Authors",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/open-telemetry/opentelemetry-js/issues"
  },
  "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/",
  "dependencies": {
    "@opentelemetry/api": "1.8.0",
    "@opentelemetry/exporter-trace-otlp-proto": "0.49.1",
    "@opentelemetry/instrumentation": "0.49.1",
    "@opentelemetry/instrumentation-http": "^0.49.1",
    "@opentelemetry/resources": "1.22.0",
    "@opentelemetry/sdk-trace-base": "1.22.0",
    "@opentelemetry/sdk-trace-node": "1.22.0",
    "@opentelemetry/semantic-conventions": "1.22.0",
    "tsc": "^2.0.4",
    "typescript": "^5.4.3"
  }
}

Relevant log output

> esm-http-ts@0.49.1 start
> node --experimental-loader=@opentelemetry/instrumentation/hook.mjs ./build/index.js

(node:8372) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("%40opentelemetry/instrumentation/hook.mjs", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
file:///C:/rec/esm-http-ts/build/index.js:3
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
         ^^^^^^^^^^^^^^^^^^^
SyntaxError: The requested module '@opentelemetry/instrumentation-http' does not provide an export named 'HttpInstrumentation'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:132:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:214:5)
    at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
    at async loadESM (node:internal/process/esm_loader:28:7)
    at async handleMainPromise (node:internal/modules/run_main:113:12)

Node.js v20.11.1
@Mahmaddz Mahmaddz added bug Something isn't working triage labels Mar 27, 2024
@pichlermarc
Copy link
Member

@Mahmaddz thanks for reaching out and the detailed report. We currently do not support this version of Node.js with our experimental ESM instrumentation. We also have reported problems with Node.js v18.19+, see #4553

We're planning to update and add support for these versions once #4553 is completed. Closing this as a duplicate for now.

@pichlermarc pichlermarc closed this as not planned Won't fix, can't repro, duplicate, stale Mar 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working triage
Projects
None yet
Development

No branches or pull requests

2 participants