Skip to main content

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 install @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.