Getting started
@inversifyjs/http-opentelemetry turns HTTP instrumentation events into OpenTelemetry spans and metrics. Register an OpenTelemetry SDK, then pass createHttpOpenTelemetrySink() to an HTTP adapter. The sink reads the global tracer and meter when it is created, so register the SDK first.
Install dependencies
The example below uses Hono. Install the sink, the HTTP packages, and @opentelemetry/api:
- npm
- pnpm
- yarn
npm install @inversifyjs/http-opentelemetry @opentelemetry/api inversify @inversifyjs/http-core @inversifyjs/http-hono hono
pnpm install @inversifyjs/http-opentelemetry @opentelemetry/api inversify @inversifyjs/http-core @inversifyjs/http-hono hono
yarn add @inversifyjs/http-opentelemetry @opentelemetry/api inversify @inversifyjs/http-core @inversifyjs/http-hono hono
The application also needs an OpenTelemetry SDK that registers a global tracer and meter. createHttpOpenTelemetrySink() can take { meter, meterName, tracer, tracerName } when the application does not use the globals. Express, Fastify, and uWebSockets use the same instrumentation option on their adapters.
Register the sink
import { Controller, Get } from '@inversifyjs/http-core';
import { InversifyHonoHttpAdapter } from '@inversifyjs/http-hono';
import { createHttpOpenTelemetrySink } from '@inversifyjs/http-opentelemetry';
import { Container } from 'inversify';
@Controller('/items')
export class ItemsController {
@Get()
public get(): string {
return 'hero';
}
}
export function createInstrumentedAdapter(
container: Container,
): InversifyHonoHttpAdapter {
container.bind(ItemsController).toSelf().inSingletonScope();
return new InversifyHonoHttpAdapter(container, {
instrumentation: [createHttpOpenTelemetrySink()],
logger: false,
});
}
See Telemetry for the spans and metrics this sink records.