diff --git a/ddtrace/internal/debug.py b/ddtrace/internal/debug.py index 44bb1c4da63..b916408e2b8 100644 --- a/ddtrace/internal/debug.py +++ b/ddtrace/internal/debug.py @@ -130,6 +130,9 @@ def collect() -> dict[str, Any]: log_injection_enabled=ddtrace.config._logs_injection, health_metrics_enabled=ddtrace.config._health_metrics_enabled, runtime_metrics_enabled=RuntimeWorker.enabled, + otlp_traces_export_enabled=agent_config.trace_otlp_export_enabled, + otlp_metrics_export_enabled=ddtrace.config._otel_metrics_enabled, + otlp_logs_export_enabled=ddtrace.config._otel_logs_enabled, dd_version=ddtrace.config.version or "", global_tags=tags_to_str(ddtrace.config.tags), tracer_tags=tags_to_str(tracer._tags), diff --git a/tests/integration/test_debug.py b/tests/integration/test_debug.py index 49e27479f2c..1c689238855 100644 --- a/tests/integration/test_debug.py +++ b/tests/integration/test_debug.py @@ -83,6 +83,12 @@ def test_standard_tags(): assert f.get("log_injection_enabled") is True assert f.get("health_metrics_enabled") is False assert f.get("runtime_metrics_enabled") is False + assert "otlp_traces_export_enabled" in f + assert "otlp_metrics_export_enabled" in f + assert "otlp_logs_export_enabled" in f + assert isinstance(f.get("otlp_traces_export_enabled"), bool) + assert isinstance(f.get("otlp_metrics_export_enabled"), bool) + assert isinstance(f.get("otlp_logs_export_enabled"), bool) assert f.get("sampling_rules") == [] assert f.get("global_tags") == "" assert f.get("tracer_tags") == "" @@ -239,6 +245,52 @@ def test_runtime_metrics_enabled_via_env_var_start(): ) +@pytest.mark.subprocess( + env=dict( + # Clear any inherited OTLP-related env so the defaults are deterministic. + OTEL_SDK_DISABLED=None, + OTEL_TRACES_EXPORTER=None, + OTEL_METRICS_EXPORTER=None, + OTEL_LOGS_EXPORTER=None, + DD_TRACE_OTEL_ENABLED=None, + DD_METRICS_OTEL_ENABLED=None, + DD_LOGS_OTEL_ENABLED=None, + ) +) +def test_otlp_export_enabled_fields_default(): + from ddtrace.internal import debug + + f = debug.collect() + + assert f.get("otlp_traces_export_enabled") is False + assert f.get("otlp_metrics_export_enabled") is False + assert f.get("otlp_logs_export_enabled") is False + + +@pytest.mark.subprocess( + env=dict( + # trace_otlp_export_enabled is derived at config init, so it must come from the + # environment; DD_TRACE_AGENT_PROTOCOL_VERSION is cleared because it disables OTLP. + OTEL_TRACES_EXPORTER="otlp", + DD_TRACE_AGENT_PROTOCOL_VERSION=None, + ), + err=None, +) +def test_otlp_export_enabled_fields_set(): + import ddtrace + from ddtrace.internal import debug + + # Metrics/logs are read live from the global config, so they can be toggled here. + ddtrace.config._otel_metrics_enabled = True + ddtrace.config._otel_logs_enabled = True + + f = debug.collect() + + assert f.get("otlp_traces_export_enabled") is True + assert f.get("otlp_metrics_export_enabled") is True + assert f.get("otlp_logs_export_enabled") is True + + def test_to_json(): info = debug.collect() json.dumps(info)