[do not merge] feat: Span streaming & new span API by sentrivana · Pull Request #5551 · getsentry/sentry-python
Introduce a new start_span() API with a simpler and more intuitive signature to eventually replace the original start_span() and start_transaction() APIs.
Additionally, introduce a new streaming mode (sentry_sdk.init(_experiments={"trace_lifecycle": "stream"})) that will send spans as they finish, rather than by transaction.
import sentry_sdk sentry_sdk.init( _experiments={"trace_lifecycle": "stream"}, ) with sentry_sdk.traces.start_span(name="my_span"): ...
The new API MUST be used with the new streaming mode, and the old API MUST be used in the legacy non-streaming (static) mode.
Migration guide: getsentry/sentry-docs#16072
Notes
- The diff is huge mostly because I've optimized for easy removal of legacy code in the next major, deliberately duplicating a lot. I'll of course split it up to reviewable PRs once ready.
- Chose to go with a new file and a new span class so that we can just remove the old
Spanand drop the newStreamedSpanintracing.pyas a replacement.
- Chose to go with a new file and a new span class so that we can just remove the old
- The batcher for spans is a bit different from the logs and metrics batchers because it needs to batch by
trace_id(we can't send spans from different traces in the same envelope).
Release Plan
- There will be prereleases for internal testing.
- We'll release the new API in a minor version as opt-in.
- In the next major, we'll drop the legacy API.
Project
https://linear.app/getsentry/project/span-first-sdk-python-727da28dd037/overview