OpenTelemetry Collector Exporter for web and node
This module provides exporter for web and node to be used with opentelemetry-collector - last tested with version 0.25.0.
Installation
npm install --save @opentelemetry/exporter-otlp-http
Service Name
The OpenTelemetry Collector Exporter does not have a service name configuration.
In order to set the service name, use the service.name
resource attribute as prescribed in the OpenTelemetry Resource Semantic Conventions.
Traces in Web
The OTLPTraceExporter in Web expects the endpoint to end in /v1/traces
.
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
import { OTLPTraceExporter } from '@opentelemetry/exporter-otlp-http';
const collectorOptions = {
url: '<opentelemetry-collector-url>',
headers: {},
concurrencyLimit: 10,
};
const provider = new WebTracerProvider();
const exporter = new OTLPTraceExporter(collectorOptions);
provider.addSpanProcessor(new BatchSpanProcessor(exporter, {
maxQueueSize: 100,
maxExportBatchSize: 10,
scheduledDelayMillis: 500,
exportTimeoutMillis: 30000,
}));
provider.register();
Metrics in Web
The OTLPMetricExporter in Web expects the endpoint to end in /v1/metrics
.
import { MeterProvider } from '@opentelemetry/sdk-metrics-base';
import { OTLPMetricExporter } from '@opentelemetry/exporter-otlp-http';
const collectorOptions = {
url: '<opentelemetry-collector-url>',
headers: {},
concurrencyLimit: 1,
};
const exporter = new OTLPMetricExporter(collectorOptions);
const meter = new MeterProvider({
exporter,
interval: 60000,
}).getMeter('example-meter');
const counter = meter.createCounter('metric_name');
counter.add(10, { 'key': 'value' });
Traces in Node - JSON over http
const { BasicTracerProvider, BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-otlp-http');
const collectorOptions = {
url: '<opentelemetry-collector-url>',
headers: {
foo: 'bar'
},
concurrencyLimit: 10,
};
const provider = new BasicTracerProvider();
const exporter = new OTLPTraceExporter(collectorOptions);
provider.addSpanProcessor(new BatchSpanProcessor(exporter, {
maxQueueSize: 1000,
scheduledDelayMillis: 30000,
}));
provider.register();
Metrics in Node
const { MeterProvider } = require('@opentelemetry/sdk-metrics-base');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-otlp-http');
const collectorOptions = {
url: '<opentelemetry-collector-url>',
concurrencyLimit: 1,
};
const exporter = new OTLPMetricExporter(collectorOptions);
const meter = new MeterProvider({
exporter,
interval: 60000,
}).getMeter('example-meter');
const counter = meter.createCounter('metric_name');
counter.add(10, { 'key': 'value' });
GRPC
For GRPC please check npm-url-grpc
PROTOBUF
For PROTOBUF please check npm-url-proto
Configuration options as environment variables
Instead of providing options to OTLPMetricExporter
and OTLPTraceExporter
explicitly, environment variables may be provided instead.
OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317
If the trace and metric exporter endpoints have different providers, the env var for per-signal endpoints are available to use
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://trace-service:4317/v1/traces
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=https://metric-service:4317/v1/metrics
The per-signal endpoints take precedence and overrides OTEL_EXPORTER_OTLP_ENDPOINT
For more details, see OpenTelemetry Specification on Protocol Exporter.
Running opentelemetry-collector locally to see the traces
- Go to examples/otlp-exporter-node
- run
npm run docker:start
- Open page at
http://localhost:9411/zipkin/
to observe the traces
Useful links
License
Apache 2.0 - See LICENSE for more information.