Sentry 20.x JavaScript SDKの設計と実装ガイド

SDK開発について

Sentry 20.xのJavaScript SDKの設計と実装に関する重要なポイントを以下に説明します。このガイドは、イベント送信プロトコルやクライアントの動作原則をカバーしています。

SDKの作成

SDKの中心部分は、アプリケーション内の異常状態に関するデータを取得するための一連のユーティリティです。このデータを使用してJSONペイロードが構築され、Sentryサーバーに送信されます。

生産環境で使用される予定のSDKには以下の機能が含まれます:

  • DSN設定
  • グレースフルなエラー処理(例:Sentryサーバーへの到達不能)
  • 属性設定(例:タグや追加データ)
  • Linux、Windows、OS Xのサポート(該当する場合)

次のケースでは機能ベースのサポートが必要です:

  • Cookieデータが利用可能の場合でもデフォルトでは送信しない
  • POSTデータがある場合でもデフォルトでは送信しない

さらに推奨される機能として:

  • 自動エラーキャプチャ(例:未捕獲例外ハンドラ)
  • ログフレームワーク統合
  • 非ブロッキングイベント送信
  • コンテキストデータ補助(例:現在のユーザーの設定、ログ記録)
  • イベントサンプリング
  • SentryのHTTP 429 Retry-Afterヘッダーを尊重
  • 事前/事後イベント送信フック
  • 可能なプラットフォームでのスタックトレース内ローカル変数値
  • 各イベントに対してenvironmentを送信

最終ユーザの使用方法

最終ユーザがSDKを使用する際の基本ステップは以下の通りです:

  1. SDKの初期化:

Sentry.init({dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'});

  1. イベントのキャプチャ:

let eventId = Sentry.captureException(myError);

  1. イベント結果の使用:

alert(Your error was recorded as ${eventId});

initメソッドは複数の設定方法を受け入れるべきです。最初のパラメータは常にDSN値であるべきです。

DSNの解析

SDKは任意のオプションを受け入れる構造子を持つことが推奨されますが、最初のパラメータは必ずDSN文字列であるべきです。

const sentryConfig = { dsn: 'https://public@sentry.example.com/1', otherOption: 'value' }; Sentry.init(sentryConfig);

これにより以下が設定されます:

  • URI = https://sentry.example.com
  • Public Key = public
  • Project ID = 1

純粋なJSONペイロードのPOSTリクエストは以下のように送信されます:

'https://sentry.example.com/api/1/store/'

認証

メッセージボディとともに認証ヘッダーを送信することが推奨されています:

X-Sentry-Auth: Sentry sentry_version=7,
  sentry_client=<client version, arbitrary>,
  sentry_timestamp=<current timestamp>,
  sentry_key=<public api key>,
  sentry_secret=<secret api key>

sentry_secretはDSNにsecret keyが含まれている場合のみ必要です。

HTTPヘッダーとリクエスト圧縮

推奨されるHTTPヘッダー:

  • content-type
  • content-length

リクエストの圧縮も推奨されており、以下が受け付けられます:

  • gzip
  • deflate
  • br

エラーハンドリング

SDKはサーバからのエラーを適切に処理すべきです。特に、429ステータスコードに従い、Retry-Afterヘッダーを尊重する必要があります。

タグ: Sentry javascript SDK エラーハンドリング HTTPヘッダー

5月21日 10:10 投稿