getsentry / getsentry/sentry-python

OpenAI Agents integration breaks parent-child span relationships due to isolation_scope usage

未關閉
#4,786 6 則留言 0 個 reaction 已指派 1 人 已被 @alexander-alderman-webb 認領 在 GitHub 檢視
Improvement Integration: OpenAI Agents Python Spans
主要語言
Python
星號
2.2k
分支
669
平均合併
1 天 40 分鐘
30 天內合併 PR
212

描述

_(Full disclosure, the issue text & root cause analysis were done by Claude. The problem is very much a problem we're running into atm tho)_

## Problem

The OpenAI Agents integration in Sentry SDK creates separate traces instead of proper parent-child span relationships when agents are called from within existing trace contexts. This results in:

1. **Trace fragmentation**: Long "holes" appear in traces when agents are executing
2. **Lost context**: Agent spans don't appear as children of the calling span
3. **Poor observability**: Agent-to-agent (through `agent.as_tool()` create completely separate traces instead of nested spans

## Root Cause

The issue is in `sentry_sdk/integrations/openai_agents/patches/runner.py:28` where `sentry_sdk.isolation_scope()` is used:

```python
# Isolate each workflow so that when agents are run in asyncio tasks they
# don't touch each other's scopes
with sentry_sdk.isolation_scope():
agent = args[0]
with agent_workflow_span(agent):
# ... agent execution
```

The `isolation_scope()` creates a completely separate tracing context that breaks the connection to any existing parent span, even when that parent-child relationship is desired.

## Proposed Solution

Replace `sentry_sdk.isolation_scope()` with `sentry_sdk.new_scope()` on line 28:

```python
# Create new scope for local span management while preserving parent context
with sentry_sdk.new_scope():
agent = args[0]
with agent_workflow_span(agent):
# ... agent execution
```

This change would:

✅ **Preserve parent-child relationships**: Agent spans would properly nest under calling spans
✅ **Maintain concurrent isolation**: Different concurrent agent executions would still be isolated from each other
✅ **Keep existing functionality**: All current tests should continue to pass
✅ **Improve observability**: Traces would show the complete flow including agent work

## Impact

- **Current behavior**: Agent execution creates separate traces
- **Expected behavior**: Agent execution creates child spans within the existing trace
- **Backward compatibility**: This change should not break existing functionality

The concurrent agent execution test (line 673 in tests) should still pass because `new_scope()` provides sufficient isolation between parallel executions while allowing proper parent-child relationships.

## Files Affected

- `sentry_sdk/integrations/openai_agents/patches/runner.py` (line 28)

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。