Docs menu

TypeScript and Node.js

The OpenTelemetry Node SDK

npm install @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-proto @opentelemetry/api
import { NodeSDK } from '@opentelemetry/sdk-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { trace } from '@opentelemetry/api';

const sdk = new NodeSDK({
  serviceName: 'support-agent',
  traceExporter: new OTLPTraceExporter({
    url: 'https://api.trazadb.com/v1/traces',
    headers: { Authorization: `Bearer ${process.env.TRAZA_API_KEY}` },
  }),
});
sdk.start();

const tracer = trace.getTracer('support-agent');
await tracer.startActiveSpan('search_orders.tool', async (span) => {
  span.setAttribute('session.id', 'sess-42');
  span.setAttribute('gen_ai.operation.name', 'execute_tool');
  span.setAttribute('gen_ai.tool.name', 'search_orders');
  // ... call the tool
  span.end();
});

process.on('beforeExit', () => sdk.shutdown());

Set session.id on every span of a run, including model calls made by instrumented libraries; a span processor that copies it from context onto each span is the usual way.

OpenLLMetry for JavaScript

@traceloop/node-server-sdk instruments the OpenAI and Anthropic SDKs, LangChain.js and others. It reads the same two variables as the Python SDK:

npm install @traceloop/node-server-sdk
export TRACELOOP_BASE_URL=https://api.trazadb.com
export TRACELOOP_HEADERS="Authorization=Bearer%20$TRAZA_API_KEY"
import * as traceloop from '@traceloop/node-server-sdk';

traceloop.initialize({ appName: 'support-agent' });

Initialize it before importing the libraries it instruments.