or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

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

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

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@opentelemetry/sdk-trace-node@2.1.x

To install, run

npx @tessl/cli install tessl/npm-opentelemetry--sdk-trace-node@2.1.0

index.mddocs/

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();
});