diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6507113b3e8..a1ecd817c64 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -163,6 +163,7 @@ ddtrace/contrib/internal/litellm @DataDog/ml-observ ddtrace/contrib/_litellm.py @DataDog/ml-observability ddtrace/contrib/internal/pydantic_ai @DataDog/ml-observability ddtrace/contrib/_pydantic_ai.py @DataDog/ml-observability +ddtrace/aiobs/ @DataDog/ml-observability tests/llmobs @DataDog/ml-observability tests/contrib/openai @DataDog/ml-observability tests/contrib/langchain @DataDog/ml-observability diff --git a/ddtrace/_aiobs/__init__.py b/ddtrace/_aiobs/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ddtrace/_aiobs/integrations/__init__.py b/ddtrace/_aiobs/integrations/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ddtrace/_aiobs/integrations/ray/__init__.py b/ddtrace/_aiobs/integrations/ray/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ddtrace/_aiobs/integrations/ray/tracer.py b/ddtrace/_aiobs/integrations/ray/tracer.py new file mode 100644 index 00000000000..ae0b42a50cd --- /dev/null +++ b/ddtrace/_aiobs/integrations/ray/tracer.py @@ -0,0 +1,28 @@ +import os + + +os.environ["DD_TRACE_OTEL_ENABLED"] = "true" + +from opentelemetry.trace import set_tracer_provider + +from ddtrace.opentelemetry import TracerProvider +from ddtrace.trace import TraceFilter +from ddtrace.trace import tracer + + +class RayTraceFilter(TraceFilter): + def process_trace(self, trace): + for span in trace: + span.span_type = "ray." + span.name + span.name = "ray.job" + span.service = os.environ.get("DD_SERVICE", "unspecified-ray-job") + span.set_metric("_dd.djm.enabled", 1) + span.set_metric("_dd.filter.kept", 1) + span.set_metric("_dd.measured", 1) + span.set_metric("_sampling_priority_v1", 2) + return trace + + +def setup_tracing() -> None: + tracer.configure(trace_processors=[RayTraceFilter()]) + set_tracer_provider(TracerProvider())