CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-opentelemetry--sdk-trace-node

OpenTelemetry Node SDK provides automatic telemetry (tracing, metrics, etc) for Node.js applications

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

OpenTelemetry Node SDK

OpenTelemetry Node SDK provides Node.js-specific tracing functionality that extends the base OpenTelemetry SDK with automatic AsyncLocalStorage-based context management. It enables seamless trace propagation across asynchronous operations in Node.js applications without manual context passing.

Package Information

  • Package Name: @opentelemetry/sdk-trace-node
  • Package Type: npm
  • Language: TypeScript
  • Node.js Version: ^18.19.0 || >=20.6.0
  • Installation: npm install @opentelemetry/api @opentelemetry/sdk-trace-node

Core Imports

Node.js-specific exports:

import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import type { NodeTracerConfig } from "@opentelemetry/sdk-trace-node";

CommonJS:

const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");

Available re-exports from @opentelemetry/sdk-trace-base:

// Classes and functions
import { 
  AlwaysOffSampler, AlwaysOnSampler, BasicTracerProvider,
  BatchSpanProcessor, ConsoleSpanExporter, InMemorySpanExporter,
  NoopSpanProcessor, ParentBasedSampler, RandomIdGenerator,
  SamplingDecision, SimpleSpanProcessor, TraceIdRatioBasedSampler
} from "@opentelemetry/sdk-trace-node";

// Types
import type { 
  BatchSpanProcessorBrowserConfig, BufferConfig, GeneralLimits,
  IdGenerator, ReadableSpan, Sampler, SamplingResult,
  SDKRegistrationConfig, Span, SpanExporter, SpanLimits,
  SpanProcessor, TimedEvent, TracerConfig
} from "@opentelemetry/sdk-trace-node";

Basic Usage

import { NodeTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';

// Create NodeTracerProvider with automatic AsyncLocalStorage context management
const provider = new NodeTracerProvider();

// Add span processor
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));

// Register automatically sets up:
// - AsyncLocalStorageContextManager for async context propagation
// - W3C Trace Context and Baggage propagators
provider.register();

// Traces will now automatically propagate across async operations
// without manual context passing

Architecture

The Node SDK extends the base OpenTelemetry SDK with Node.js-specific functionality:

  • NodeTracerProvider: Extends BasicTracerProvider with automatic Node.js context management setup
  • Automatic Context Management: Sets up AsyncLocalStorageContextManager by default for async operation trace propagation
  • Automatic Propagation: Configures W3C Trace Context and Baggage propagators by default
  • Base SDK Re-exports: Provides access to all base tracing functionality (samplers, processors, exporters, etc.)

Capabilities

NodeTracerProvider

Node.js-specific tracer provider that extends BasicTracerProvider with automatic AsyncLocalStorage context management and propagator setup.

/**
 * NodeTracerProvider extends BasicTracerProvider with Node.js-specific functionality.
 * Automatically configures AsyncLocalStorage for context management and W3C propagators.
 */
class NodeTracerProvider extends BasicTracerProvider {
  /**
   * Creates a new NodeTracerProvider instance
   * @param config - Optional configuration (same as TracerConfig from base SDK)
   */
  constructor(config?: NodeTracerConfig);

  /**
   * Register this TracerProvider for use with the OpenTelemetry API.
   * Automatically sets up:
   * - Global tracer provider
   * - AsyncLocalStorageContextManager (unless null is provided)
   * - W3C Trace Context and Baggage propagators (unless null is provided)
   * @param config - Configuration object for SDK registration
   */
  register(config?: SDKRegistrationConfig): void;
}

Configuration

Configuration interfaces for NodeTracerProvider.

/**
 * Configuration for NodeTracerProvider - identical to TracerConfig from base SDK
 */
type NodeTracerConfig = TracerConfig;

/**
 * Configuration for SDK registration controlling context manager and propagator setup
 */
interface SDKRegistrationConfig {
  /** 
   * Context manager for trace context across async operations
   * - undefined: Uses AsyncLocalStorageContextManager (default)
   * - null: No context manager setup
   * - ContextManager: Custom context manager
   */
  contextManager?: ContextManager | null;
  /** 
   * Propagator for trace context in requests
   * - undefined: Uses W3C Trace Context + Baggage propagators (default) 
   * - null: No propagator setup
   * - TextMapPropagator: Custom propagator
   */
  propagator?: TextMapPropagator | null;
}

Re-exported Base SDK Components

This package re-exports all functionality from @opentelemetry/sdk-trace-base, including:

  • Samplers: AlwaysOffSampler, AlwaysOnSampler, ParentBasedSampler, TraceIdRatioBasedSampler
  • Processors: BatchSpanProcessor, SimpleSpanProcessor, NoopSpanProcessor
  • Exporters: ConsoleSpanExporter, InMemorySpanExporter
  • Base Provider: BasicTracerProvider
  • Utilities: RandomIdGenerator, SamplingDecision
  • Types: All interfaces and types from the base SDK

For detailed documentation of these components, refer to the @opentelemetry/sdk-trace-base package documentation.

Usage Examples

Basic Setup with Automatic Context Management

import { NodeTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';

// Create provider - AsyncLocalStorage context management is automatic
const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));

// Register sets up everything needed for Node.js tracing
provider.register();

// Traces now automatically propagate across async operations

Custom Context Manager Configuration

import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';

const provider = new NodeTracerProvider();

// Use custom context manager
const customContextManager = new AsyncLocalStorageContextManager();
provider.register({ 
  contextManager: customContextManager,
  // propagator: undefined uses default W3C propagators
});

Disable Automatic Setup

import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';

const provider = new NodeTracerProvider();

// Register without automatic context manager or propagator setup
provider.register({ 
  contextManager: null,  // No context manager
  propagator: null       // No propagators
});

// Manual setup would be required in this case

Node.js Async Context Propagation Example

import { trace, SpanStatusCode } from '@opentelemetry/api';
import { NodeTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';

// Setup
const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register(); // Automatic AsyncLocalStorage setup

const tracer = trace.getTracer('my-service');

// Parent span
tracer.startActiveSpan('parent-operation', async (parentSpan) => {
  
  // Child spans automatically inherit context across async operations
  await new Promise(resolve => {
    setTimeout(() => {
      tracer.startActiveSpan('child-operation', (childSpan) => {
        // This span is automatically linked to parent
        childSpan.setStatus({ code: SpanStatusCode.OK });
        childSpan.end();
        resolve(undefined);
      });
    }, 100);
  });
  
  parentSpan.setStatus({ code: SpanStatusCode.OK });
  parentSpan.end();
});

Install with Tessl CLI

npx tessl i tessl/npm-opentelemetry--sdk-trace-node
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@opentelemetry/sdk-trace-node@2.1.x
Publish Source
CLI
Badge
tessl/npm-opentelemetry--sdk-trace-node badge