Sentry Python Setup
Install and configure Sentry in Python projects.
Invoke This Skill When
- User asks to "add Sentry to Python" or "install Sentry" in a Python app
- User wants error monitoring, logging, or tracing in Python
- User mentions "sentry-sdk" or Python frameworks (Django, Flask, FastAPI)
Important: The configuration options and code samples below are examples. Always verify against docs.sentry.io before implementing, as APIs and defaults may have changed.
Install
pip install sentry-sdk
Configure
Initialize as early as possible in your application:
import sentry_sdk
sentry_sdk.init(
dsn="YOUR_SENTRY_DSN",
send_default_pii=True,
# Tracing
traces_sample_rate=1.0,
# Profiling
profile_session_sample_rate=1.0,
profile_lifecycle="trace",
# Logs
enable_logs=True,
)
Async Applications
For async apps, initialize inside an async function:
import asyncio
import sentry_sdk
async def main():
sentry_sdk.init(
dsn="YOUR_SENTRY_DSN",
send_default_pii=True,
traces_sample_rate=1.0,
enable_logs=True,
)
# ... rest of app
asyncio.run(main())
Framework Integrations
Use the same sentry_sdk.init() call shown above. Place it where it runs before your app starts:
| Framework | Where to Init | Notes |
|---|---|---|
| Django | Top of settings.py | Auto-detects Django, no extra install |
| Flask | Before app = Flask(__name__) | Auto-detects Flask |
| FastAPI | Before app = FastAPI() | Auto-detects FastAPI |
| Celery | In Celery worker config | Auto-detects Celery |
| AIOHTTP | Before app creation | Auto-detects AIOHTTP |
Configuration Options
| Option | Description | Default | Min SDK |
|---|---|---|---|
dsn | Sentry DSN | None (SDK no-ops without it) | — |
send_default_pii | Include user data | None | — |
traces_sample_rate | % of transactions traced | None (tracing disabled) | — |
profile_session_sample_rate | % of sessions profiled | None (profiling disabled) | 2.24.1+ |
profile_lifecycle | Profiling mode ("trace" or "manual") | "manual" | 2.24.1+ |
enable_logs | Send logs to Sentry | False | 2.35.0+ |
environment | Environment name | "production" (or SENTRY_ENVIRONMENT env var) | — |
release | Release version | Auto-detected | — |
Environment Variables
The SDK auto-reads these:
SENTRY_DSN=https://xxx@o123.ingest.sentry.io/456
SENTRY_ENVIRONMENT=production
SENTRY_RELEASE=1.0.0
For sentry-cli (source maps, releases), also set:
SENTRY_AUTH_TOKEN=sntrys_xxx
SENTRY_ORG=my-org
SENTRY_PROJECT=my-project
Or pass DSN in code:
import os
import sentry_sdk
sentry_sdk.init(
dsn=os.environ.get("SENTRY_DSN"),
# ...
)
Verification
# Intentional error to test
division_by_zero = 1 / 0
Or capture manually:
sentry_sdk.capture_message("Test message from Python")
Troubleshooting
| Issue | Solution |
|---|---|
| Errors not appearing | Ensure init() is called early, check DSN |
| No traces | Set traces_sample_rate > 0 |
| IPython errors not captured | Run from file, not interactive shell |
| Async errors missing | Initialize inside async function |