Sentryの「盲点」を突く:AdBlockerを回避し、オブザーバビリティを100%に引き上げる「トンネリング」実装術
現場のテックリードとして断言する。「計測できないものは改善できない」。
しかし、現代のWeb開発において、我々の監視網は常に脅威に晒されている。それが「AdBlocker」や「プライバシー保護拡張機能」だ。彼らは`sentry.io`への通信を機械的に遮断する。結果、最も重要なクリティカルエラーが闇に葬られ、ユーザーからの「なんか動かない」という曖昧な報告を、再現性のないログと睨めっこしながらデバッグする羽目になる。
今日は、Sentryの通信を自社ドメイン経由でプロキシする「トンネリング」を実装し、AdBlockerの影響をゼロにする、現場のエンジニアが今すぐ導入すべき「極限の知見」を共有する。
—
1. なぜAdBlockerはSentryを「悪」と見なすのか
AdBlockerは、URLのパターンマッチングで通信をフィルタリングしている。SentryのSDKはデフォルトで `sentry.io` のエンドポイントを叩くが、これが「トラッキングツール」のブラックリストに登録されているため、クライアントサイドで即座に破棄される。
これを回避する唯一にして最強の手法が、「自社ドメイン経由のトンネリング」だ。
実装のメカニズム
1. クライアント: エラー発生時、`https://api.yourdomain.com/sentry` へ送信。
2. リバースプロキシ: NginxやCloudflare Workersで受信し、`https://sentry.io/` へリレーする。
3. Sentry: 送信元が自社ドメインであるため、AdBlockerはこれを「自社API」と誤認して素通りさせる。
—
2. 実践:Cloudflare Workersを用いたトンネリング設定
Nginxを立てるのもいいが、運用コストを考えればCloudflare Workersによるエッジでのリレーが最強だ。
// worker.js: Sentryトンネリング用プロキシ
const SENTRY_HOST = ‘o123456.ingest.sentry.io’; // あなたのSentryホスト
addEventListener(‘fetch’, event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// SentryのプロジェクトIDを抽出して送信先を組み立てる
const sentryUrl = `https://${SENTRY_HOST}${url.pathname}${url.search}`;
const modifiedRequest = new Request(sentryUrl, {
method: request.method,
headers: request.headers,
body: request.body,
});
// 重要: プロキシ経由であることを示すヘッダーを付与
modifiedRequest.headers.set(‘X-Forwarded-For’, request.headers.get(‘cf-connecting-ip’));
return fetch(modifiedRequest);
}
—
3. Sentry SDK側の必須設定(ベストプラクティス)
SDKの設定を一行追加するだけで、トンネリングは完了する。
Sentry.init({
dsn: ‘…’,
// トンネリング先のパスを指定
tunnel: ‘/sentry-tunnel’,
// 個人情報(IPアドレス等)を削ぎ落としつつ、トレース精度を保つ
sendDefaultPii: false,
tracesSampleRate: 0.1, // 本番環境ではサンプリングが鉄則
});
—
4. 現場のテックリードが教える「Sentry運用」の極意
① チーム開発を加速させる「設定共有化ルール」
設定ファイル(`sentry.config.js`)はGit管理し、環境変数 `SENTRY_ENVIRONMENT` をCI/CDパイプラインで自動注入せよ。
- NG: ローカル環境でエラーが飛び交い、Sentry上の「Issue」がノイズまみれになる。
- OK: `beforeSend` フックで、`localhost` や `development` 環境のエラーをフィルタリングするロジックを共通化する。
② 開発速度を上げるキーボードショートカット
SentryのUIでマウスを触るな。
- `Cmd + K` (Mac) / `Ctrl + K` (Win): コマンドパレットの起動。プロジェクト切り替え、Issue検索が爆速になる。
- `J` / `K`: Issue一覧の前後移動。これだけでレビュー効率が2倍になる。
③ 導入すべき「神プラグイン」
- GitHub Integration: Issueから直接PRを作成し、修正後に自動クローズ。これを使わない手はない。
- Slack Integration: 閾値を超えたエラーのみを通知させるフィルタ設定を徹底せよ。全ての警告はノイズである。
—
5. 結論:オブザーバビリティは「信頼」である
トンネリングを導入することで、計測の穴は埋まる。しかし、真のオブザーバビリティは、「どのエラーがビジネスインパクトを持つのか」をエンジニアが理解することで完成する。
今回紹介した手法は、いわば「土台」だ。この土台の上に、適切なアラート設定と、チームの「エラーを放置しない文化」を乗せてほしい。
「計測できないものは改善できない。だが、計測していると信じていたものが『欠損』していたら、それは最も致命的なバグだ」
さあ、今日の設定変更で、君たちのプロジェクトの「完全な可視化」を実現しよう。