feat: add profiling enablement flag (#6306)

* add flag and settings tweaks

* add to deploy pipeline

* letta error mesage
This commit is contained in:
Kian Jones
2025-11-20 13:15:16 -08:00
committed by Caren Thomas
parent d417870537
commit 7ccaa2a33a
3 changed files with 27 additions and 23 deletions

View File

@@ -123,8 +123,8 @@ class DatadogEnvFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool: def filter(self, record: logging.LogRecord) -> bool:
"""Add Datadog attributes to log record if Datadog is enabled.""" """Add Datadog attributes to log record if Datadog is enabled."""
if telemetry_settings.enable_datadog: if telemetry_settings.enable_datadog:
record.dd_env = telemetry_settings.datadog_env record.dd_env = settings.environment or "development"
record.dd_service = "letta-server" record.dd_service = telemetry_settings.datadog_service_name
else: else:
# Provide defaults to prevent attribute errors if filter is applied incorrectly # Provide defaults to prevent attribute errors if filter is applied incorrectly
record.dd_env = "" record.dd_env = ""

View File

@@ -265,7 +265,7 @@ def create_application() -> "FastAPI":
if telemetry_settings.enable_datadog: if telemetry_settings.enable_datadog:
try: try:
dd_env = settings.environment or "development" 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) # Configure environment variables before importing ddtrace (must be set in environment before importing ddtrace)
os.environ.setdefault("DD_ENV", dd_env) 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_VERSION", letta_version)
os.environ.setdefault("DD_AGENT_HOST", telemetry_settings.datadog_agent_host) 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_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_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()) 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 # Initialize and start profiler
profiler = Profiler( profiler = Profiler(
env=dd_env, env=dd_env,
service=telemetry_settings.datadog_service_name, service=telemetry_settings.datadog_service_name,
version=letta_version, version=letta_version,
) )
profiler.start() profiler.start()
# Log Git metadata for source code integration # Log Git metadata for source code integration
git_info = "" git_info = ""
if telemetry_settings.datadog_git_commit_sha: if telemetry_settings.datadog_git_commit_sha:
git_info = f", commit={telemetry_settings.datadog_git_commit_sha[:8]}" git_info = f", commit={telemetry_settings.datadog_git_commit_sha[:8]}"
if telemetry_settings.datadog_git_repository_url: if telemetry_settings.datadog_git_repository_url:
git_info += f", repo={telemetry_settings.datadog_git_repository_url}" git_info += f", repo={telemetry_settings.datadog_git_repository_url}"
logger.info( logger.info(
f"Datadog profiling enabled: env={dd_env}, " f"Datadog profiling enabled: env={dd_env}, "
f"service={telemetry_settings.datadog_service_name}, " f"service={telemetry_settings.datadog_service_name}, "
f"agent={telemetry_settings.datadog_agent_host}:{telemetry_settings.datadog_agent_port}{git_info}" f"agent={telemetry_settings.datadog_agent_host}:{telemetry_settings.datadog_agent_port}{git_info}"
) )
except Exception as e: except Exception as e:
logger.error(f"Failed to initialize Datadog profiling: {e}", exc_info=True) logger.error(f"Failed to initialize Datadog profiling: {e}", exc_info=True)
if SENTRY_ENABLED: if SENTRY_ENABLED:

View File

@@ -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_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_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_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.") datadog_profiling_heap_enabled: bool = Field(default=False, description="Enable heap profiling in Datadog.")