Skip to main content
Want Logs and Metrics too? See Getting Started for more in-depth OpenTelemetry Collector setup instructions.
Use the OTLP/HTTP traces endpoint to forward spans into Traces Explorer. Authenticate with your Server Secret key in the header:
  • Endpoint: https://api.statsig.com/otlp/v1/traces
  • Header: statsig-api-key: <your Server SDK Secret key>
Note: Direct to API is currently supported for TypeScript/Node only. For all other languages, send traces to your OpenTelemetry Collector and configure it to forward to Statsig over OTLP/HTTP. Point non-TypeScript apps to your Collector (for example http://localhost:4318/v1/traces) and configure the Collector to forward to Statsig:
collector.yaml
receivers:
  otlp:
    protocols:
      http:

exporters:
  otlphttp:
    endpoint: https://api.statsig.com/otlp
    encoding:  json
    headers:
      statsig-api-key: ${env:STATSIG_SERVER_SDK_SECRET}

service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [otlphttp]
npm install @opentelemetry/sdk-node @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base @opentelemetry/exporter-trace-otlp-http @opentelemetry/resources @opentelemetry/semantic-conventions @opentelemetry/api
// trace.js
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const { trace } = require('@opentelemetry/api');

const sdk = new NodeSDK({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: 'trace-sample-node',
  }),
  spanProcessor: new BatchSpanProcessor(
    new OTLPTraceExporter({
      url: 'https://api.statsig.com/otlp/v1/traces',
      headers: { 'statsig-api-key': process.env.STATSIG_SERVER_SDK_SECRET || '' },
    }),
  ),
});

sdk.start().then(() => {
  const tracer = trace.getTracer('example');
  const span = tracer.startSpan('do-work');
  span.setAttribute('example', true);
  span.end();

  setTimeout(() => sdk.shutdown(), 1000);
});
Need a deeper setup guide? See Open Telemetry Logs and Metrics for collector installation/config, and if you want Logs and Metrics too? See Getting Started for more in-depth OpenTelemetry Collector setup instructions.