Raven: Sentry統合
DrupalをSentry(オープンソースのアプリケーション監視およびエラートラッキングプラットフォーム)と統合します。
raven
インストール
composer require 'drupal/raven:^7.3'
概要
Ravenモジュールは、オープンソースのアプリケーション監視およびエラートラッキングプラットフォームであるSentryとの包括的な統合を提供します。Drupalのログメッセージ、PHPの致命的エラー、JavaScriptエラー、Drushコマンドの例外をキャプチャし、各イベントに対して完全なスタックトレースとカスタマイズ可能なメタデータを提供します。
このモジュールはSentryのパフォーマンストレーシングをサポートし、Drupalが処理する各リクエスト/レスポンスのトランザクションイベントを作成します。HTTPクライアントリクエスト、データベースクエリ、Twigテンプレートのスパンも含まれます。sentry-trace HTTPヘッダーをリクエストと共に送信することで、サービス間の分散トレーシングを可能にします。
Sentry構造化ログもサポートされています。これらの軽量ログはスタックトレースを持たず、リクエストの最後に一度だけ送信されます。このモジュールはContent Security Policyレポート用にCSPモジュールおよびSecurity Kitモジュールと統合し、センサーステータス変更用にMonitoringモジュールとも統合します。
Features
- 設定可能な重大度レベル(Emergency、Alert、Critical、Error、Warning、Notice、Info、Debug)でDrupalログメッセージをキャプチャ
- メモリ制限超過などの致命的PHPエラーを処理
- ユーザー権限制御付きのSentry JavaScript SDKを介してJavaScriptエラーをキャプチャ
- Drushコマンドでスローされた例外をキャッチ
- 各イベントに対して完全なスタックトレースとカスタマイズ可能なメタデータを提供
- 設定可能なサンプルレートでリクエスト/レスポンスのパフォーマンストレーシング
- オプションのクエリ引数付きデータベースクエリパフォーマンストレーシング
- Twigテンプレートパフォーマンストレーシング
- Interaction to Next Paint(INP)スパン付きブラウザパフォーマンストレーシング
- sentry-trace HTTPヘッダーによるサービス間分散トレーシング
- 軽量ロギング用のSentry構造化ログサポート
- CSPモジュール統合によるContent Security Policy(CSP)レポート処理
- CSPおよびCertificate Transparency レポート用のSecurity Kitモジュール統合
- センサーステータス変更用のMonitoringモジュール統合
- 設定可能なモニタースラグ付きCron監視
- Sentryプロファイリングサポート(Excimer PHP拡張が必要)
- 広告ブロッカーを回避したり非公開Sentryサーバーに到達するためのリクエストトンネリング
- JavaScript例外に対するユーザーフィードバックダイアログ
- DSN、環境、リリース設定用の環境変数サポート
- リクエストごとのログイベントレート制限
- SentryリクエストのHTTP圧縮
- Monologモジュール統合サポート
Use Cases
本番サイトのエラートラッキング
Sentry DSNを設定し、すべてのPHPエラーと例外をキャプチャするために適切なログレベル(通常Error、Critical、Alert、Emergency)を有効にします。メモリ制限超過などの致命的エラーをキャッチするために致命的エラーハンドラーを有効にします。フロントエンドエラーを追跡するために認証済みユーザーに「JavaScriptエラーをSentryに送信」権限を付与します。
パフォーマンス監視
リクエスト/レスポンスパフォーマンストレーシングを有効にし、traces_sample_rateを設定します(例:リクエストの10%の場合0.1)。詳細なスパンのためにデータベーストレーシングとTwigトレーシングを有効にします。フロントエンドパフォーマンスデータのためにbrowser_traces_sample_rateを設定します。マイクロサービス間の分散トレーシングを有効にするためにトレース伝播ターゲットを使用します。
開発とデバッグ
開発中の包括的なロギングのためにNotice、Info、Debugを含むすべてのログレベルを有効にします。設定を確認するために管理ページのテストボタンを使用します。Sentry SDKからの詳細なデバッグ出力を確認するには「drush --debug raven:captureMessage」を実行します。
Cron監視
SentryダッシュボードでCronモニターを作成し、Raven設定でモニタースラグを設定します。モジュールはCron実行の開始時と終了時に自動的にチェックインイベントを送信し、Cronの健全性と実行時間を監視できます。
トンネリングによる広告ブロッカー回避
エラートンネリングを有効にして、/raven/tunnelでウェブサイトを経由してSentryリクエストをルーティングします。これにより、広告ブロッカーがSentryリクエストをブロックするのを防ぎ、公開アクセスできないSentryサーバーへのアクセスを可能にします。
ユーザーフィードバック収集
「ユーザーフィードバックダイアログを表示」を有効にして、JavaScript例外が発生したときにユーザーに追加情報の入力を求めます。カスタムSentryサーバーを使用している場合は、CSPルールが正しく設定されるようにエラー埋め込みURLを設定します。
プライバシーを考慮したエラートラッキング
個人を特定できる情報の収集を避けるため、「ユーザーデータをSentryに送信」と「エンドユーザーIPアドレスをキャプチャ」を無効のままにします。ignored_channelsを使用して「access denied」と「page not found」ログをフィルタリングします。OptionsAlterイベントを介してカスタムbefore_sendコールバックを実装し、機密データをスクラブします。
Tips
- 異なるデプロイメント環境には環境変数(SENTRY_DSN、SENTRY_ENVIRONMENT、SENTRY_RELEASE)を使用してください
- 本番環境では過剰なデータ収集を避けるために低いtraces_sample_rate(例:0.01-0.1)を設定してください
- スタックトレースなしの軽量ロギングには構造化ログを有効にしてください
- OptionsAlterイベントを使用してカスタムインテグレーション、コールバック、またはignore_exceptionsリストを設定してください
- コード内でSentry::configureScope()またはSentry::withScope()を使用してカスタムコンテキストを追加してください
- raven/ravenライブラリへの依存関係により、Sentry JavaScript SDKがカスタムスクリプトより先に読み込まれることが保証されます
- SDK通信の問題をトラブルシュートするにはdrush --debug raven:captureMessageを使用してください
Technical Details
Admin Pages 1
/admin/config/development/logging
Ravenモジュールはコアのロギングとエラー設定ページに設定を追加します。このページでは、DSN設定、エラー処理、パフォーマンストレーシング、各種統合など、Sentry統合のすべての側面を設定できます。
権限 3
Hooks 6
hook_page_attachments
JavaScriptエラートラッキング権限を持つユーザー用にページにJavaScriptライブラリとSentry設定をアタッチします。
hook_cron
Cronモニタースラグが設定されている場合、Sentryにチェックインイベントを送信してCron監視を実装します。
hook_form_system_logging_settings_alter
コアのロギングとエラー設定ページにSentry設定フォーム要素を追加します。
hook_help
admin/help/ravenのモジュールヘルプページ用のヘルプテキストを提供します。
hook_monitoring_run_sensors
有効な場合、Monitoringモジュールのセンサーステータス変更をSentryに送信します。
hook_requirements
cURL拡張、Sentry PHP SDK、Zlib拡張、Excimer拡張をチェックします。ステータスレポートページにSentry設定ステータスを報告します。
Drush Commands 2
drush raven:captureMessage
Sentryにテストメッセージを送信します。Sentry設定の確認に便利です。
drush raven:captureLog
Sentryに構造化ログアイテムを送信します。構造化ログ機能をテストします。
Troubleshooting 6
サイトの状態ページ(admin/reports/status)でSentry設定ステータスとエラーを確認してください。DSNが正しいことを確認してください。「PHPテストメッセージをSentryに送信」ボタンをクリックしてデバッグ出力を確認してください。適切なログレベルが有効になっていることを確認してください。
ユーザーが「JavaScriptエラーをSentryに送信」権限を持っていることを確認してください。ブラウザコンソールでSentry SDKエラーまたはHTTPステータスコードを確認してください。JavaScript DSNが設定されていることを確認してください。広告ブロッカーがリクエストをブロックしていないか確認してください(トンネリングの有効化を検討)。
rate_limit設定を構成してリクエストごとのイベント上限を設定してください。ignored_channelsを使用して「access denied」や「page not found」などのノイズの多いログチャンネルをフィルタリングしてください。OptionsAlterイベントを介してbefore_sendコールバックを実装してイベントをフィルタリングしてください。
「スタックトレースでのリフレクショントレーシング」、「リクエストボディをSentryに送信」、「データベースパフォーマンストレーシングクエリ引数」を無効にしてください。モジュールはパスワードフィールドを自動的にサニタイズします。追加のスクラブにはカスタムbefore_sendコールバックを実装してください。
ユーザーが「パフォーマンストレースをSentryに送信」権限を持っていることを確認してください。traces_sample_rateが0より大きい値に設定されていることを確認してください。request_tracingが有効になっていることを確認してください。キャッシュされたページはトレースされないことに注意してください。
CSPモジュールを使用している場合は、レポーティングハンドラーとして「Sentry」を選択してください。Security Kitを使用している場合は、「セキュリティヘッダーレポートをSentryに送信」を有効にしてください。適切に設定されていれば、モジュールは自動的にCSPディレクティブを調整します。
Security Notes 6
- リフレクショントレーシングはスタックトレースで関数引数を公開し、パスワードやトークンなどの機密データが含まれる可能性があります
- リクエストボディをSentryに送信すると、パスワードや個人情報を含むフォームデータが公開される可能性があります
- クエリ引数付きのデータベーストレーシングはデータベースに保存された機密データを公開する可能性があります
- ユーザーデータ(メール、ユーザー名、IPアドレス)設定はGDPRコンプライアンスのために慎重に検討する必要があります
- モジュールはリクエストデータのパスワードフィールドを自動的にサニタイズしますが、カスタムの機密フィールドには追加の設定が必要です
- トンネリングを使用する場合、トンネルエンドポイントはJavaScriptエラー権限を持つユーザーからのPOSTリクエストを受け入れるため、適切なアクセス制御を確保してください