From ef7f796d03060a1f81727fccae45cfc57a271003 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 26 Nov 2024 20:39:37 -0800 Subject: [PATCH 1/2] include user_api_key_dict debug info on OTEL post --- litellm/integrations/opentelemetry.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/litellm/integrations/opentelemetry.py b/litellm/integrations/opentelemetry.py index 30a280e57..519718d1e 100644 --- a/litellm/integrations/opentelemetry.py +++ b/litellm/integrations/opentelemetry.py @@ -264,6 +264,8 @@ class OpenTelemetry(CustomLogger): original_exception: Exception, user_api_key_dict: UserAPIKeyAuth, ): + import traceback + from opentelemetry import trace from opentelemetry.trace import Status, StatusCode @@ -282,6 +284,17 @@ class OpenTelemetry(CustomLogger): key="exception", value=str(original_exception), ) + self.safe_set_attribute( + span=exception_logging_span, + key="exception.traceback", + value=traceback.format_exc(), + ) + for key, value in user_api_key_dict.model_dump().items(): + self.safe_set_attribute( + span=exception_logging_span, + key=f"user_api_key_dict.{key}", + value=value, + ) exception_logging_span.set_status(Status(StatusCode.ERROR)) exception_logging_span.end(end_time=self._to_ns(datetime.now())) From 37aba0e4436d633dc9af87d81ba01ca7612ffa69 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Tue, 26 Nov 2024 20:42:24 -0800 Subject: [PATCH 2/2] log hash of api key and token on OTEL failure hook --- litellm/integrations/opentelemetry.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/litellm/integrations/opentelemetry.py b/litellm/integrations/opentelemetry.py index 519718d1e..3cbaf20e3 100644 --- a/litellm/integrations/opentelemetry.py +++ b/litellm/integrations/opentelemetry.py @@ -269,6 +269,8 @@ class OpenTelemetry(CustomLogger): from opentelemetry import trace from opentelemetry.trace import Status, StatusCode + from litellm.proxy.utils import _hash_token_if_needed + parent_otel_span = user_api_key_dict.parent_otel_span if parent_otel_span is not None: parent_otel_span.set_status(Status(StatusCode.ERROR)) @@ -289,7 +291,11 @@ class OpenTelemetry(CustomLogger): key="exception.traceback", value=traceback.format_exc(), ) + + # Set User API Key Dict Attributes for key, value in user_api_key_dict.model_dump().items(): + if key == "api_key" or key == "token": + value = _hash_token_if_needed(value) self.safe_set_attribute( span=exception_logging_span, key=f"user_api_key_dict.{key}", @@ -298,7 +304,7 @@ class OpenTelemetry(CustomLogger): exception_logging_span.set_status(Status(StatusCode.ERROR)) exception_logging_span.end(end_time=self._to_ns(datetime.now())) - # End Parent OTEL Sspan + # End Parent OTEL Span parent_otel_span.end(end_time=self._to_ns(datetime.now())) def _handle_sucess(self, kwargs, response_obj, start_time, end_time):