Skip to content

Commit cd0d880

Browse files
pichlermarcdyladan
andauthored
fix(sdk-node): lazy require @opentelemetry/exporter-jaeger (#3739)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent de354db commit cd0d880

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/
1313

1414
### :bug: (Bug Fix)
1515

16+
* fix(sdk-node): fix initialization in bundled environments by not loading @opentelemetry/exporter-jaeger [#3739](https://github.com/open-telemetry/opentelemetry-js/pull/3739) @pichlermarc
17+
1618
### :books: (Refine Doc)
1719

1820
### :house: (Internal)

experimental/packages/opentelemetry-sdk-node/src/TracerProviderWithEnvExporter.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/expo
3232
import { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
3333
import { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
3434
import { ZipkinExporter } from '@opentelemetry/exporter-zipkin';
35-
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
3635

3736
export class TracerProviderWithEnvExporters extends NodeTracerProvider {
3837
private _configuredExporters: SpanExporter[] = [];
@@ -68,13 +67,28 @@ export class TracerProviderWithEnvExporters extends NodeTracerProvider {
6867
);
6968
}
7069

70+
private static configureJaeger() {
71+
// The JaegerExporter does not support being required in bundled
72+
// environments. By delaying the require statement to here, we only crash when
73+
// the exporter is actually used in such an environment.
74+
try {
75+
// eslint-disable-next-line @typescript-eslint/no-var-requires
76+
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
77+
return new JaegerExporter();
78+
} catch (e) {
79+
throw new Error(
80+
`Could not instantiate JaegerExporter. This could be due to the JaegerExporter's lack of support for bundling. If possible, use @opentelemetry/exporter-trace-otlp-proto instead. Original Error: ${e}`
81+
);
82+
}
83+
}
84+
7185
protected static override _registeredExporters = new Map<
7286
string,
7387
() => SpanExporter
7488
>([
7589
['otlp', () => this.configureOtlp()],
7690
['zipkin', () => new ZipkinExporter()],
77-
['jaeger', () => new JaegerExporter()],
91+
['jaeger', () => this.configureJaeger()],
7892
['console', () => new ConsoleSpanExporter()],
7993
]);
8094

packages/opentelemetry-exporter-jaeger/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
- `@opentelemetry/exporter-trace-otlp-grpc`
1010
- `@opentelemetry/exporter-trace-otlp-http`
1111

12+
**NOTE: Bundling (with e.g. `webpack`, `rollup`, `esbuild`, ...) is not supported by this package. Please use `@opentelemetry/exporter-trace-otlp-proto` instead.**
13+
1214
OpenTelemetry Jaeger Trace Exporter allows the user to send collected traces to Jaeger.
1315

1416
[Jaeger](https://jaeger.readthedocs.io/en/latest/), inspired by [Dapper](https://research.google.com/pubs/pub36356.html) and [OpenZipkin](http://zipkin.io/), is a distributed tracing system released as open source by [Uber Technologies](http://uber.github.io/). It is used for monitoring and troubleshooting microservices-based distributed systems, including:

0 commit comments

Comments
 (0)