Skip to content

Loading Mongoose v7 with ESM does not work with OpenTelemetry Instrumentation: TypeError: Cannot read properties of undefined (reading 'prototype') #2792

@JCMais

Description

@JCMais

What version of OpenTelemetry are you using?

@opentelemetry/api 1.9.0
@opentelemetry/auto-instrumentations-node 0.56.0
@opentelemetry/core 1.30.1
@opentelemetry/exporter-metrics-otlp-grpc 0.57.2
@opentelemetry/exporter-metrics-otlp-http 0.57.2
@opentelemetry/exporter-trace-otlp-grpc 0.57.2
@opentelemetry/exporter-trace-otlp-http 0.57.2
@opentelemetry/host-metrics 0.35.5
@opentelemetry/instrumentation 0.57.2
@opentelemetry/resource-detector-gcp 0.33.0
@opentelemetry/resources 1.30.1
@opentelemetry/sdk-metrics 1.30.1
@opentelemetry/sdk-node 0.57.2
@opentelemetry/sdk-trace-base 1.30.1
@opentelemetry/sdk-trace-node 1.30.1
@opentelemetry/semantic-conventions 1.30.0

What version of Node are you using?

Node v20.18

What did you do?

Tried to set up OpenTelemetry with ESM, while using auto-instrumentation and Mongoose v7.

What did you expect to see?

It worked, not errors

What did you see instead?

root@localhost:/usr/src/app# node --no-warnings  --experimental-loader=@opentelemetry/instrumentation/hook.mjs --import ./apps/api/dist/tracing.js ./apps/api/dist/index.js 
/usr/src/app/node_modules/.pnpm/@opentelemetry+instrumentation-mongoose@0.46.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-mongoose/build/src/mongoose.js:95
        this._wrap(moduleExports.Aggregate.prototype, 'exec', this.patchAggregateExec(moduleVersion));
                                           ^

TypeError: Cannot read properties of undefined (reading 'prototype')
    at MongooseInstrumentation.patch (/usr/src/app/node_modules/.pnpm/@opentelemetry+instrumentation-mongoose@0.46.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-mongoose/build/src/mongoose.js:95:44)
    at MongooseInstrumentation._onRequire (/usr/src/app/node_modules/.pnpm/@opentelemetry+instrumentation@0.57.2_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.js:164:39)
    at hookFn (/usr/src/app/node_modules/.pnpm/@opentelemetry+instrumentation@0.57.2_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.js:227:29)
    at callHookFn (/usr/src/app/node_modules/.pnpm/import-in-the-middle@1.12.0/node_modules/import-in-the-middle/index.js:29:22)
    at Hook._iitmHook (/usr/src/app/node_modules/.pnpm/import-in-the-middle@1.12.0/node_modules/import-in-the-middle/index.js:150:11)
    at /usr/src/app/node_modules/.pnpm/import-in-the-middle@1.12.0/node_modules/import-in-the-middle/lib/register.js:42:31
    at Array.forEach (<anonymous>)
    at register (/usr/src/app/node_modules/.pnpm/import-in-the-middle@1.12.0/node_modules/import-in-the-middle/lib/register.js:42:15)
    at file:///usr/src/app/node_modules/.pnpm/mongoose@7.6.3_patch_hash=5449370a6dee2c7ac58c04e310a8430620fcac96ad1d4f006889922638cfa_13e07d6321159eadef9120d66a5cb86e/node_modules/mongoose/index.js?iitm=true:428:1
    at ModuleJob.run (node:internal/modules/esm/module_job:234:25)

Node.js v20.18.1

Additional context

tracing.js

import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node' 
import { NodeSDK } from '@opentelemetry/sdk-node'

const sdk = new NodeSDK({
  instrumentations: [getNodeAutoInstrumentations()]
})

sdk.start()

index.js

import 'mongoose'

This is related to #2568, which has been closed by the author.

Looks like some other packages also had similar errors, and I can also reproduce this issue with the dataloader package.

E.g for pg: #1693, which was fixed here: #1701

and here ioredis: #1692, fixed here: #1694

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpkg:instrumentation-mongoosepriority:p1Bugs which cause problems in end-user applications such as crashes, data inconsistencies

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions