Awesome-omni-skill sentry-python-sdk

Full Sentry SDK setup for Python. Use when asked to "add Sentry to Python", "install sentry-sdk", "setup Sentry in Python", or configure error monitoring, tracing, profiling, logging, metrics, crons, or AI monitoring for Python applications. Supports Django, Flask, FastAPI, Celery, Starlette, AIOHTTP, Tornado, and more.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/sentry-python-sdk" ~/.claude/skills/diegosouzapw-awesome-omni-skill-sentry-python-sdk && rm -rf "$T"
manifest: skills/development/sentry-python-sdk/SKILL.md
source content

Sentry Python SDK

Opinionated wizard that scans your Python project and guides you through complete Sentry setup.

Invoke This Skill When

  • User asks to "add Sentry to Python" or "setup Sentry" in a Python app
  • User wants error monitoring, tracing, profiling, logging, metrics, or crons in Python
  • User mentions
    sentry-sdk
    ,
    sentry_sdk
    , or Sentry + any Python framework
  • User wants to monitor Django views, Flask routes, FastAPI endpoints, Celery tasks, or scheduled jobs

Note: SDK versions and APIs below reflect Sentry docs at time of writing (sentry-sdk 2.x). Always verify against docs.sentry.io/platforms/python/ before implementing.


Phase 1: Detect

Run these commands to understand the project before making recommendations:

# Check existing Sentry
grep -i sentry requirements.txt pyproject.toml setup.cfg setup.py 2>/dev/null

# Detect web framework
grep -rE "django|flask|fastapi|starlette|aiohttp|tornado|quart|falcon|sanic|bottle" \
  requirements.txt pyproject.toml 2>/dev/null

# Detect task queues
grep -rE "celery|rq|huey|arq|dramatiq" requirements.txt pyproject.toml 2>/dev/null

# Detect logging libraries
grep -E "loguru" requirements.txt pyproject.toml 2>/dev/null

# Detect AI libraries
grep -rE "openai|anthropic|langchain|huggingface|google-genai|pydantic-ai|litellm" \
  requirements.txt pyproject.toml 2>/dev/null

# Detect schedulers / crons
grep -rE "celery|apscheduler|schedule|crontab" requirements.txt pyproject.toml 2>/dev/null

# Check for companion frontend
ls frontend/ web/ client/ ui/ static/ templates/ 2>/dev/null

What to note:

  • Is
    sentry-sdk
    already in requirements? If yes, check if
    sentry_sdk.init()
    is present — may just need feature config.
  • Which framework? (Determines where to place
    sentry_sdk.init()
    .)
  • Which task queue? (Celery needs dual-process init; RQ needs a settings file.)
  • AI libraries? (OpenAI, Anthropic, LangChain are auto-instrumented.)
  • Companion frontend? (Triggers Phase 4 cross-link.)

Phase 2: Recommend

Based on what you found, present a concrete proposal. Don't ask open-ended questions — lead with a recommendation:

Always recommended (core coverage):

  • Error Monitoring — captures unhandled exceptions, supports
    ExceptionGroup
    (Python 3.11+)
  • Logging — Python
    logging
    stdlib auto-captured; enhanced if Loguru detected

Recommend when detected:

  • Tracing — HTTP framework detected (Django/Flask/FastAPI/etc.)
  • AI Monitoring — OpenAI/Anthropic/LangChain/etc. detected (auto-instrumented, zero config)
  • Profiling — production apps where performance matters
  • Crons — Celery Beat, APScheduler, or cron patterns detected
  • Metrics — business KPIs, SLO tracking

Recommendation matrix:

FeatureRecommend when...Reference
Error MonitoringAlways — non-negotiable baseline
${SKILL_ROOT}/references/error-monitoring.md
TracingDjango/Flask/FastAPI/AIOHTTP/etc. detected
${SKILL_ROOT}/references/tracing.md
ProfilingProduction + performance-sensitive workload
${SKILL_ROOT}/references/profiling.md
LoggingAlways (stdlib); enhanced for Loguru
${SKILL_ROOT}/references/logging.md
MetricsBusiness events or SLO tracking needed
${SKILL_ROOT}/references/metrics.md
CronsCelery Beat, APScheduler, or cron patterns
${SKILL_ROOT}/references/crons.md
AI MonitoringOpenAI/Anthropic/LangChain/etc. detected
${SKILL_ROOT}/references/ai-monitoring.md

Propose: "I recommend Error Monitoring + Tracing [+ Logging if applicable]. Want Profiling, Crons, or AI Monitoring too?"


Phase 3: Guide

Install

# Core SDK (always required)
pip install sentry-sdk

# Optional extras (install only what matches detected framework):
pip install "sentry-sdk[django]"
pip install "sentry-sdk[flask]"
pip install "sentry-sdk[fastapi]"
pip install "sentry-sdk[celery]"
pip install "sentry-sdk[aiohttp]"
pip install "sentry-sdk[tornado]"

# Multiple extras:
pip install "sentry-sdk[django,celery]"

Extras are optional — plain

sentry-sdk
works for all frameworks. Extras install complementary packages.

Quick Start — Recommended Init

Full init enabling the most features with sensible defaults. Place before any app/framework code:

import sentry_sdk

sentry_sdk.init(
    dsn=os.environ["SENTRY_DSN"],
    environment=os.environ.get("SENTRY_ENVIRONMENT", "production"),
    release=os.environ.get("SENTRY_RELEASE"),   # e.g. "myapp@1.0.0"
    send_default_pii=True,

    # Tracing (lower to 0.1–0.2 in high-traffic production)
    traces_sample_rate=1.0,

    # Profiling — continuous, tied to active spans
    profile_session_sample_rate=1.0,
    profile_lifecycle="trace",

    # Structured logs (SDK ≥ 2.35.0)
    enable_logs=True,
)

Where to Initialize Per Framework

FrameworkWhere to call
sentry_sdk.init()
Notes
DjangoTop of
settings.py
, before any imports
No middleware needed — Sentry patches Django internally
FlaskBefore
app = Flask(__name__)
Must precede app creation
FastAPIBefore
app = FastAPI()
StarletteIntegration
+
FastApiIntegration
auto-enabled together
StarletteBefore
app = Starlette(...)
Same auto-integration as FastAPI
AIOHTTPModule level, before
web.Application()
TornadoModule level, before app setupNo integration class needed
QuartBefore
app = Quart(__name__)
FalconModule level, before
app = falcon.App()
SanicInside
@app.listener("before_server_start")
Sanic's lifecycle requires async init
Celery
@signals.celeryd_init.connect
in worker AND in calling process
Dual-process init required
RQ
mysettings.py
loaded by worker via
rq worker -c mysettings
ARQBoth worker module and enqueuing process

Django example (

settings.py
):

import sentry_sdk

sentry_sdk.init(
    dsn=os.environ["SENTRY_DSN"],
    send_default_pii=True,
    traces_sample_rate=1.0,
    profile_session_sample_rate=1.0,
    profile_lifecycle="trace",
    enable_logs=True,
)

# rest of Django settings...
INSTALLED_APPS = [...]

FastAPI example (

main.py
):

import sentry_sdk

sentry_sdk.init(
    dsn=os.environ["SENTRY_DSN"],
    send_default_pii=True,
    traces_sample_rate=1.0,
    profile_session_sample_rate=1.0,
    profile_lifecycle="trace",
    enable_logs=True,
)

from fastapi import FastAPI
app = FastAPI()

Auto-Enabled vs Explicit Integrations

Most integrations activate automatically when their package is installed — no

integrations=[...]
needed:

Auto-enabledExplicit required
Django, Flask, FastAPI, Starlette, AIOHTTP, Tornado, Quart, Falcon, Sanic, Bottle
DramatiqIntegration
Celery, RQ, Huey, ARQ
GRPCIntegration
SQLAlchemy, Redis, asyncpg, pymongo
StrawberryIntegration
Requests, HTTPX, aiohttp-client
AsyncioIntegration
OpenAI, Anthropic, LangChain, Pydantic AI, MCP
OpenTelemetryIntegration
Python
logging
, Loguru
WSGIIntegration
/
ASGIIntegration

For Each Agreed Feature

Walk through features one at a time. Load the reference, follow its steps, verify before moving on:

FeatureReference fileLoad when...
Error Monitoring
${SKILL_ROOT}/references/error-monitoring.md
Always (baseline)
Tracing
${SKILL_ROOT}/references/tracing.md
HTTP handlers / distributed tracing
Profiling
${SKILL_ROOT}/references/profiling.md
Performance-sensitive production
Logging
${SKILL_ROOT}/references/logging.md
Always; enhanced for Loguru
Metrics
${SKILL_ROOT}/references/metrics.md
Business KPIs / SLO tracking
Crons
${SKILL_ROOT}/references/crons.md
Scheduler / cron patterns detected
AI Monitoring
${SKILL_ROOT}/references/ai-monitoring.md
AI library detected

For each feature:

Read ${SKILL_ROOT}/references/<feature>.md
, follow steps exactly, verify it works.


Configuration Reference

Key
sentry_sdk.init()
Options

OptionTypeDefaultPurpose
dsn
str
None
SDK disabled if empty; env:
SENTRY_DSN
environment
str
"production"
e.g.,
"staging"
; env:
SENTRY_ENVIRONMENT
release
str
None
e.g.,
"myapp@1.0.0"
; env:
SENTRY_RELEASE
send_default_pii
bool
False
Include IP, headers, cookies, auth user
traces_sample_rate
float
None
Transaction sample rate;
None
disables tracing
traces_sampler
Callable
None
Custom per-transaction sampling (overrides rate)
profile_session_sample_rate
float
None
Continuous profiling session rate
profile_lifecycle
str
"manual"
"trace"
= auto-start profiler with spans
profiles_sample_rate
float
None
Transaction-based profiling rate
enable_logs
bool
False
Send logs to Sentry (SDK ≥ 2.35.0)
sample_rate
float
1.0
Error event sample rate
attach_stacktrace
bool
False
Stack traces on
capture_message()
max_breadcrumbs
int
100
Max breadcrumbs per event
debug
bool
False
Verbose SDK debug output
before_send
Callable
None
Hook to mutate/drop error events
before_send_transaction
Callable
None
Hook to mutate/drop transaction events
ignore_errors
list
[]
Exception types or regex patterns to suppress
auto_enabling_integrations
bool
True
Set
False
to disable all auto-detection

Environment Variables

VariableMaps toNotes
SENTRY_DSN
dsn
SENTRY_RELEASE
release
Also auto-detected from git SHA, Heroku, CircleCI, CodeBuild, GAE
SENTRY_ENVIRONMENT
environment
SENTRY_DEBUG
debug

Verification

Test that Sentry is receiving events:

# Trigger a real error event — check dashboard within seconds
division_by_zero = 1 / 0

Or for a non-crashing check:

sentry_sdk.capture_message("Sentry Python SDK test")

If nothing appears:

  1. Set
    debug=True
    in
    sentry_sdk.init()
    — prints SDK internals to stdout
  2. Verify the DSN is correct
  3. Check
    SENTRY_DSN
    env var is set in the running process
  4. For Celery/RQ: ensure init runs in the worker process, not just the calling process

Phase 4: Cross-Link

After completing Python setup, check for a companion frontend missing Sentry:

ls frontend/ web/ client/ ui/ 2>/dev/null
cat frontend/package.json web/package.json client/package.json 2>/dev/null \
  | grep -E '"react"|"svelte"|"vue"|"next"|"nuxt"'

If a frontend exists without Sentry, suggest the matching skill:

Frontend detectedSuggest skill
React / Next.js
sentry-react-sdk
Svelte / SvelteKit
sentry-svelte-sdk
Vue / NuxtUse
@sentry/vue
— see docs.sentry.io/platforms/javascript/guides/vue/
Other JS/TS
sentry-react-sdk
(covers generic browser JS patterns)

Troubleshooting

IssueSolution
Events not appearingSet
debug=True
, verify DSN, check env vars in the running process
Malformed DSN errorFormat:
https://<key>@o<org>.ingest.sentry.io/<project>
Django exceptions not capturedEnsure
sentry_sdk.init()
is at the top of
settings.py
before other imports
Flask exceptions not capturedInit must happen before
app = Flask(__name__)
FastAPI exceptions not capturedInit before
app = FastAPI()
; both
StarletteIntegration
and
FastApiIntegration
auto-enabled
Celery task errors not capturedMust call
sentry_sdk.init()
in the worker process via
celeryd_init
signal
Sanic init not workingInit must be inside
@app.listener("before_server_start")
, not module level
uWSGI not capturingAdd
--enable-threads --py-call-uwsgi-fork-hooks
to uWSGI command
No traces appearingVerify
traces_sample_rate
is set (not
None
); check that the integration is auto-enabled
Profiling not startingRequires
traces_sample_rate > 0
+ either
profile_session_sample_rate
or
profiles_sample_rate
enable_logs
not working
Requires SDK ≥ 2.35.0; for direct structured logs use
sentry_sdk.logger
; for stdlib bridging use
LoggingIntegration(sentry_logs_level=...)
Too many transactionsLower
traces_sample_rate
or use
traces_sampler
to drop health checks
Cross-request data leakingDon't use
get_global_scope()
for per-request data — use
get_isolation_scope()
RQ worker not reportingPass
--sentry-dsn=""
to disable RQ's own Sentry shortcut; init via settings file instead