I am trying to play with open telemetry in a Node application. I find it a bit confusing that some examples ask me to install the @opentelemetry/sdk-node (like this official guide), while some others ask me to install @opentelemetry/sdk-tracing-node (like this one, also offical guide).
The examples that require @opentelemetry/sdk-node have code like this:
const sdk = new opentelemetry.NodeSDK({
traceExporter: new opentelemetry.tracing.ConsoleSpanExporter(),
instrumentations: [
// instrumentations...
]
});
sdk.start()
The ones using @opentelemetry/sdk-tracing-node are like this:
registerInstrumentations({
instrumentations: [
// instrumentations...
]
});
const provider = new NodeTracerProvider();
const exporter = new ConsoleSpanExporter();
const processor = new BatchSpanProcessor(exporter);
provider.addSpanProcessor(processor);
provider.register();
They are somewhat similar, and I guess they achieve the same thing in the end. The questions are:
- what’s the difference between these two approaches?
- is one of them better, maybe more recommended nowadays?
Advertisement
Answer
sdk-node also brings the metrics and logs SDK while sdk-tracing-node only brings tracing SDK.
If you only care about tracing for now and want to avoid pulling useless dependencies, you can use sdk-tracing-node.