From 5537fe85ed65444359bfd066707760d6395fc7a4 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Mon, 29 Dec 2025 19:11:16 +0200 Subject: feat: Add open telemetry (#2318) * feat: add OpenTelemetry tracing infrastructure Introduce distributed tracing capabilities using OpenTelemetry: - Add @opentelemetry packages to shared-server for tracing - Create tracing utility module with span helpers (withSpan, addSpanEvent, etc.) - Add tRPC middleware for automatic span creation on API calls - Initialize tracing in API and workers entry points - Add demo instrumentation to bookmark creation and crawler worker - Add configuration options (OTEL_TRACING_ENABLED, OTEL_EXPORTER_OTLP_ENDPOINT, etc.) - Document tracing configuration in environment variables docs When enabled, traces are collected for tRPC calls, bookmark creation flow, and crawler operations, with support for any OTLP-compatible backend (Jaeger, Tempo, etc.) * refactor: remove tracing from workers for now Keep tracing infrastructure but remove worker instrumentation: - Remove tracing initialization from workers entry point - Remove tracing instrumentation from crawler worker - Fix formatting in tracing files The tracing infrastructure remains available for future use. * add hono and next tracing * remove extra span logging * more fixes * update config * some fixes * upgrade packages * remove unneeded packages --------- Co-authored-by: Claude --- packages/api/index.ts | 17 ++++++++++++++++- packages/api/package.json | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'packages/api') diff --git a/packages/api/index.ts b/packages/api/index.ts index 3df7b429..ac31c977 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -1,9 +1,11 @@ +import { httpInstrumentationMiddleware } from "@hono/otel"; import { Hono } from "hono"; import { cors } from "hono/cors"; import { logger as loggerMiddleware } from "hono/logger"; import { poweredBy } from "hono/powered-by"; import { loadAllPlugins } from "@karakeep/shared-server"; +import serverConfig from "@karakeep/shared/config"; import logger from "@karakeep/shared/logger"; import { Context } from "@karakeep/trpc"; @@ -52,7 +54,20 @@ const app = new Hono<{ logger.info(str); }), ) - .use(poweredBy()) + .use(poweredBy()); + +// Add OpenTelemetry middleware if tracing is enabled +if (serverConfig.tracing.enabled) { + app.use( + "*", + httpInstrumentationMiddleware({ + serviceName: `${serverConfig.tracing.serviceName}-api`, + serviceVersion: serverConfig.serverVersion ?? "unknown", + }), + ); +} + +app .use( cors({ origin: "*", diff --git a/packages/api/package.json b/packages/api/package.json index b5d90f03..e49204b9 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -13,6 +13,7 @@ "test": "vitest" }, "dependencies": { + "@hono/otel": "^1.1.0", "@hono/prometheus": "^1.0.2", "@hono/trpc-server": "^0.4.0", "@hono/zod-validator": "^0.5.0", -- cgit v1.2.3-70-g09d2