# OpenTelemetry for Node.js

The Baselime Node.js OpenTelemetry SDK enables you to instrument your Node.js services with OpenTelemetry without the boilerplate of using the OpenTelemetry SDK directly.

This SDK uses OpenTelemetry for JavaScript and provides a layer that facilitates instrumenting your Node.js applications.


# Instrumentation

# Step 1: Install the SDKs

Install the Baselime Node.js OpenTelemetry SDK.

terminal
npm i --save \
  @baselime/node-opentelemetry \
  @opentelemetry/auto-instrumentations-node

# Step 2: Initialise the tracer

Create a tracing.cjs file inside your application working directory.

src/tracing.cjs
const { BaselimeSDK } = require('@baselime/node-opentelemetry');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');


const sdk = new BaselimeSDK({
  instrumentations: [
    getNodeAutoInstrumentations(),
  ],
});

sdk.start();

# Step 3: Set the Baselime environment variables

Set the environment variables of your comntainer service to include the Baselime API Key and set the NODE_OPTIONS enviroment variable to preload the OpenTelemetry SDK into your application.

Key Value Description
BASELIME_KEY your-api-key Get this key from the Baselime console or the Baselime CLI running baselime iam
NODE_OPTIONS -r ./src/tracing.cjs --experimental-loader=import-in-the-middle/hook.mjs Preloads the OpenTelemetry SDK at startup

Once these steps are completed, distributed traces from your Node.js container applications should be available in Baselime to query via the console or the Baselime CLI.

Example OpenTelemetry Trace
Example OpenTelemetry Trace


# Configuration

The BaselimeSDK class of the Baselime Node.js OpenTelemetry SDK takes the following configuration options.

Field Type Description
instrumentations InstrumentationOption[] An array of instrumentation options.
baselimeKey string (optional) The Baselime API key.
collectorUrl string (optional) The URL of the collector.
service string (optional) The service name.
namespace string (optional) The namespace.