This guide covers Node.js applications running on ECS, EC2, Kubernetes, or any container/VM environment. For AWS Lambda, see the Node.js Lambda guide.

1. Install the OpenTelemetry SDK

npm install --save @opentelemetry/auto-instrumentations-node

2. Enable Auto Instrumentation

Enable auto instrumentation by requiring the auto-instrumentations-node module using the --require flag:
node --require '@opentelemetry/auto-instrumentations-node/register' app.js

3. Set Environment Variables

Add these environment variables to your service. Replace YOUR_TRACE0_ENV_API_KEY with the API key from your Trace0 environment.
VariableValue
OTEL_EXPORTER_OTLP_ENDPOINThttps://app.trace0hq.com/api
OTEL_EXPORTER_OTLP_HEADERSX-API-KEY=YOUR_TRACE0_ENV_API_KEY
OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf

4. Add Trace0 logger

To correlate logs with traces in Trace0, the @trace0/otel-logger library must be installed in your app. This is necessary because the OpenTelemetry JavaScript library does not yet automatically bridge console output into the OTel Logs pipeline. First, install the library:
npm install --save @trace0/otel-logger
Then add as the first import in your app entry point:
import '@trace0/otel-logger'; // must be first
Logs will be flushed to Trace0 automatically every 5 seconds in the background. Finally, add these signal handlers to guarantee delivery of the final log batch on shutdown.
import '@trace0/otel-logger'; // must be first
import { flush } from '@trace0/otel-logger';

process.once('SIGTERM', async () => { await flush(); process.exit(0); });
process.once('SIGINT',  async () => { await flush(); process.exit(0); });
The library will automatically capture all logging output, inject OTel trace context (traceId, spanId), and export the logs to the Trace0 ingest endpoint.

5. Deploy Service

Deploy your service and watch traces, metrics, and logs appear in the Trace0 dashboard within seconds.

Example Service

See our Node.js Express EC2 example app for a working service you can deploy to your AWS account.