generated at
sentry-sdk
SentryPython向けSDKについて

PyPI
sentry-sdk · PyPI 新しいsdk

sentry_sdk
2018/08/21 - ver 0.1.0
2020/03/20 - ver 0.14.3
2020/08/05 - ver 0.16.3
2021/02/18 - ver 0.20.0
2021/05/04 - ver 1.0.0
2021/12/13 - ver 1.5.1
sentry_sdk.init() すれば自動的にエラー等を捕まえてくれる
Django と統合、logging と統合、といったインテグレーションはオプションで指定する
色々なコードに patch して情報を取得しているようだ
PII (Personaly Identifiable Information) の送信制御を指定できる
送信制御できるのはエラー時のみ(ver 0.16.3)で、APMはサービス側でフィルタする
WARNING,ERRORだけどSentryに送りたくないログもここでフィルタする

設定例
Djangoの場合
python
import sentry_sdk.utils sentry_sdk.utils.MAX_STRING_LENGTH = 2048 # monkey patch first # see https://github.com/getsentry/sentry-python/issues/614 import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration def strip_sensitive_data(event, hint): # エラーハンドリング時(loggerのwarning以上か、例外発生時)に呼ばれる。 # eventに送信するデータがJSONで格納されている return event sentry_sdk.init( release=__version__, dsn="<your dsn>", integrations=[ DjangoIntegration(), # Djangoの場合 ], _experiments={ # "auto_enabling_integrations": True, # see https://github.com/getsentry/sentry-python/pull/503 "record_sql_params": True, # Disabled by default with memory issue }, # If you wish to associate users to errors (assuming you are using # django.contrib.auth) you may enable sending PII data. send_default_pii=True, # for APM. be sure to lower this in production to prevent quota issues traces_sample_rate=0.1, # 10回に1回送信する # filter data for non transactions before_send=strip_sensitive_data, )

send-default-pii について
ログインしているユーザー情報(ユーザー名やid値など)などをSentryに送りたい
emailアドレスなども送られるが、Sentryサーバー側でフィルタしてから保持してくれる設定もある
Trueにしつつも、どうしても送りたくないデータなどは before_send コールバック関数で処理できる

before_send について
エラー時に呼ばれる(APM用途には呼ばれない)
イベントにタグを付けたり、データを削除したりできる

traces_sample_rate について
1日10,000回APIアクセスのあるサービスの場合
無料プランの 50K/月 に収めるには traces_sample_rate = 0.16 以下に設定する
50000 / (10000 * 30) = 0.166....
10000回アクセスは、1日8時間に同時利用3.5人程度の想定
画面操作や非同期のAPI呼び出しが1人あたり1分間に6回あると仮定
10000 / 8h / 60m / 6 = 3.47
開発中や動作検証で使う分には無料プランで十分そう

sentry_sdk.integrations.django.DjangoIntegration について

sentry_sdk.integrations.logging.LoggingIntegration について
Sentryはデフォルトでloggerの情報をハンドリングしいる
INFOレベル以上のログはエラー時に添付している(レベル変更可能)
ERRORレベル以上をエラー監視対象としている(レベル変更可能)
添付されたログをすべて、エラーハンドリング時のBreadcrumbに表示してくれる
Errorの前に実行されたSQLだけでなく、logger.infoの出力も(設定でdebugも)Breadcrumbsに表示されるので、問題発生に至る状況を把握しやすい


_experiments={"record_sql_params": True} について
現在の sentry-sdk==0.16.3 はデフォルトでSQLのパラメータ値をSentryに送らない
巨大なデータを送ろうとしてメモリを圧迫する問題があるためらしい
とはいえ、SQLパラメータ値が分からないと追跡が難しくなるため、Trueに設定しておく
使っていて問題が起きたらFalseにすればいいか...

MAX_STRING_LENGTH = 2048 パッチについて
sentry_sdk.utils.MAX_STRING_LENGTH = 2048
デフォルト値の512だと、長いクエリは途中で切ってからSentryに送られるため

より細かく制御するには
Sentryに送る情報をコントロールできるが、view関数などにそのためのwithブロックを実装したりが必要