Multi-Backend Integration
Why I Send Telemetry to 5 Different Backends
Sending to Multiple Backends
Configuration Pattern
import { NodeSDK } from '@opentelemetry/sdk-node';
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
// Multiple trace exporters
const jaegerExporter = new OTLPTraceExporter({
url: 'http://jaeger:4318/v1/traces',
});
const datadogExporter = new OTLPTraceExporter({
url: 'https://trace.agent.datadoghq.com/v1/traces',
headers: {
'DD-API-KEY': process.env.DD_API_KEY!,
},
});
const newRelicExporter = new OTLPTraceExporter({
url: 'https://otlp.nr-data.net/v1/traces',
headers: {
'api-key': process.env.NEW_RELIC_LICENSE_KEY!,
},
});
// Multiple metric exporters
const prometheusExporter = new PrometheusExporter({
port: 9464,
endpoint: '/metrics',
});
const cloudwatchExporter = new OTLPMetricExporter({
url: 'http://aws-otel-collector:4318/v1/metrics',
});
const sdk = new NodeSDK({
// Send traces to multiple backends
spanProcessors: [
new BatchSpanProcessor(jaegerExporter),
new BatchSpanProcessor(datadogExporter),
new BatchSpanProcessor(newRelicExporter),
],
// Metrics to Prometheus + CloudWatch
metricReader: new PeriodicExportingMetricReader({
exporter: cloudwatchExporter,
exportIntervalMillis: 60000,
}),
});
sdk.start();Cloud Provider Integrations
AWS CloudWatch via ADOT Collector
Google Cloud Operations
Azure Monitor (Application Insights)
Commercial Platforms
Datadog
New Relic
Honeycomb
Lightstep
Smart Routing with Collector
Cost Management
Sampling by Backend
Monthly Cost Comparison
Backend
Sampling
Data/Month
Cost/Month
Migration Strategies
Gradual Migration
Feature Comparison
Feature
Jaeger
Datadog
New Relic
Honeycomb
Best Practices
Real Production Setup
What's Next
Last updated