Skip to content

Auto-Instrumentation

Autotel supports all official @opentelemetry/instrumentation-* packages. Use the autoInstrumentations array in init() to enable them by name.

instrumentation.ts
import 'autotel/register'; // Must be first for ESM
import { init } from 'autotel';
init({
service: 'my-app',
autoInstrumentations: ['express', 'http', 'pino'],
endpoint: process.env.OTLP_ENDPOINT,
});
Terminal window
tsx --import ./instrumentation.ts src/index.ts

Pass short names to autoInstrumentations:

| Short Name | Instruments | | ---------------------- | ------------------ | | 'http' | Node.js HTTP/HTTPS | | 'express' | Express | | 'fastify' | Fastify | | 'nestjs-core' | NestJS core | | 'pino' | Pino logger | | 'bunyan' | Bunyan logger | | 'winston' | Winston logger | | 'pg' | PostgreSQL | | 'mysql' / 'mysql2' | MySQL | | 'redis' | Redis | | 'mongodb' | MongoDB | | 'graphql' | GraphQL | | 'grpc' | gRPC | | 'koa' | Koa | | 'hapi' | Hapi | | 'kafka' | KafkaJS |

For more control, pass instrumentations directly:

import 'autotel/register';
import { init } from 'autotel';
import { PgInstrumentation } from '@opentelemetry/instrumentation-pg';
import { RedisInstrumentation } from '@opentelemetry/instrumentation-redis';
init({
service: 'my-app',
instrumentations: [new PgInstrumentation(), new RedisInstrumentation()],
});

Or use getNodeAutoInstrumentations() for everything:

import 'autotel/register';
import { init } from 'autotel';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
init({
service: 'my-app',
instrumentations: getNodeAutoInstrumentations({
'@opentelemetry/instrumentation-pino': { enabled: true },
'@opentelemetry/instrumentation-http': { enabled: true },
}),
});
autotel.yaml
autoInstrumentations:
- express
- http
- pino

| Scenario | Approach | | ------------------------------ | --------------------------------------------------------- | | Quick setup, common frameworks | autoInstrumentations: ['express', 'http'] | | Specific packages only | instrumentations: [new PgInstrumentation()] | | Everything (heavy) | instrumentations: getNodeAutoInstrumentations() | | YAML-driven config | autoInstrumentations: [express, http] in autotel.yaml |

For ESM apps (Node 18.19+), you must:

  1. Import autotel/register first
  2. Pass instrumentations directly to init()
  3. Run with --import flag: tsx --import ./instrumentation.ts src/index.ts

| Package | When to Use | | ---------------------------------- | ----------------------------------------------------- | | @opentelemetry/instrumentation-* | Official package exists and works | | autotel-plugins | No official package (BigQuery, Kafka batch) or broken | | autotel-drizzle | Drizzle ORM (no official package) | | autotel-mongoose | Mongoose (stable semconv, PII redaction) |

  • example-basic — ESM and CJS instrumentation setup patterns.
  • example-pg — PostgreSQL with official @opentelemetry/instrumentation-pg.