mcpField
S
sentry-python-sdk

sentry-python-sdk

github.com/getsentry開発2722.6k 回インストール今日更新
リポジトリ

sentry-python-sdk について

Pythonプロジェクトを調査し、Sentry SDKの設定を案内するスキルです。フレームワークやタスクキューに応じて、エラー監視、トレーシング、ログなどの構成を提案します。

主な機能

  1. 01フレームワークと依存関係の調査
  2. 02SDKのインストールと初期化の案内
  3. 03エラー監視とトレーシングの設定
  4. 04ログ、プロファイリング、メトリクスの設定
  5. 05イベント送信の検証

活用シーン

  1. 01Django、Flask、FastAPIアプリへのSentry導入
  2. 02Celeryなどのバックグラウンドタスクの監視設定
  3. 03既存のOpenTelemetryに応じたトレーシング方式の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-python-sdk

インストール後、Claude Code で/sentry-python-sdkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ai-monitoring.md
crons.md
error-monitoring.md
logging.md
metrics.md
profiling.md
tracing.md

詳細

すべてのスキル > SDK のセットアップ > Python SDK

Sentry Python SDK

Python プロジェクトをスキャンし、Sentry のセットアップを完全に行えるよう案内する、方針を重視したウィザードです。

このスキルを呼び出すタイミング

  • ユーザーが Python アプリに「Sentry を追加」したい、または「Sentry をセットアップ」したいと尋ねた場合
  • ユーザーが Python でエラー監視、トレース、プロファイリング、ログ記録、メトリクス、または cron を利用したい場合
  • ユーザーが sentry-sdk、sentry_sdk、または Sentry と Python フレームワークの組み合わせについて言及した場合
  • ユーザーが Django のビュー、Flask のルート、FastAPI のエンドポイント、Celery のタスク、またはスケジュール済みジョブを監視したい場合

注: 以下の SDK バージョンと API は、執筆時点の Sentry ドキュメント(sentry-sdk 2.x)に基づいています。 実装前に、必ず docs.sentry.io/platforms/python/ で確認してください。


Phase 1: 検出

推奨内容を提示する前に、次のコマンドを実行してプロジェクトを把握してください。

# 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|pyramid" \
  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

# OpenTelemetry tracing — check for SDK + instrumentations
grep -rE "opentelemetry-sdk|opentelemetry-instrumentation|opentelemetry-distro" \
  requirements.txt pyproject.toml 2>/dev/null
grep -rn "TracerProvider\|trace\.get_tracer\|start_as_current_span" \
  --include="*.py" 2>/dev/null | head -5

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

確認する項目:

  • sentry-sdk は requirements にすでに含まれていますか?含まれている場合は、sentry_sdk.init() が存在するか確認してください。機能設定だけで済む可能性があります。
  • 使用しているフレームワークは何ですか?(sentry_sdk.init() を配置する場所が決まります。)
  • 使用しているタスクキューは何ですか?(Celery では 2 つのプロセスでの初期化が必要です。RQ では設定ファイルが必要です。)
  • AI ライブラリを使用していますか?(OpenAI、Anthropic、LangChain は自動計装されます。)
  • OpenTelemetry トレーシングを使用していますか?(ネイティブトレーシングではなく、OTLP 経由の方法を使用してください。)
  • 併用するフロントエンドはありますか?(Phase 4 の相互リンクが必要になります。)

Phase 2: 推奨

確認した内容に基づいて、具体的な提案を提示してください。漠然とした質問をするのではなく、推奨事項を先に示してください。

OTel 検出結果に基づく方法:

  • OTel トレーシングを検出(requirements に opentelemetry-sdk / opentelemetry-distro がある、またはソースに TracerProvider がある)→ OTLP 経由の方法を使用します:OTLPIntegration()。traces_sample_rate は設定しないでください。Sentry はエラーを OTel トレースに自動で関連付けます。

常に推奨(基本的なカバレッジ):

  • ✅ エラー監視 — 未処理の例外を捕捉し、ExceptionGroup(Python 3.11 以降)をサポートします
  • ✅ ログ記録 — Python の標準ライブラリ logging を自動で捕捉します。Loguru が検出された場合は機能が強化されます

検出された場合に推奨:

  • ✅ トレーシング — HTTP フレームワーク(Django/Flask/FastAPI など)が検出された場合
  • ✅ AI 監視 — OpenAI/Anthropic/LangChain などが検出された場合(自動計装され、設定不要です)
  • ⚡ プロファイリング — パフォーマンスが重要な本番アプリ向けです。OTLP 経由の方法では利用できません
  • ⚡ Cron — Celery Beat、APScheduler、または cron のパターンが検出された場合
  • ⚡ メトリクス — ビジネス KPI や SLO の追跡向けです

推奨マトリックス:

機能次の場合に推奨参照
エラー監視常に — 必須の基本機能${SKILL_ROOT}/references/error-monitoring.md
OTLP インテグレーションOTel トレーシングが検出された場合 — ネイティブトレーシングを置き換えます${SKILL_ROOT}/references/tracing.md
トレーシングDjango/Flask/FastAPI/AIOHTTP などが検出された場合。OTel トレーシングが検出された場合は省略してください${SKILL_ROOT}/references/tracing.md
プロファイリング本番環境で、パフォーマンスが重視されるワークロードの場合。OTel トレーシングが検出された場合は省略してください(traces_sample_rate が必要で、OTLP とは互換性がありません)${SKILL_ROOT}/references/profiling.md
ログ記録常に(標準ライブラリ)。Loguru では機能が強化されます${SKILL_ROOT}/references/logging.md
メトリクスビジネスイベントまたは SLO の追跡が必要な場合${SKILL_ROOT}/references/metrics.md
CronCelery Beat、APScheduler、または cron のパターンがある場合${SKILL_ROOT}/references/crons.md
AI 監視OpenAI/Anthropic/LangChain などが検出された場合${SKILL_ROOT}/references/ai-monitoring.md

OTel トレーシングを検出: 「プロジェクトで OpenTelemetry トレーシングが使われているようです。既存の OTel セットアップを利用した Sentry の OTLP インテグレーションによるトレーシングと、エラー監視、Sentry ログ記録[該当する場合は、メトリクス/Cron/AI 監視も]をおすすめします。進めてもよいですか?」

OTel なし: 「エラー監視とトレーシング[該当する場合はログ記録も]をおすすめします。プロファイリング、Cron、AI 監視も追加しますか?」


Phase 3: ガイド

インストール
# 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]"

追加パッケージは任意です。すべてのフレームワークで通常の sentry-sdk が動作します。追加パッケージをインストールすると、補完パッケージもインストールされます。

クイックスタート — 推奨される初期化方法

妥当なデフォルト値で多くの機能を有効にする完全な初期化です。アプリやフレームワークのコードより前に配置してください。

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. "[email protected]"
    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,
)
フレームワークごとの初期化場所
フレームワークsentry_sdk.init() の呼び出し場所備考
Djangosettings.py の先頭、他のインポートより前ミドルウェアは不要です。Sentry が内部で Django にパッチを適用します
Flaskapp = Flask(__name__) より前アプリの作成より前に配置する必要があります
FastAPIapp = FastAPI() より前StarletteIntegration と FastApiIntegration が同時に自動で有効になります
Starletteapp = Starlette(...) より前FastAPI と同じ自動統合です
AIOHTTPweb.Application() より前のモジュールレベル
Tornadoアプリのセットアップより前のモジュールレベル統合クラスは不要です
Quartapp = Quart(__name__) より前
Falconapp = falcon.App() より前のモジュールレベル
Pyramidconfig = Configurator() より前のモジュールレベルWSGI フレームワークです
Sanic@app.listener("before_server_start") の中Sanic のライフサイクルでは非同期の初期化が必要です
Celeryワーカー内と呼び出し元プロセス内の両方で @signals.celeryd_init.connect2つのプロセスでの初期化が必要です
RQワーカーが rq worker -c mysettings で読み込む mysettings.py
ARQワーカーモジュールとエンキューするプロセスの両方

Django の例(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 の例(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()
自動で有効になる統合と明示的な指定が必要な統合

ほとんどの統合は、対応パッケージがインストールされると自動的に有効になります。integrations=[...] の指定は不要です。

自動で有効明示的な指定が必要
Django、Flask、FastAPI、Starlette、AIOHTTP、Tornado、Quart、Falcon、Pyramid、Sanic、BottleDramatiqIntegration
Celery、RQ、Huey、ARQGRPCIntegration
SQLAlchemy、Redis、asyncpg、pymongoStrawberryIntegration
Requests、HTTPX、httpx2、aiohttp-clientAsyncioIntegration
OpenAI、Anthropic、LangChain、Pydantic AI、MCPOpenTelemetryIntegration
Python の logging、LoguruWSGIIntegration / ASGIIntegration
合意された各機能について

機能を1つずつ順に進めてください。リファレンスを読み、その手順に従い、次に進む前に動作を確認してください。

機能リファレンスファイル次の場合に読み込む
エラー監視${SKILL_ROOT}/references/error-monitoring.md常に(基本)
トレーシング${SKILL_ROOT}/references/tracing.mdHTTP ハンドラー/分散トレーシング
プロファイリング${SKILL_ROOT}/references/profiling.md本番環境でパフォーマンスが重要な場合
ロギング${SKILL_ROOT}/references/logging.md常に。Loguru では機能が強化されます
メトリクス${SKILL_ROOT}/references/metrics.mdビジネス KPI/SLO の追跡
Cron${SKILL_ROOT}/references/crons.mdスケジューラー/Cron のパターンが検出された場合
AI 監視${SKILL_ROOT}/references/ai-monitoring.mdAI ライブラリが検出された場合

各機能について:Read ${SKILL_ROOT}/references/<feature>.md を読み、手順に正確に従って、動作を確認してください。


設定リファレンス

sentry_sdk.init() の主なオプション
オプション型デフォルト目的
dsnstrNone空の場合は SDK が無効になります。環境変数:SENTRY_DSN
environmentstr"production"例:"staging"。環境変数:SENTRY_ENVIRONMENT
releasestrNone例:"[email protected]"。環境変数:SENTRY_RELEASE
send_default_piiboolFalseIP、ヘッダー、Cookie、認証ユーザー、クエリ文字列(ASGI フレームワーク)を含めます
traces_sample_ratefloatNoneトランザクションのサンプリングレート。None の場合、トレースは無効になります
traces_samplerCallableNoneトランザクションごとのカスタムサンプリング(レートを上書きします)
profile_session_sample_ratefloatNone継続的プロファイリングのセッションレート
profile_lifecyclestr"manual""trace" = スパンとともにプロファイラーを自動起動します
profiles_sample_ratefloatNoneトランザクションベースのプロファイリングレート
enable_logsboolFalseログを Sentry に送信します(SDK ≥ 2.35.0)
sample_ratefloat1.0エラーイベントのサンプリングレート
attach_stacktraceboolFalsecapture_message() にスタックトレースを付加します
max_breadcrumbsint100イベントごとのパンくずの最大数
debugboolFalseSDK の詳細なデバッグ出力
before_sendCallableNoneエラーイベントを変更または破棄するフック
before_send_transactionCallableNoneトランザクションイベントを変更または破棄するフック
ignore_errorslist[]抑制する例外の型または正規表現パターン
auto_enabling_integrationsboolTrueすべての自動検出を無効にするには False に設定します
OTLPIntegration のオプション(コンストラクターに渡します)
オプション型デフォルト目的
setup_otlp_traces_exporterboolTrueOTLP エクスポーターを自動設定します。独自の Collector に送信する場合は False に設定します
collector_urlstrNoneOTel Collector の OTLP HTTP エンドポイント(例:http://localhost:4318/v1/traces)。設定すると、スパンは Sentry に直接送信されず、Collector に送信されます
setup_propagatorboolTrue分散トレース用の Sentry プロパゲーターを自動設定します
capture_exceptionsboolFalseOTel の Span.record_exception で記録された例外を捕捉します
環境変数
変数対応先備考
SENTRY_DSNdsn
SENTRY_RELEASEreleasegit SHA、Heroku、CircleCI、CodeBuild、GAE からも自動検出されます
SENTRY_ENVIRONMENTenvironment
SENTRY_DEBUGdebug

検証

Sentry がイベントを受信していることをテストします。

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

または、クラッシュしない確認を行う場合:

sentry_sdk.capture_message("Sentry Python SDK test")

何も表示されない場合:

  1. sentry_sdk.init() で debug=True を設定します。SDK の内部情報が標準出力に表示されます
  2. DSN が正しいことを確認します
  3. 実行中のプロセスで SENTRY_DSN 環境変数が設定されていることを確認します
  4. Celery/RQ の場合:init が呼び出し元のプロセスだけでなく、ワーカープロセスでも実行されることを確認します

フェーズ 4:相互リンク

Python の設定が完了したら、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"'

Sentry が設定されていないフロントエンドがある場合は、対応するスキルを提案します。

検出されたフロントエンド提案するスキル
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue / Nuxt@sentry/vue を使用します。docs.sentry.io/platforms/javascript/guides/vue/ を参照してください
その他の JS/TSsentry-react-sdk(一般的なブラウザー JS のパターンをカバーします)

トラブルシューティング

問題解決方法
イベントが表示されないdebug=True を設定し、DSN を確認し、実行中のプロセス内の環境変数を確認します
DSN の形式が正しくないというエラー形式:https://<key>@o<org>.ingest.sentry.io/<project>
Django の例外がキャプチャされないsentry_sdk.init() が、ほかのインポートより前に settings.py の先頭にあることを確認します
Flask の例外がキャプチャされないapp = Flask(__name__) より前に初期化する必要があります
FastAPI の例外がキャプチャされないapp = FastAPI() より前に初期化します。StarletteIntegration と FastApiIntegration はどちらも自動的に有効になります
ASGI の連鎖した例外が抑制されるデフォルトでは、Sentry の ASGI ミドルウェアは例外チェーンを取り除きます(raise exc from None)。連鎖した例外を保持するには、sentry_sdk.init() で _experiments={"suppress_asgi_chained_exceptions": False} を設定します
Celery タスクのエラーがキャプチャされないceleryd_init シグナルを使って、ワーカープロセスで sentry_sdk.init() を呼び出す必要があります
Sanic の初期化が機能しないモジュールレベルではなく、@app.listener("before_server_start") 内で初期化する必要があります
uWSGI でキャプチャされないuWSGI のコマンドに --enable-threads --py-call-uwsgi-fork-hooks を追加します
トレースが表示されない(ネイティブ)traces_sample_rate が設定されている(None ではない)ことを確認し、インテグレーションが自動的に有効になっているか確認します
トレースが表示されない(OTLP)sentry-sdk[opentelemetry-otlp] がインストールされていることを確認します。OTLPIntegration の使用時に traces_sample_rate を設定しないでください
プロファイリングが開始されないtraces_sample_rate > 0 に加え、profile_session_sample_rate または profiles_sample_rate が必要です。OTLP 経由の経路とは互換性がありません
enable_logs が機能しないSDK ≥ 2.35.0 が必要です。構造化ログを直接使う場合は sentry_sdk.logger を使用し、標準ライブラリとの連携には LoggingIntegration(sentry_logs_level=...) を使用します
トランザクションが多すぎるtraces_sample_rate を下げるか、traces_sampler を使ってヘルスチェックを除外します
リクエスト間でデータが漏れるリクエストごとのデータに get_global_scope() を使用しないでください。get_isolation_scope() を使用します
クエリ文字列がキャプチャされない(ASGI)ASGI フレームワーク(FastAPI、Starlette など)でクエリ文字列とクライアント IP を取得するには、send_default_pii=True が必要です
RQ ワーカーが報告しないRQ 独自の Sentry ショートカットを無効にするには --sentry-dsn="" を渡し、代わりに設定ファイル経由で初期化します

コメント