Middleware spans are now disabled by default in Django, Starlette and FastAPI integrations. Set the middleware_spans integration-level
option to capture individual spans per middleware layer. To record Django middleware spans, for example, configure as follows
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="<your-dsn>",
integrations=[
DjangoIntegration(middleware_spans=True),
],
)
feat(ai): add single message truncation by @shellmayr in #5079
feat(django): Add span around Task.enqueue by @sentrivana in #5209
feat(starlette): Set transaction name when middleware spans are disabled by @alexander-alderman-webb in #5223
feat: Add "K_REVISION" to environment variable release check (exposed by cloud run) by @rpradal in #5222
fix(django): Set active thread ID when middleware spans are disabled by @alexander-alderman-webb in #5220
fix(integrations): openai-agents fixing the input messages structure which was wrapped too much in some cases by @constantinius in #5203
fix(integrations): openai-agents fix multi-patching of get_model function by @constantinius in #5195
fix(integrations): add values for pydantic-ai and openai-agents to _INTEGRATION_DEACTIVATES to prohibit double span creation by @constantinius in #5196
fix(logs): Set span_id instead of sentry.trace.parent_span_id attribute by @sentrivana in #5241
fix(logs, metrics): Gate metrics, logs user attributes behind send_default_pii by @sentrivana in #5240
fix(pydantic-ai): Stop capturing internal exceptions by @alexander-alderman-webb in #5237
fix(ray): Actor class decorator with arguments by @alexander-alderman-webb in #5230
fix: Don't log internal exception for tornado user auth by @sl0thentr0py in #5208
fix: Fix changelog config by @sentrivana in #5192
chore(django): Disable middleware spans by default by @alexander-alderman-webb in #5219
chore(starlette): Disable middleware spans by default by @alexander-alderman-webb in #5224
ci: Unpin Python version for LiteLLM tests by @alexander-alderman-webb in #5238
ci: 🤖 Update test matrix with new releases (12/15) by @github-actions in #5229
chore: Ignore type annotation migration in blame by @alexander-alderman-webb in #5234
ref: Clean up get_active_propagation_context by @sl0thentr0py in #5217
ref: Cleanup outgoing propagation_context logic by @sl0thentr0py in #5215
ci: Pin Python version to at least 3.10 for LiteLLM by @alexander-alderman-webb in #5202
test: Remove skipped test by @sentrivana in #5197
Convert all remaining type annotations into the modern format by @zsol in #5239
Convert sentry_sdk type annotations into the modern format by @zsol in #5206
GEN_AI_OPERATION_NAME by @constantinius in #5185gen_ai.request.messages by @constantinius in #5167gen_ai.request.messages attribute by @constantinius in #5161invoke_agent span on agents.RunContextWrapper by @alexander-alderman-webb in #5165continue_from_headers by @sl0thentr0py in #5160commit_patterns to changelog config, remove auto-labeler by @sentrivana in #5176ModuleNotFoundError in Pydantic AI integration (#5135) by @alexander-alderman-webbMagicMock from mocked ModelResponse (#5126) by @alexander-alderman-webbOTLPIntegration (#4877) by @sl0thentr0py
Enable the new OTLP integration with the code snippet below, and your OpenTelemetry instrumentation will be automatically sent to Sentry's OTLP ingestion endpoint.
import sentry_sdk
from sentry_sdk.integrations.otlp import OTLPIntegration
sentry_sdk.init(
dsn="<your-dsn>",
# Add data like inputs and responses;
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
integrations=[
OTLPIntegration(),
],
)
Under the hood, this will setup:
SpanExporter that will automatically set up the OTLP ingestion endpoint from your DSNPropagator that ensures Distributed Tracing worksIf you were using the SentrySpanProcessor before, we recommend migrating over to OTLPIntegration since it's a much simpler setup.
feat(integrations): implement context management for invoke_agent spans (#5089) by @constantinius
feat(loguru): Capture extra (#5096) by @sentrivana
feat: Attach server.address to metrics (#5113) by @alexander-alderman-webb
fix: Cast message and detail attributes before appending exception notes (#5114) by @alexander-alderman-webb
fix(integrations): ensure that GEN_AI_AGENT_NAME is properly set for GEN_AI spans under an invoke_agent span (#5030) by @constantinius
fix(logs): Update sentry.origin (#5112) by @sentrivana
chore: Deprecate description truncation option for Redis spans (#5073) by @alexander-alderman-webb
chore: Deprecate max_spans LangChain parameter (#5074) by @alexander-alderman-webb
chore(toxgen): Check availability of pip and add detail to exceptions (#5076) by @alexander-alderman-webb
chore: add MCP SDK Pydantic AI and OpenAI Agents to the list of auto enabled integrations (#5111) by @constantinius
test: add tests for either FastMCP implementation (#5075) by @constantinius
fix(ci): Re-enable skipped tests (#5104) by @sentrivana
ci: 🤖 Update test matrix with new releases (11/17) (#5110) by @github-actions
ci: Force coverage core ctrace for 3.14 (#5108) by @sl0thentr0py
ToolManager._call_tool() parameters (#5084) by @alexander-alderman-webbNone version (#5083) by @alexander-alderman-webbcoverage version for 3.14 Django tests (#5088) by @alexander-alderman-webbbefore_send_metric option (#5064) by @alexander-alderman-webbenable_metrics option (#5056) by @alexander-alderman-webbenable_metrics option (#5046) by @alexander-alderman-webbPydantic AI integration (#4906) by @constantinius
Enable the new Pydantic AI integration with the code snippet below, and you can use the Sentry AI dashboards to observe your AI calls:
import sentry_sdk
from sentry_sdk.integrations.pydantic_ai import PydanticAIIntegration
sentry_sdk.init(
dsn="<your-dsn>",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Add data like inputs and responses;
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
integrations=[
PydanticAIIntegration(),
],
)
MCP Python SDK (#4964) by @constantinius
Enable the new Python MCP integration with the code snippet below:
import sentry_sdk
from sentry_sdk.integrations.mcp import MCPIntegration
sentry_sdk.init(
dsn="<your-dsn>",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Add data like inputs and responses;
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
integrations=[
MCPIntegration(),
],
)
fix(strawberry): Remove autodetection, always use sync extension (#4984) by @sentrivana
Previously, StrawberryIntegration would try to guess whether it should install the sync or async version of itself. This auto-detection was very brittle and could lead to us auto-enabling async code in a sync context. With this change, StrawberryIntegration remains an auto-enabling integration, but it'll enable the sync version by default. If you want to enable the async version, pass the option explicitly:
sentry_sdk.init(
# ...
integrations=[
StrawberryIntegration(
async_execution=True
),
],
)
fix(google-genai): Set agent name (#5038) by @constantinius
fix(integrations): hooking into error tracing function to find out if an execute tool span should be set to error (#4986) by @constantinius
fix(django): Improve logic for classifying cache hits and misses (#5029) by @alexander-alderman-webb
chore(metrics): Rename _metrics to metrics (#5035) by @alexander-alderman-webb
fix(tracemetrics): Bump metric buffer size to 1k (#5031) by @k-fish
fix startlette deprecation warning (#5034) by @DeoLeung
build(deps): bump actions/upload-artifact from 4 to 5 (#5032) by @dependabot
fix(ai): truncate messages for google genai (#4992) by @shellmayr
fix(ai): add message truncation to litellm (#4973) by @shellmayr
feat(langchain): Support v1 (#4874) by @sentrivana
ci: Run common test suite on Python 3.14t (#4969) by @alexander-alderman-webb
feat: Officially support 3.14 & run integration tests on 3.14 (#4974) by @sentrivana
Make logger template format safer to missing kwargs (#4981) by @sl0thentr0py
tests(huggingface): Support 1.0.0rc7 (#4979) by @alexander-alderman-webb
feat: Enable HTTP request code origin by default (#4967) by @alexander-alderman-webb
ci: Run common test suite on Python 3.14 (#4896) by @sentrivana
We are discontinuing development on 3.0. Please see https://github.com/getsentry/sentry-python/discussions/4955 for more information.
3.0.0a7 is a maintenance release that adds a warning that there won't be a stable 3.0 release. If you are on a 3.0 alpha release, please switch back to 2.x to get the newest features and fixes.
_get_db_span_description (#4924) by @misrasaurabh1feat: Add source information for slow outgoing HTTP requests (#4902) by @alexander-alderman-webb
tests: Update tox (#4913) by @sentrivana
fix(Ray): Retain the original function name when patching Ray tasks (#4858) by @svartalf
feat(ai): Add python-genai integration (#4891) by @vgrozdanic
Enable the new Google GenAI integration with the code snippet below, and you can use the Sentry AI dashboards to observe your AI calls:
import sentry_sdk
from sentry_sdk.integrations.google_genai import GoogleGenAIIntegration
sentry_sdk.init(
dsn="<your-dsn>",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Add data like inputs and responses;
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
integrations=[
GoogleGenAIIntegration(),
],
)
feat: Add concurrent.futures patch to threading integration (#4770) by @alexander-alderman-webb
The SDK now makes sure to automatically preserve span relationships when using ThreadPoolExecutor.
chore: Remove old metrics code (#4899) by @sentrivana
Removed all code related to the deprecated experimental metrics feature (sentry_sdk.metrics).
ref: Remove "experimental" from log function name (#4901) by @sentrivana
fix(ai): Add mapping for gen_ai message roles (#4884) by @shellmayr
feat(metrics): Add trace metrics behind an experiments flag (#4898) by @k-fish
Add LiteLLM integration (#4864) by @constantinius Once you've enabled the new LiteLLM integration, you can use the Sentry AI Agents Monitoring, a Sentry dashboard that helps you understand what's going on with your AI requests:
import sentry_sdk
from sentry_sdk.integrations.litellm import LiteLLMIntegration
sentry_sdk.init(
dsn="<your-dsn>",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Add data like inputs and responses;
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
integrations=[
LiteLLMIntegration(),
],
)
Litestar: Copy request info to prevent cookies mutation (#4883) by @alexander-alderman-webb
Add tracing to DramatiqIntegration (#4571) by @Igreh
Also emit spans for MCP tool calls done by the LLM (#4875) by @constantinius
Option to not trace HTTP requests based on status codes (#4869) by @alexander-alderman-webb
You can now disable transactions for incoming requests with specific HTTP status codes. The new trace_ignore_status_codes option accepts a set of status codes as integers. If a transaction wraps a request that results in one of the provided status codes, the transaction will be unsampled.
import sentry_sdk
sentry_sdk.init(
trace_ignore_status_codes={301, 302, 303, *range(305, 400), 404},
)
Move _set_agent_data call to ai_client_span function (#4876) by @constantinius
Add script to determine lowest supported versions (#4867) by @sentrivana
Update CONTRIBUTING.md (#4870) by @sentrivana
test_spark speed (#4822) by @mgalignianaNote: This is my last release. So long, and thanks for all the fish! by @antonpirker
invoke_agent span. (#4785) by @antonpirkerlog_item as rate limit category (#4798) by @sentrivanaDedupeIntegration is dropping an error. (#4788) by @antonpirkerprofiler (#4535) by @zen-xuNew Integration (BETA): Add support for langgraph (#4727) by @shellmayr
We can now instrument AI agents that are created with LangGraph out of the box.
For more information see the LangGraph integrations documentation.
AI Agents: Improve rendering of input and output messages in AI agents integrations. (#4750) by @shellmayr
AI Agents: Format span attributes in AI integrations (#4762) by @antonpirker
CI: Fix celery (#4765) by @sentrivana
Tests: Move asyncpg under toxgen (#4757) by @sentrivana
Tests: Move beam under toxgen (#4759) by @sentrivana
Tests: Move boto3 tests under toxgen (#4761) by @sentrivana
Tests: Remove openai pin and update tox (#4748) by @sentrivana
New integration: Unraisable exceptions (#4733) by @alexander-alderman-webb
Add the unraisable exception integration to your sentry_sdk.init call:
import sentry_sdk
from sentry_sdk.integrations.unraisablehook import UnraisablehookIntegration
sentry_sdk.init(
dsn="...",
integrations=[
UnraisablehookIntegration(),
]
)
_context_manager_state (#4698) by @sentrivana__exit__ in capture_internal_exceptions (#4719) by @sentrivanaopenai_agents in CI (#4742) by @sentrivanaWe're excited to announce that version 3.0 of the Sentry Python SDK is now available. This release is the result of a long-term effort to use OpenTelemetry under the hood for tracing. This switch opens the door for us to leverage the full power of OpenTelemetry, so stay tuned for more integrations and features in future releases.
Looking to upgrade from Sentry SDK 2.x to 3.x? See the full list of changes for a comprehensive overview of what's changed. Looking for a more digestible summary? See the migration guide in the docs with the most common migration patterns.
⚠️ This is a pre-release. If you feel like taking it for a spin, we'd be grateful for your feedback. How was the migration? Is everything working as expected? Is nothing working as expected? Something in between? Please let us know on GitHub or on Discord.
This version also adds an experimental async transport option. It can be enabled by passing transport_async=true in the experiments dict in sentry_sdk.init(). The async transport requires the asyncio integration and the httpcore[asyncio] library.
@trace decorator (#4676) by @antonpirkerenable_logs, before_send_log as top-level sentry_sdk.init() options (#4644) by @sentrivana@trace decorator. Allows to set span.op, span.name, and span.attributes (#4648) by @antonpirkersentry_sdk.update_current_span. (#4673) by @antonpirkerSpan.update_data() to update multiple span.data items at once. (#4666) by @antonpirkersend_data parameters (#4667) by @szokeasaurusrexgen_ai.* and ai.* attributes (#4665) by @antonpirker