Skip to content

Remove pkg elastic / require-in-the-middle #3813

@polRk

Description

@polRk

What happened?

Steps to Reproduce

  1. Use @opentelemetry/instrumentation@0.35.1
  2. Bundle our app with esbuild
esbuild ./src/index.ts --platform=node --format=esm --bundle --sourcemap=inline --target=node18 --banner:js=import{createRequire}from\\'module\\'\\;const\\ require=createRequire\\(import.meta.url\\)\\; --outfile=./dist/server.mjs --metafile=./dist/meta.json
  1. Remove node_modules or move only bundle file to docker
  2. Try to start app

Expected Result

Works fine

Actual Result

Crash app on startup

Cannot find module 'is-core-module/package.json'

Additional Details

nodejs/require-in-the-middle#71
browserify/resolve#302
browserify/resolve#297

OpenTelemetry Setup Code

"use strict";

import { commonConfig } from "@app/config";

import * as api from "@opentelemetry/api";
import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { registerInstrumentations } from "@opentelemetry/instrumentation";
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
import { Resource } from "@opentelemetry/resources";
import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
import { BatchSpanProcessor, NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions";

import pkg from "../package.json" assert { type: "json" };

if (commonConfig.debug) {
  diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
}

const resource = new Resource({
  [SemanticResourceAttributes.SERVICE_NAMESPACE]: "",
  [SemanticResourceAttributes.SERVICE_NAME]: "",
  [SemanticResourceAttributes.SERVICE_VERSION]: pkg.version,
  [SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: process.env["NODE_ENV"],
});

registerInstrumentations({
  instrumentations: [new HttpInstrumentation({ enabled: true })],
});

const traceExporter = new OTLPTraceExporter({ url: commonConfig.otel.traces });
const traceProvider = new NodeTracerProvider({ resource });
traceProvider.addSpanProcessor(new BatchSpanProcessor(traceExporter));
traceProvider.register();

const meterExporter = new OTLPMetricExporter({ url: commonConfig.otel.metrics });
const meterProvider = new MeterProvider({ resource: resource });
meterProvider.addMetricReader(new PeriodicExportingMetricReader({ exporter: meterExporter }));

export const tracer = api.trace.getTracer(pkg.name);
export const meter = api.metrics.getMeter(pkg.name);

api.metrics.setGlobalMeterProvider(meterProvider);

export const metrics = {
  resolveFieldTotal: meter.createCounter("graphql.resolve.field.total"),
  resolveFieldErrors: meter.createCounter("graphql.resolve.field.errors"),
  resolveFieldDuration: meter.createHistogram("graphql.resolve.field.duration"),
};

["SIGINT", "SIGTERM"].forEach((signal) => {
  process.on(signal, () => traceProvider.shutdown().catch(console.error));
  process.on(signal, () => meterProvider.shutdown().catch(console.error));
});

package.json

"@opentelemetry/api": "^1.4.0",
    "@opentelemetry/exporter-metrics-otlp-http": "0.35.1",
    "@opentelemetry/exporter-trace-otlp-http": "0.35.1",
    "@opentelemetry/instrumentation": "0.35.1",
    "@opentelemetry/instrumentation-graphql": "0.33.0",
    "@opentelemetry/instrumentation-grpc": "0.35.1",
    "@opentelemetry/instrumentation-http": "0.35.1",
    "@opentelemetry/resources": "1.9.1",
    "@opentelemetry/sdk-metrics": "1.12.0",
    "@opentelemetry/sdk-trace-node": "1.9.1",
    "@opentelemetry/semantic-conventions": "1.9.1",

Relevant log output

Cannot find module 'is-core-module/package.json'

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions