Skip to main content

Exporters

Navios OTel supports multiple exporters for sending traces to different backends.

OTLP Exporter

The OTLP (OpenTelemetry Protocol) exporter is the recommended choice for production. It works with most observability platforms:

  • Jaeger
  • Grafana Tempo
  • Honeycomb
  • Datadog
  • New Relic
  • And many more...

Installation

yarn add @opentelemetry/exporter-trace-otlp-http

Configuration

app.usePlugin(defineOtelPlugin({
serviceName: 'my-api',
exporter: 'otlp',
exporterOptions: {
// OTLP HTTP endpoint
endpoint: 'http://localhost:4318/v1/traces',

// Optional: Authentication headers
headers: {
'Authorization': 'Bearer your-token',
},
},
// ... other options
}))

Common Endpoints

PlatformEndpoint
Jaegerhttp://localhost:4318/v1/traces
Grafana Tempohttp://localhost:4318/v1/traces
Honeycombhttps://api.honeycomb.io/v1/traces
Datadoghttps://trace.agent.datadoghq.com/v1/traces

Console Exporter

Useful for development and debugging. Prints spans to the console:

app.usePlugin(defineOtelPlugin({
serviceName: 'my-api',
exporter: 'console',
autoInstrument: {
http: true,
},
}))

Example output:

{
"traceId": "abc123...",
"spanId": "def456...",
"name": "HTTP GET /users/:id",
"duration": 15.2,
"attributes": {
"http.method": "GET",
"http.url": "/users/123",
"http.status_code": 200
}
}

None (Disabled)

Disables trace export while keeping tracing infrastructure active:

app.usePlugin(defineOtelPlugin({
serviceName: 'my-api',
exporter: 'none',
// Spans are created but not exported
}))

Useful for:

  • Testing
  • Local development without an observability backend
  • Gradual rollout

Environment-Based Configuration

Use environment variables for flexible deployment:

const exporter = process.env.OTEL_EXPORTER as 'otlp' | 'console' | 'none'
const endpoint = process.env.OTEL_ENDPOINT

app.usePlugin(defineOtelPlugin({
serviceName: process.env.SERVICE_NAME || 'my-api',
serviceVersion: process.env.SERVICE_VERSION,
environment: process.env.NODE_ENV,
exporter: exporter || 'console',
exporterOptions: endpoint ? { endpoint } : undefined,
autoInstrument: {
http: true,
handlers: true,
},
}))

Example .env file:

SERVICE_NAME=my-api
SERVICE_VERSION=1.0.0
OTEL_EXPORTER=otlp
OTEL_ENDPOINT=http://jaeger:4318/v1/traces