From 7ccaa2a33a11e8ad5809af2cefa613b9906ec9c0 Mon Sep 17 00:00:00 2001 From: Kian Jones <11655409+kianjones9@users.noreply.github.com> Date: Thu, 20 Nov 2025 13:15:16 -0800 Subject: [PATCH] feat: add profiling enablement flag (#6306) * add flag and settings tweaks * add to deploy pipeline * letta error mesage --- letta/log.py | 4 ++-- letta/server/rest_api/app.py | 43 ++++++++++++++++++------------------ letta/settings.py | 3 +++ 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/letta/log.py b/letta/log.py index c15cbb3c..452255f8 100644 --- a/letta/log.py +++ b/letta/log.py @@ -123,8 +123,8 @@ class DatadogEnvFilter(logging.Filter): def filter(self, record: logging.LogRecord) -> bool: """Add Datadog attributes to log record if Datadog is enabled.""" if telemetry_settings.enable_datadog: - record.dd_env = telemetry_settings.datadog_env - record.dd_service = "letta-server" + record.dd_env = settings.environment or "development" + record.dd_service = telemetry_settings.datadog_service_name else: # Provide defaults to prevent attribute errors if filter is applied incorrectly record.dd_env = "" diff --git a/letta/server/rest_api/app.py b/letta/server/rest_api/app.py index 21bb9e0c..fa5e0daa 100644 --- a/letta/server/rest_api/app.py +++ b/letta/server/rest_api/app.py @@ -265,7 +265,7 @@ def create_application() -> "FastAPI": if telemetry_settings.enable_datadog: try: dd_env = settings.environment or "development" - print(f"▶ Initializing Datadog profiling (env={dd_env})") + print(f"▶ Initializing Datadog tracing (env={dd_env})") # Configure environment variables before importing ddtrace (must be set in environment before importing ddtrace) os.environ.setdefault("DD_ENV", dd_env) @@ -273,32 +273,33 @@ def create_application() -> "FastAPI": os.environ.setdefault("DD_VERSION", letta_version) os.environ.setdefault("DD_AGENT_HOST", telemetry_settings.datadog_agent_host) os.environ.setdefault("DD_TRACE_AGENT_PORT", str(telemetry_settings.datadog_agent_port)) - os.environ.setdefault("DD_PROFILING_ENABLED", "true") + os.environ.setdefault("DD_PROFILING_ENABLED", str(telemetry_settings.datadog_profiling_enabled).lower()) os.environ.setdefault("DD_PROFILING_MEMORY_ENABLED", str(telemetry_settings.datadog_profiling_memory_enabled).lower()) os.environ.setdefault("DD_PROFILING_HEAP_ENABLED", str(telemetry_settings.datadog_profiling_heap_enabled).lower()) - from ddtrace.profiling import Profiler + if telemetry_settings.datadog_profiling_enabled: + from ddtrace.profiling import Profiler - # Initialize and start profiler - profiler = Profiler( - env=dd_env, - service=telemetry_settings.datadog_service_name, - version=letta_version, - ) - profiler.start() + # Initialize and start profiler + profiler = Profiler( + env=dd_env, + service=telemetry_settings.datadog_service_name, + version=letta_version, + ) + profiler.start() - # Log Git metadata for source code integration - git_info = "" - if telemetry_settings.datadog_git_commit_sha: - git_info = f", commit={telemetry_settings.datadog_git_commit_sha[:8]}" - if telemetry_settings.datadog_git_repository_url: - git_info += f", repo={telemetry_settings.datadog_git_repository_url}" + # Log Git metadata for source code integration + git_info = "" + if telemetry_settings.datadog_git_commit_sha: + git_info = f", commit={telemetry_settings.datadog_git_commit_sha[:8]}" + if telemetry_settings.datadog_git_repository_url: + git_info += f", repo={telemetry_settings.datadog_git_repository_url}" - logger.info( - f"Datadog profiling enabled: env={dd_env}, " - f"service={telemetry_settings.datadog_service_name}, " - f"agent={telemetry_settings.datadog_agent_host}:{telemetry_settings.datadog_agent_port}{git_info}" - ) + logger.info( + f"Datadog profiling enabled: env={dd_env}, " + f"service={telemetry_settings.datadog_service_name}, " + f"agent={telemetry_settings.datadog_agent_host}:{telemetry_settings.datadog_agent_port}{git_info}" + ) except Exception as e: logger.error(f"Failed to initialize Datadog profiling: {e}", exc_info=True) if SENTRY_ENABLED: diff --git a/letta/settings.py b/letta/settings.py index 3dddd671..92683198 100644 --- a/letta/settings.py +++ b/letta/settings.py @@ -426,6 +426,9 @@ class TelemetrySettings(BaseSettings): ) datadog_agent_port: int = Field(default=8126, ge=1, le=65535, description="Datadog trace agent port (typically 8126 for traces).") datadog_service_name: str = Field(default="letta-server", description="Service name for Datadog profiling.") + + datadog_profiling_enabled: bool = Field(default=False, description="Enable Datadog profiling.") + datadog_profiling_memory_enabled: bool = Field(default=False, description="Enable memory profiling in Datadog.") datadog_profiling_heap_enabled: bool = Field(default=False, description="Enable heap profiling in Datadog.")