Reputation: 5949
Using this as my starting point: https://opentelemetry.io/docs/languages/js/instrumentation/
I'm trying to pre-load opentelemetry instrumentation into my Express app using --require
.
I added this to package.json:
"local": "nodemon --require src/instrumentation.ts src/server.ts",
"start": "node --require dist/instrumentation.js dist/server.js",
and then I created src/instrumentation.ts
:
import { NodeSDK } from '@opentelemetry/sdk-node';
import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import {
PeriodicExportingMetricReader,
ConsoleMetricExporter,
} from '@opentelemetry/sdk-metrics';
const instrumentation = new NodeSDK({
traceExporter: new ConsoleSpanExporter(),
metricReader: new PeriodicExportingMetricReader({
exporter: new ConsoleMetricExporter()
}),
instrumentations: [
getNodeAutoInstrumentations({
'@opentelemetry/instrumentation-fs': { enabled: false }
})
]
});
instrumentation.start();
but when I try to run npm run local
, I get:
[nodemon] starting `ts-node --require src/instrumentation.ts src/server.ts`
Error: Cannot find module 'src/instrumentation.ts'
Require stack:
- internal/preload
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1140:15)
at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30)
at Function.Module._load (node:internal/modules/cjs/loader:981:27)
at internalRequire (node:internal/modules/cjs/loader:174:19)
at Function.Module._preloadModules (node:internal/modules/cjs/loader:1569:5)
at register (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/ts-node/src/index.ts:610:46)
at phase4 (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/ts-node/src/bin.ts:554:11)
at bootstrap (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/ts-node/src/bin.ts:95:10)
at main (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/ts-node/src/bin.ts:55:10)
at Object.<anonymous> (/Users/jundai/gddy/templating/tmp/jundai-0328-tsapi-01/node_modules/ts-node/src/bin.ts:800:3) {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'internal/preload' ]
}
and then if I run npm run start
in docker after a build, I see:
> node --require dist/instrumentation.js dist/server.js
node:internal/modules/cjs/loader:1146
throw err;
^
Error: Cannot find module 'dist/instrumentation.js'
Require stack:
- internal/preload
at Module._resolveFilename (node:internal/modules/cjs/loader:1143:15)
at Module._load (node:internal/modules/cjs/loader:984:27)
at internalRequire (node:internal/modules/cjs/loader:174:19)
at Module._preloadModules (node:internal/modules/cjs/loader:1574:5)
at loadPreloadModules (node:internal/process/pre_execution:723:5)
at setupUserModules (node:internal/process/pre_execution:203:5)
at prepareExecution (node:internal/process/pre_execution:159:5)
at prepareMainThreadExecution (node:internal/process/pre_execution:54:10)
at node:internal/main/run_main_module:11:19 {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'internal/preload' ]
}
Node.js v20.12.0
Where am I going wrong? Is this an issue with finding the files? or with typescript vs. js? or with modules (import/require)?
Upvotes: 0
Views: 920
Reputation: 5949
Ok, it turns out the problem was as simple as: I needed a ./
before ./src/instrumentation.ts
.
Without that, it's probably trying to load a library or something?
Upvotes: 1