From 7ce1289548fb56057cc4fbb3594455bc92d42bbf Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 11 Jun 2024 13:57:31 -0700 Subject: [PATCH] feat - use traceparent to proporgate OTEL traces --- litellm/integrations/opentelemetry.py | 17 +++++++++++++++++ litellm/proxy/proxy_server.py | 3 +++ 2 files changed, 20 insertions(+) diff --git a/litellm/integrations/opentelemetry.py b/litellm/integrations/opentelemetry.py index 20ee5e478..e18cadce2 100644 --- a/litellm/integrations/opentelemetry.py +++ b/litellm/integrations/opentelemetry.py @@ -454,6 +454,23 @@ class OpenTelemetry(CustomLogger): def _get_span_name(self, kwargs): return LITELLM_REQUEST_SPAN_NAME + def get_traceparent_from_header(self, headers): + if headers is None: + return None + _traceparent = headers.get("traceparent", None) + if _traceparent is None: + return None + + from opentelemetry.trace.propagation.tracecontext import ( + TraceContextTextMapPropagator, + ) + + verbose_logger.debug("OpenTelemetry: GOT A TRACEPARENT {}".format(_traceparent)) + propagator = TraceContextTextMapPropagator() + _parent_context = propagator.extract(carrier={"traceparent": _traceparent}) + verbose_logger.debug("OpenTelemetry: PARENT CONTEXT {}".format(_parent_context)) + return _parent_context + def _get_span_context(self, kwargs): from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index d031ca687..c878fd17d 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -533,6 +533,9 @@ async def user_api_key_auth( parent_otel_span = open_telemetry_logger.tracer.start_span( name="Received Proxy Server Request", start_time=_to_ns(datetime.now()), + context=open_telemetry_logger.get_traceparent_from_header( + headers=request.headers + ), ) ### USER-DEFINED AUTH FUNCTION ### if user_custom_auth is not None: