Sentry
アプリで起きた例外をスタックトレース付きで集め、発生源を特定するエラー追跡サービス
分野「監視・可観測性」:動いているものの様子を知り、壊れたら気づく。 この分野で最初に触るツールとして挙げている。 分野の役割とつながりは分野の解説へ。
別名:sentry.io、Sentry SDK、セルフホスト Sentry
できること
- アプリの例外を収集・追跡する :ユーザー側で起きたエラーを知りたい
- 指標を監視し異常を通知する :落ちたらすぐ知りたい
- ログを集約して検索する :何が起きたか後から追いたい
Sentry ができないこと
- サーバーの CPU・メモリ・ディスクなどインフラ指標の監視(ホストにエージェントを置く製品ではない)
- 無料プランでの複数人利用(Developer プランは 1 ユーザー)
- 月 5,000 件を超えるエラーの無料での受信(超過分は受け付けられず捨てられる)
- 30 日より前のイベントの参照(Developer プラン。Team でも最長 90 日)
- セルフホスト版を Sentry と競合するサービスとして他者に提供すること(FSL ライセンス)
制約
先頭の行が、このツールで最も先に当たる制約。値はすべて出典の一次情報で確認したもの。
| 項目 | 値 | 影響 | 出典 | 検証日 |
|---|---|---|---|---|
| 無料プランのエラーイベント数 (主要制約) | 5,000 errors / 月(Developer)。ほかに 5M spans、50 replays、1 ユーザー、cron・uptime モニタ各 1 | 例外を投げ続けるループが 1 つあると数時間で月枠を使い切り、以降のエラーは受け付けられない。SDK 側でサンプリングと重複抑制を入れる | sentry.io | |
| データ保持期間 | 30 日(Developer)、最長 90 日(Team) | 過去のエラー傾向を長期で追う用途には使えない。必要なら外部にエクスポートする | sentry.io | |
| イベント 1 件のペイロード上限 | 圧縮 200 KB / 展開後 1 MB。超過は 413 で即時破棄 | 巨大なリクエストボディやコンテキストを添付すると、エラーそのものが届かない。添付は別枠(Attachments 1 GB)に載せる | docs.sentry.io | |
| プロジェクトキー単位のレート制限 | Business / Enterprise プランのみ設定可。超過したイベントは 429 で落とされる | Developer / Team では自前でレート制限を設けられず、クォータ消費の抑制は SDK 側のサンプリングとスパイク保護に頼ることになる | docs.sentry.io | |
| スパイク保護の発動条件 | 直近 7 日間の毎時データから閾値を算出し、超過分を破棄。閾値はスパイク中 1 時間ごとに再計算 | 課金の暴発は防げるが、障害時に一番見たいイベントが捨てられる。発動時は Sentry の件数を実数と見なさない | docs.sentry.io | |
| セルフホスト版のライセンス | FSL-1.1-Apache-2.0。競合サービスとしての提供を禁止し、各リリースは 2 年後に Apache 2.0 へ移行 | 自社内でのセルフホストは可能だが、Sentry 互換の監視サービスを他者に提供する用途には使えない | github.com |
典型的な落とし穴
- ソースマップをアップロードしないと、minify された JavaScript のスタックトレースが読めず、発生箇所が分からない
- 同じ例外を毎回送るとクォータを食う。SDK の sampleRate や beforeSend でノイズ(ブラウザ拡張の例外、ネットワーク断)を捨てる
- 環境(development / staging / production)を分けないと、開発中のエラーが本番のクォータを消費する
- リクエストボディやユーザー情報が既定で送られる設定がある。個人情報の送信有無とデータスクラビングを最初に確認する
コスト
- 課金モデル
- 無料枠あり
- 跳ねる条件
Developer プランは無料だが 1 ユーザー・5,000 errors / 月。Team は $26 / 月から(年払い)。課金が跳ねるのはエラー件数より Span(トレース)と Replay で、Logs / Metrics は超過 $0.50 / GB
- 出典
- sentry.io 検証
代替手段と差分
| 代替 | 何が違うか |
|---|---|
| Datadog | Datadog はインフラ・ログ・APM・エラーを一つに集約するがホスト単位課金で高い。エラー追跡だけが目的なら Sentry のほうが安く、SDK も軽い |
| Prometheus + Grafana | Prometheus + Grafana は数値の時系列(メトリクス)を扱い、例外のスタックトレースは収集しない。「落ちたか」は Prometheus、「なぜ落ちたか」は Sentry |
このツールを代替として挙げているページ: Datadog 、Prometheus + Grafana
選定判断
「ユーザー側で起きた例外を、どのコードのどの行で起きたかまで知りたい」では第一候補。無料枠で一人で始められる。インフラ指標やログの集約まで一つで賄いたい場合は Datadog、費用をかけずメトリクスだけ見たい場合は Prometheus + Grafana へ。ただしどちらも例外追跡の代替にはならない
アプリケーションに SDK を組み込み、発生した例外をスタックトレース・リクエスト情報・ブレッドクラム(直前の操作履歴)とともに送信する。同種の例外は「イシュー」にまとめられ、初回・最終発生、影響ユーザー数、リリースとの対応が追える。対応言語は JavaScript、Python、Go、Java、モバイルまで広い。
最初に当たる制約は無料プランの「5,000 errors / 月」で、次が「1 ユーザー」である。前者はバグ 1 件で使い切ることがあり、SDK 側のサンプリングとフィルタが前提になる。チームで見るには Team プランが必要になり、そこからは Span と Replay の消費量が費用を決める。