Skip to content

Commit 0329972

Browse files
lucasgomidelorenzejay
authored andcommitted
fix: stop anonymous telemetry from globalizing the TracerProvider
`Telemetry.set_tracer()` installed crewAI's anonymous SDK `TracerProvider` into OpenTelemetry's process-global slot, so the first `Crew` constructed in a test or host application replaced the default `ProxyTracerProvider` and exfiltrated every host span emitted via `trace.get_tracer(...)` to crewAI's OTLP endpoint. Keep the provider local to the `Telemetry` instance and route every anonymous span through `self.provider.get_tracer("crewai.telemetry")` so the global slot stays untouched. Mirrors the fix in `crewai_core.telemetry`, drops the now-dead `set_tracer()` calls in `event_listener.py` and `crewai_cli.command`, and adds regression coverage that asserts the provider stays a `ProxyTracerProvider` after constructing a `Crew`.
1 parent fd4ef60 commit 0329972

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

lib/crewai/tests/telemetry/test_otel_noop.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@ def test_operation_yields_non_recording_span_when_no_provider() -> None:
5151
assert isinstance(span, NonRecordingSpan)
5252

5353

54+
def test_constructing_crew_does_not_globalize_anonymous_telemetry_provider() -> None:
55+
agent = Agent(
56+
role="tester",
57+
goal="goal",
58+
backstory="backstory",
59+
llm=_FakeLLM(),
60+
allow_delegation=False,
61+
)
62+
Crew(
63+
agents=[agent],
64+
tasks=[Task(description="d", expected_output="o", agent=agent)],
65+
)
66+
assert isinstance(trace.get_tracer_provider(), ProxyTracerProvider)
67+
68+
5469
def test_kickoff_runs_cleanly_without_provider() -> None:
5570
agent = Agent(
5671
role="tester",

0 commit comments

Comments
 (0)