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.