javascriptnode.jsopen-telemetrylightstep

How to use lightstep/otel-launcher-node as an OpenTelemetry exporter?


Before I was using lightstep/opentelemetry-exporter-js, I can use my own exporters and Lightstep exporter at same time.

import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { NodeTracerProvider } from '@opentelemetry/node';
import { BatchSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/tracing';
import { LightstepExporter } from 'lightstep-opentelemetry-exporter';

const initTracer = () => {
  const serviceName = 'server-trace-service';
  const tracerProvider = new NodeTracerProvider({
    plugins: {
      http: {
        enabled: true,
        path: '@opentelemetry/plugin-http',
      },
    },
  });

  tracerProvider.addSpanProcessor(new BatchSpanProcessor(new ConsoleSpanExporter()));
  tracerProvider.addSpanProcessor(
    new BatchSpanProcessor(
      new CollectorTraceExporter({
        serviceName,
      })
    )
  );
  tracerProvider.addSpanProcessor(
    new BatchSpanProcessor(
      new LightstepExporter({
        serviceName,
        token: 'myToken',
      })
    )
  );

  tracerProvider.register();
};

However, just saw lightstep/opentelemetry-exporter-js is deprecated and replaced by lightstep/otel-launcher-node.

I checked the source code of it and the demo, it looks like it is a "framework" on top of OpenTelemetry.

const {
  lightstep,
  opentelemetry,
} = require('lightstep-opentelemetry-launcher-node');

const sdk = lightstep.configureOpenTelemetry({
  accessToken: 'YOUR ACCESS TOKEN',
  serviceName: 'locl-ex',
});

sdk.start().then(() => {
  const tracer = opentelemetry.trace.getTracer('otel-node-example');
  const span = tracer.startSpan('test-span');
  span.end();

  opentelemetry.trace.getTracerProvider().getActiveSpanProcessor().shutdown();
});

Is it possible to simply use it as one of OpenTelemetry exporters?


Solution

  • lightstep-opentelemetry-launcher-node basically bundles the required things for you for easier configuration so this is not an exporter. If you were to simply replace the "LightstepExporter" with "OpenTelemetry Collector Exporter" in your code you can simply do this

      import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
    
      tracerProvider.addSpanProcessor(
        new BatchSpanProcessor(
          new CollectorTraceExporter({
            url: 'YOUR_DIGEST_URL',
            headers: {
              'Lightstep-Access-Token': 'YOUR_TOKEN'
            }
          })
        )
      );
    

    The default YOUR_DIGETS_URL from lightstep/otel-launcher-node is https://ingest.lightstep.com:443/api/v2/otel/trace