Skip to content

Implement OpenTelemetry for TypeScript service #450

@davideme

Description

@davideme

Overview

Implement the OpenTelemetry integration for the TypeScript (Fastify + Prisma) service as specified in src/typescript/docs/adr/008-opentelemetry.md.

Parent issue: #14

Tasks

  • Add required npm packages (@opentelemetry/api, @opentelemetry/sdk-node, @opentelemetry/auto-instrumentations-node, @opentelemetry/exporter-trace-otlp-grpc, @opentelemetry/exporter-metrics-otlp-grpc, @prisma/instrumentation)
  • Create SDK init file loaded before app code (no-op when OTEL_EXPORTER_OTLP_ENDPOINT is absent)
  • Configure FastifyInstrumentation + HttpInstrumentation for inbound HTTP traces
  • Configure UndiciInstrumentation for outbound HTTP traces
  • Configure PrismaInstrumentation for database traces
  • Inject trace context into Fastify request logs (trace.getActiveSpan())
  • Verify metrics baseline: http.server.request.duration, http.server.active_requests
  • Set resource attributes: service.name=lamp-control-api-typescript, service.version, deployment.environment
  • Ensure W3C TraceContext + Baggage propagation is enabled
  • Add/update tests to verify instrumentation wires up correctly

Instrumentation summary

Signal Mechanism Type
Traces – Inbound HTTP instrumentation-fastify + instrumentation-http Config only
Traces – Outbound HTTP instrumentation-http / instrumentation-undici Config only
Traces – Database @prisma/instrumentation Config only
Metrics – HTTP server instrumentation-http (auto-emitted) Config only
Logs Manual Fastify onRequest hook + OTel API Custom code

Acceptance criteria

  • SDK is a no-op when OTEL_EXPORTER_OTLP_ENDPOINT is not set
  • All three pillars (traces, metrics, logs) emit data when collector is configured
  • Existing tests continue to pass

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions