JavaScript エージェント API
JavaScript エージェントの API と Web REST API は異なる。 Web REST API は、収集されたデータに対してクエリを実行したり、新しいウェブサイトを設定したりするために使用できます。
JavaScript エージェントは、監視対象のWebサイトで利用可能な API を公開します。 ウェブサイトは、 JavaScript エージェントの API と連携し、収集データの強化や設定、カスタムイベントの送信などを行うことができます。
JavaScript エージェントのバージョン
Instana JavaScript (Weasel) エージェントのすべてのバージョン更新、機能、バグ修正は、 GitHub の変更履歴ファイルでご覧いただけます。
グローバル・オブジェクト
Instana JavaScript エージェントは、ineum という新しいグローバル関数を定義しています。 この関数は、HTML 文書内の JavaScript スニペットの直後で使用できます。 つまり、エージェント自体がダウンロードされていなくても、その関数は存在するということです。 これは、ineum API 呼び出しを簡単かつ効率的に行えるようにすることを目的としています。
エージェントがまだダウンロードされていない場合、実行されたすべての ineumAPI 呼び出しをキューに追加します。 エージェントがダウンロードされた後、これらの API 呼び出しは、実行された順序で同期的に実行されます。 その時点から、 ineum は API 呼び出しを直ちに実行する関数に置き換えられる。
API 構造
すべての ineum 呼び出しは、以下に示すのと同じ構造に従います:
ineum(commandName, ...args);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
commandName (string) |
実行するコマンドを特定します。 例えば、メタデータを設定したり、エラーを報告したりします。 |
...args |
特定のコマンドに対する実引数。 引数の数とその型は、各コマンドごとに固有です。 |
ineum を除いて getPageLoadId)何も返しません。TypeScript 型定義
TypeScript ユーザーは、プロジェクト DefinitelyTyped が提供する型定義をインストールして使用できます。
npm install --save @types/ineum
API
以下のセクションでは、使用可能なコマンド名とそれぞれの引数について説明します。
モニタリング・キー
監視キーは key コマンドを通じて設定できます。 Instana のユーザーインターフェース内でウェブサイトを設定する際、監視キーが表示されます。
ineum('key', trackingKey);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
trackingKey (string) |
Instana で Web サイトを構成するためのモニタリング・キー。 |
例
正確な構成は、Instana ユーザー・インターフェース内で示されています。
モニタリング・キーの切り替え
各環境(本番、ステージング、テスト)を Instana 内で個別のウェブサイトとしてモデル化し、デプロイメントに応じて JavaScript エージェントに異なる監視キーを設定します。 監視キーが既に利用可能な場合、監視キーを構成管理システムに保存し、保存された値を使用して監視キーを置き換えてください。
ウェブサイトが純粋に静的ファイルのみで構成されている場合、または構成管理システムが利用できない場合には、 Google Tag Manager などのツールを採用し、ウェブサイトのコードスニペットを管理することができます。 あるいは、監視キーをハードコードして、ウェブブラウザ内でチェックを実行することもできます。
if (window.location.hostname === 'example.com') {
ineum('key', 'production monitoring key');
} else if (window.location.hostname === 'qa.example.com') {
ineum('key', 'QA monitoring key');
} else {
ineum('key', 'test monitoring key');
}
レポート URL
ビーコンは、監視データを Instana に配信するため、 HTTP GET および POST を通じて、レポート用 URL に送信されます。
ineum('reportingUrl', reportingUrl);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
reportingUrl (string) |
ウェブサイト監視データが送信される URL |
例
正しい設定は、製品「 SaaS 」のユーザー向けに、 Instana のユーザーインターフェース内に表示されます。 オンプレミスユーザーは、設定済みの EUMエンドポイントに基づいて、正しい URL を特定する必要があります。
複数のバックエンド
場合によっては、 JavaScript エージェントが複数のバックエンドに報告するように設定することが望ましい場合があります。 この場合、 JavaScript エージェントが複数のバックエンドに報告するようにするには、` reportingBackends `コマンドを使用します。
ineum('reportingBackends', reportingBackends);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
reportingBackends (ReportingBackend[]) |
オブジェクト ReportingBackend の配列。 各オブジェクトは、ウェブサイト監視データが送信されるバックエンドを定義します。 |
対象 ReportingBackend は以下の通りです:
{
reportingUrl: 'http://example.com', // The URL to which to send website monitoring data to.
key: 'monitoring key' // The monitoring key for the website configuration in Instana.
}
このコマンドは、 reportingBackendsInstana リリース230以降で利用可能です。
例
ineum('reportingBackends', [
{ reportingUrl: 'http://backend1.example.com', key: 'monitoring key 1' },
{ reportingUrl: 'http://backend2.example.com', key: 'moniroting key 2' }
]);
reportingBackends は コマンド reportingUrl よりも優先されます。 コマンド reportingBackends 呼び出しが行われた後は、いかなる reportingUrl コマンド呼び出しも無視される。ページ
Instana は、Web サイト・メトリックを論理ページ別にセグメント化することができます。 そのためには、ユーザーが閲覧しているページに関するヒントが必要です。 このページ名は、コマンド page を通じて設定できます。 できるだけ早く page 設定してください。 ドキュメントの変更を反映させるために(例えば page シングルページアプリケーションの場合)、を変更できます。 これにより、 Instana はページ読み込みに加えてページ遷移を追跡できるようになります。
ineum('page', pageName);
ページ遷移イベントは、ページ名が変わるたびに API を通じて記録されます。ただし、 ページロードフェーズ中にこの API が最初に呼び出される場合は除きます。
ページを定義するには、や product detail page などの論理的な payment selection 名前を、や window.title の代わりに使用 window.hrefしてください。 または product detail page を使用すると、既存のコードと直接 payment selection 関連するページが少なくなります。 一方、 window.title またはを使用すると、多くの window.href 追跡対象ページが生成されますが、これらはほとんどの場合に価値を提供します。なぜなら window.title 、には製品名が含まれているからです。
Instana さまざまなフレームワークやライブラリ向けに意味のあるページ名を収集する方法を示すサンプルプロジェクトを提供します。 不足しているフレームワークやライブラリについては、プルリクエストまたはサポートリクエストを提出してください。
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
pageName (string) |
ページの名前。 |
例
ineum('page', 'shopping-cart');
// Do you want to change meta data and the page name at the same time?
// Make sure to change the page name last as this immediately
// triggers a page transition beacon.
ineum('meta', 'product', 'skateboard');
ineum('page', 'article-details');
自動ページ検出
Instana のウェブサイト監視は、シングルページアプリケーションのページ変更を自動的に検出します。 この機能は、ウェブサイト JavaScript およびエージェント 1.7.1 からサポートされています。
JavaScript エージェント 1.8.0 以降では、ウェブサイトがシングルページアプリケーション(SPA)であり、自動ページ検出が有効になっている場合、ページ遷移の継続時間が自動的に収集されます。 これは、ページ遷移が発生した際に要した時間を示します。
自動ページ検出はページ遷移イベントの追跡と記録に使用され、この機能はデフォルトで無効になっています。 自動ページ検出機能を有効にするには、次のいずれかの方法を使用してください:
HTMLのhead内に API
autoPageDetectionコマンドを追加してください。次のコマンドを使用して、 ウェブサイトの自動計測を設定します:
ineum('autoPageDetection', enabled);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
自動ページ検出を有効にする |
例
ineum('autoPageDetection', true);
// page changes will be detected once set to true
論理ページ名と正規表現マッピングを設定する
` URL ` mappingRule パラメータを使用して、正規表現の配列を提供する論理ページ名を設定できます。これにより、 の変更をマッピングし、指定された名前で置き換えることが可能です。
ineum('autoPageDetection', {mappingRule: [[/.*urlRegex.*/i, 'Page Name']]});
ドキュメントタイトルをページ名として設定するには、パラメータ titleAsPageName を有効にする必要があります true。
ineum('autoPageDetection', {titleAsPageName: true});
ウェブサイトの自動計測を設定して自動ページ検出を有効にする場合、 URL パスがデフォルトのページ名として設定されます。
自動ページ検出が有効な状態でpopstateイベントが発生すると、 JavaScript エージェントはpopstateイベントに基づいてページ遷移をチェックします。 ブラウザの前へボタンや戻るボタンで移動する際、popstateイベントが発生することがよくあります。 一部のアプリケーション(静的コンテンツアプリケーションを含む)では、ポップステートイベントが無効なページ遷移を生成する可能性があるため、エージェントがポップステートイベントを無視する必要がある場合があります。 JavaScript エージェントは、パラメータ ignorePopstateEvent が に設定されている場合、ページ変更時の truepopstateイベントを無視します。
ineum('autoPageDetection', {ignorePopstateEvent: true});
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
mappingRule (RegExp[], string) |
ページ変更の URL に一致する RegExp オブジェクトの配列が、指定された文字列に置き換えられます。 マッピング結果が空の場合、この遷移は無視されます。 が true に設定されている titleAsPageName 場合、マッピングルールを提供しないでください。 |
titleAsPageName (boolean) |
trueに設定すると、ページ遷移ビーコンにおいてドキュメントタイトルがページ名として使用されます。 falseに設定した場合、ページ遷移ビーコンにおけるページ名として、 URL ページまたはマッピングルールが使用されます。 |
ignorePopstateEvent (boolean) |
trueに設定すると、 JavaScript エージェントは、ブラウザがページ遷移を検出した際に生成されるpopstateイベントを無視します。 |
例
たとえば、 URL に が含まれている場合、 https://example.com/accounts/checkUserDetailsInstana UI でページが User Details ページに移行する様子を確認できます。
ineum('autoPageDetection', {mappingRule: [[/.*checkuserdetails.*/i, 'User Details']]});
// Matches the regex and sets page name as User Details
// .*checkuserdetails.* matches the characters in the URL while 'i' modifier represents a case insensitve match.
さらに、以下の例に示すように、より複雑なページ名を設定することもできます:
ineum('autoPageDetection', {mappingRule: [[/.*product[0-9]+contains-[A-Za-z]+-productID-account-([A-Za-z].*)\1+/, 'Product Page : id $1'],[/.*aboutPage.*-([A-Za-z].*)/, 'About Page id: $1']]});
ユーザーの識別
ユーザー固有の情報は、 Instana に送信されるデータと共に任意で送信することができます。 この情報を使用して、以下のような追加機能をアンロックすることができます。
- エラーの影響を受けたユーザー数を計算する
- 特定のユーザー向けにデータをフィルタリングする
- どのユーザーがページ読み込みまたはAjax呼び出しを開始したかを確認する。
デフォルトでは、Instana はユーザーが識別可能な情報をビーコンに関連付けません。 これを行うことを選択する際には、それぞれのデータ保護法に留意してください。 Instana において、ユーザーIDは特定の指標を計算するためにのみ使用される透過的な string 識別子です。 したがって、ユーザーの識別はユーザーIDを通じて行われます。 userName また、より多くのフィルターへのアクセスや、ユーザー情報の効果的な表示にも userEmail 利用できます。
ページ読み込みプロセスにおいて、例えばサーバーサイドで情報をHTMLドキュメントにレンダリングするなどして、 API を同期的に呼び出すことで、すべてのビーコンがユーザー情報を保持し、一意または影響を受けたユーザー統計が正確であり、分析時にビーコンが正しくフィルタリングおよびグループ化されることを保証するのに役立ちます。
ineum('user', userId, userName, userEmail);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
userId (string、オプション) |
ユーザーの ID。 |
userName (string、オプション) |
ユーザー名。 |
userEmail (string、オプション) |
ユーザーの E メール・アドレス。 |
値を設定しない場合には、null または undefined を渡すことができます。
例
// Report everything to Instana
ineum('user', 'hjmna897k1', 'Tom Mason', 'tom@example.com');
// or only some data points
ineum('user', 'hjmna897k1');
ineum('user', null, null, 'tom@example.com');
セッション・トラッキング
セッション追跡は、ページ読み込みを跨いだエンドユーザーの活動に関する洞察を得るために使用できます。 セッション追跡は、特に Instana が定義されたユーザー情報がない場合でもエンドユーザーへの影響を特定することを可能にします。
セッションを追跡するため、 JavaScript エージェントは localStorage ブラウザ APItrackSessions を呼び出した後に使用します。 技術的には、セッションとはブラウザ内のキー localStorage の下に保存される2つのタイムスタンプと共に in-session保持されるランダムなIDである。
プライバシー規定の順守は、この API の呼び出し元の責任です。
セッションの初期化および再使用
この API は、新規セッションを開始するか、可能な場合には既存のセッションを再使用します。
ineum('trackSessions', sessionInactivityTimeout, sessionTerminationTimeout);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
sessionInactivityTimeout (number、オプション) |
最後の trackSessions 呼び出しの後でセッションがアクティブのままになる時間をミリ秒単位で示します。 デフォルトは 3 時間です。 |
sessionTerminationTimeout (number、オプション) |
最初の trackSessions 呼び出しの後でセッションがアクティブのままになる時間をミリ秒単位で示します。 デフォルトは 6 時間です。 |
値を設定しない場合には、null または undefined を渡すことができます。
例
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// or specify custom timeouts
ineum('trackSessions', 900000 /* 15min */, 3600000 /* 1h */);
セッションの終了
現在実行中のセッションを終了して (ある場合)、保管されているデータを localStorage から削除します。
ineum('terminateSession');
例
// Starts tracking sessions with the default timeouts
ineum('trackSessions');
// after some time…
ineum('terminateSession');
メタデータ
メタデータは、ページ・ロードおよび Ajax 呼び出しに注釈を付けるために使用できます。 メタデータを使用して、UI構成値、設定、機能フラグ、または分析に有用な可能性のある追加のコンテキストを追跡します。
ineum('meta', key, value);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
key (string) |
追加したいキーと値のペアの key メタデータ。 |
value (string) |
追加したいキーと値のペアの value メタデータ。 |
例
ineum('meta', 'version', '1.42.3');
ineum('meta', 'role', 'admin');
ページ・ロードのバックエンド・トレース ID
ページ読み込みの一環として、フロントエンドまたはバックエンドの相関分析を可能にするため、バックエンドトレースIDを定義できます。 詳細については、 バックエンド相関を参照してください。 バックエンドトレースIDを定義することは、ページ読み込みのバックエンド処理とフロントエンド処理の相関関係を得るために必要です。 または fetchXMLHttpRequest リクエスト間の相関関係は必須ではありません。 トレースIDは16文字または32文字の16進数文字列でなければなりません。
ineum('traceId', traceId);
パラメーター
| パラメーター | 説明 |
|---|---|
traceId (string) |
関連するバックエンド・トレースのトレース ID。 |
例
ineum('traceId', '89jkbds891jkn321');
トラッキングからの URL の除外
この API を使用して、複数の正規表現を定義できます。 少なくとも1件の一致がある場合、 Instana へのデータ送信は発生しません。 正規表現は以下のシナリオで評価されます:
- ドキュメントのURL(アドレスバーに表示されるURL、すなわち)に対する評価。正規表現の
window.location.hrefいずれかが一致した場合、 Instana への全データ送信が無効化される。 - リソースのURLに対する評価。例えば、 JavaScript のURLやCSSファイルなど。 正規表現のいずれかに一致するリソースに関する情報は、 Instana に送信されません。
- HTTP 呼び出しのターゲットURLに対する評価、例えば、および
XMLHttpRequestを通じてfetch。 正規表現のいずれかに一致する HTTP コールに関する情報は、 Instana に送信されません。
ineum('ignoreUrls', ignoreUrls);
Instana また、ドキュメントURLからシークレットを削除する機能もサポートしています。具体的には、ブラウザのアドレスバーに表示される URL です( シークレットに関する詳細はこちらを参照してください: API )。 ただし、ドキュメントURLに保存された秘密情報は、ほぼ確実にすべての第三者に漏洩していることに注意してください。 ドキュメントURLに保存されたシークレットが、あらゆるサードパーティに漏洩しやすい理由を説明する専用のサンプルアプリと解説を用意しています。 詳細については、このサンプルアプリと説明を参照してください。 ただし、この API を通じて、これらのURLに対するすべての監視データ収集を無視することを選択することもできます。
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
ignoreUrls (RegExp[]) |
オブジェクト RegExp の配列は、無視したいURLに一致します。 |
例
ineum('ignoreUrls', [
/\/comet.+/i,
/\/ws.+/i,
/.*(&|\?)secret=.*/i
]);
URLから機密情報を削除する
収集されたURLのクエリパラメータには機密データが含まれている可能性があります。 したがって、 JavaScript エージェントは、値が伏せ字処理されたクエリパラメータキーのパターン指定をサポートします。 編集は JavaScript エージェント内、つまりウェブブラウザ内で行われます。 したがって、シークレットは Instana サーバーに送信されて処理されることはなく、UIでの分析や API 経由での取得もできません。
ineum('secrets', secrets);
照会パラメーターがリストの項目と一致する場合、値は編集され、Instana バックエンドに送信されません。 ineum('secrets') が定義されていない場合、Instana はデフォルトで [/key/i, /secret/i, /password/i] をマッチング・ルールとして使用します。
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
secrets (RegExp[]) |
クエリパラメータのキー名に一致するオブジェクト RegExp の配列で、その値はシークレットとして扱われます。 |
例
ineum('secrets', [/account/i, /user/i]);
例えば、 https://example.com/accounts/status?account=acount_name&user=user_name は収集され、として表示されます https://example.com/accounts/status?account=<redacted>&user=<redacted>。
/account/<account id>/status) やマトリックスパラメータ (/account;accountId=<account id>/status) をシークレットとして扱うことをサポートしていません。URLからの断片の削除
収集されたURLの断片には機密情報が含まれている可能性があります。 したがって、 JavaScript エージェントは、 URL パスに基づいて編集可能なフラグメント値のパターン指定をサポートします。 この編集は、ウェブブラウザ内の JavaScript エージェント内で実行されます。 その結果、機密情報が Instana サーバーに送信され、処理されるのを防ぎます。 機密情報は、UI上での分析や API による取得にはアクセスできません。
ineum('fragment', fragment);
URL のパスの一部がリスト内のエントリと一致する場合、フラグメント値は削除され、 Instana バックエンドには送信されません。 デフォルトでは、 Instana は URL のフラグメントを非表示にしません。
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
fragment (RegExp[]) |
URL のパスに一致するオブジェクト RegExp を含む配列。そのフラグメントは編集済みである。 |
例
ineum('fragment', [/example.com/i]);
例えば、 https://example.com/accounts/status?account=acount_name#fragmentinformation は収集され、として表示されます https://example.com/accounts/status?account=acount_name#<redacted>。
トラッキングからのユーザー・タイミングの除外
Instana ユーザー タイミング API を通じて作成されたマーカーと計測値を自動的に収集し、 カスタムイベントに変換します。 つまり、ユーザー・タイミング API は、純粋なタイミング・データを Instana に報告するためのベンダー中立の方法として使用できます。
ユーザータイミング API を使用することで、複数の正規表現を定義できます。これらのうち少なくとも1つが一致した場合、特定のユーザータイミングのコレクションが生成されません。 デフォルトでは、以下の条件は無視されます:
- React のユーザータイミング:⚛️ または ⛔ 絵文字で始まるマークと小節
- Angular のユーザータイミング:以下で始まるマークと小節
Zone - 名前が または
startで始まるマークおよび測定単位end
ineum('ignoreUserTimings', ignoreUserTimings);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
ignoreUserTimings (RegExp[]) |
無視するユーザー・タイミングのマークと測定の名前と一致する RegExp オブジェクトの配列。 |
例
ineum('ignoreUserTimings', [
/^\u269B/,
/^\u26D4/,
/^Zone(:|$)/,
/mySecretTiming/i
]);
URL クエリパラメータとフラグメントをトラッキングから除外する
デフォルトでは、 JavaScript エージェントは URL の完全な情報を収集します。これにはすべてのパラメータが含まれます。 エージェントは、指定された正規表現リストに一致するURLのパラメータのみを収集するように設定できます。 除外されたURLのパラメータは追跡されません。
提供された正規表現リストに基づき、 JavaScript エージェントはURLを以下のように追跡します:
- URL がリストのエントリと一致した場合、すべてのパラメータを含む URL 全体が収集される。
- URL がリストのエントリと一致しない場合、 URL のクエリパラメータとフラグメントは Instana バックエンドに送信されません。
- 提供されたリストが空の場合、デフォルトの動作が適用され、 URL の完全なパスとそのパラメータが追跡されます。
ineum('queryTrackedDomainList',queryTrackedDomainList);
以下のシナリオは、 URL に秘密情報または断片が含まれ、または または ineum('secrets', secrets) を使用して編集された場合の ineum('fragment', fragment)条件を説明します:
- URL が のエントリと一致した場合
queryTrackedDomainList、編集された秘密情報または断片を含む URL 全体が Instana バックエンドに送信されます。 - URL がのエントリと一致しない場合、すべてのパラメータは除外された後、 URL
queryTrackedDomainListが Instana バックエンドに送信されます。
パラメーター
| パラメーター | 説明 |
|---|---|
queryTrackedDomainList (RegExp[]) |
追跡したいURLの名前と一致するオブジェクト RegExp の配列。すべてのパラメータを含みます。 |
例
以下の例では、正規表現 /\/comet.+/i、 /\/ws.+/i またはに一致するURLが /example.com/i パラメータと共に完全に収集されます:
ineum('queryTrackedDomainList', [
/\/comet.+/i,
/\/ws.+/i,
/example.com/i
]);
W3C トレースヘッダーのバックエンド相関をサポート
ブラウザがリモートサーバーにリクエストを送信し、 Instana エージェントがリモートサーバーを監視している場合、サーバーの応答には HTTP ヘッダーServer-Timingが含まれる可能性があります。これにより、ブラウザ内で動作する Instana エージェントに backendTraceId タイムスタンプが提供されます。 リモートサーバーで OpenTelemetry が有効になっている場合、 HTTPtracestate ヘッダーには. backendTraceIdが含まれることがあります。
tracestate W3C-defined ヘッダーは、分散トレースIDを相関させるために使用されます traceparent 。 W3C トレースヘッダーの詳細については、 「トレースコンテキストレベル」 を参照してください。
リモートサーバーが OpenTelemetry を使用可能であり、HTTP tracestate -Echoヘッダーに backendTraceId 値を提供すると予想される場合、ブラウザの Instana エージェントは、 W3CbackendTraceId ヘッダー内の値を利用するために、 APIenableW3CHeaders をtrueに設定する必要があります。
ヘッダー Server-Timing 、 tracestate ヘッダー、およびブラウザの APItraceId を使用して手動で、 backendTraceId 3つの異なる場所で設定できます。 これらのアプローチの手順は以下の通りです:
- が有効になっている
enableW3CHeaders場合、次の2つの選択肢があります。 まず、現在のページのメタデータから値をtracestatetraceparent抽出し、それを使用します。 取得tracestateできない場合、 W3C トレースコンテキストと互換性のある16文字の長い文字列が生成され使用されます。 - 無効化されている
enableW3CHeaders場合、まず APItraceIdが呼び出されているか確認してください。 APItraceIdが呼び出された場合、そのIDを.backendTraceIdとして使用する。 APItraceIdが呼び出されない場合、 HTTP ヘッダーのServer-Timingを解析して取得するbackendTraceId。 - 上記のいずれの値も利用できない場合、ビーコンをバックエンドのトレースに関連付けることはできません。
ineum('enableW3CHeaders',true);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
この機能を無効化または有効化するフラグ。 |
例
以下の例は、 W3C ヘッダーが有効化されていることを示しています:
ineum('enableW3CHeaders', true);
ページ・ロード後の最大待ち時間の構成
追加のメトリクスを収集するため、 JavaScript エージェントは次の条件が一致するまで待機します。 例えば、まず入力遅延と累積レイアウトシフト。
- すべての指標が利用可能です
- ページがアンロードされました(例:タブが閉じられました)
- 最大待機時間が経過するまで
この API を使用して、最大待ち時間を再構成することができます。 デフォルトでは、 Instana はページ読み込みが完了した時点、つまり onLoad イベントが終了した時点から最大1秒間待機します。
ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
durationMillis (番号) |
ページ読み込みが完了した後、ページ読み込みビーコンが送信されるまでの最大待機時間(ミリ秒単位)。 |
例
ineum('maxMaitForPageLoadMetricsMillis', 500);
ページ・ロード ID の取得
ページ読み込みのIDを手動で取得することは、カスタム相関処理を行いたい場合など、時に有用である。 この関数は、 JavaScript エージェントがロードされていない限り返します undefined 。 JavaScript エージェントがロードされた後、常に同じ値を返します string。
ineum('getPageLoadId');
戻り
ページ読み込みIDとして、 string または undefined。
例
var pageLoadId = ineum('getPageLoadId');
console.log(pageLoadId);
エラー・トラッキング
手動でのエラー報告
キャッチされたエラーを報告することができます。 この機能を使用して、キャッチされていないエラーをキャッチするフレームワークおよびライブラリーと Instana を統合することができます。
ineum('reportError', error, opts);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
error (Error または string) |
JavaScript Error オブジェクトまたはエラー・メッセージ。 |
opts (ErrorReportingOpts、オプション) |
以下のような外観の物体。 |
{
componentStack: '...' // an optional string
meta: { // An optional JavaScript object with `string` values which can be used
widgetType: 'chart' // to send metadata to Instana just for this singular event. In contrast to
} // the usage of the metadata API, this metadata is not included in subsequent
// beacons.
}
例
ineum('reportError', new Error('Something failed'), {
componentStack: '…',
meta: {
widgetType: 'chart'
}
});
React の統合
JavaScript エージェントを React エラー境界と統合することで、より優れたエラー分析が可能になります。 具体的には、エラー(関数)スタックトレースに加えて、コンポーネントのスタックトレースも利用可能になります。
以下のコード・スニペットでは、この統合を実現するために React の componentDidCatch を拡張する方法を示しています。 ライフサイク componentDidCatch ルの詳細については、 React のドキュメントを参照してください。
componentDidCatch(error, info) {
ineum('reportError', error, {
componentStack: info.componentStack
});
// your regular error boundary code
}
Angular 2+ の統合
Angular デフォルトですべてのエラーをキャッチし、 コンソールにログを出力します。 これは、 JavaScript エージェントがこれらのエラーにアクセスできないことを意味します。 次の TypeScript スニペットでは、Angular のキャッチされたエラーを Instana と統合する方法を示しています。
Angular のエラーハンドラに関する詳細については、 Angular のドキュメントを参照してください。
import { ErrorHandler, NgModule } from '@angular/core';
class CustomErrorHandler implements ErrorHandler {
handleError(error) {
ineum('reportError', error);
// Continue to log caught errors to the console
console.error(error);
}
}
@NgModule({
providers: [{ provide: ErrorHandler, useClass: CustomErrorHandler }],
})
class MyModule {
// the rest of your application code…
}
Vue統合
Vueは、アプリケーションから伝播される未処理のエラーに対してグローバルハンドラを割り当てることができます。 以下のコードスニペットは、Vueのエラー処理を Instana と統合する方法を示しています。
Vueのエラーハンドラーに関する詳細については、 Vueのドキュメントを参照してください。
app.config.errorHandler = (err, instance, info) => {
ineum('reportError', err);
// your regular error handling code
}
トラッキングからのエラーの除外
一部のエラーが Instana に報告されるのを明示的に停止することが可能です。 これは既知のエラーや修正不可能なエラーを無視するために使用できます。
ineum('ignoreErrorMessages', ignoreErrorMessages);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
ignoreErrorMessages (RegExp[]) |
エラー・トラッキングから除外するエラーと突き合わせる RegExp オブジェクトの配列。 |
例
ineum('ignoreErrorMessages', [/^script error/i]);
スクリプト・エラーに関する洞察
多くのサードパーティ製スクリプトを埋め込んでいるウェブサイトは、通常、安定した数の Script Errorsに遭遇する。 Instana これらのエラーを可視化する方法、つまり実際のエラーメッセージとスタックにアクセスする方法についてのガイダンスを提供します。 場合によっては、これらの指示に従えないことがあります。例えば、サードパーティが必要な Access-Control-Allow-Origin ヘッダーを追加しない場合などです。 これらのケースにおいて、 Instana は s Script Errorsに関する洞察を向上させる代替手段を提供します。
この仕組みは万能薬ではない。 これにより可視性が向上し、より有益な追跡エラーに遭遇しますが、(減少した数の) Script Errorsは依然として表示されます。 詳細については、 クロスオリジンガイダンスを参照してください。
DOM イベント・リスナー・エラーの明示的なトラッキング
これにより、 Instana エージェントがすべての DOMイベントリスナー のコールスタックに組み込まれます。 Instana エージェントは、イベントリスナーの関数を自動的に`try...catch`文で try/catch 囲みます。 これにより、クロス・オリジン・エラーに対する洞察が向上します。
ほとんどのお客様にとってこの値は疑わしいため、この機能はデフォルトで 使用不可 です。 さらに、ウェブブラウザがこのウェブセキュリティモデルの脆弱性を修正し始めているため、この方法によってスクリプトエラーに関するより良い情報を収集できる保証はありません。
ineum('wrapEventHandlers', enabled);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
この機能を無効化または有効化するフラグ。 |
例
ineum('wrapEventHandlers', true);
タイマー・エラーの明示的なトラッキング
これにより、 Instana エージェントがすべてのタイマーのコールスタックに組み込まれます。 Instana エージェントは、タイマーハンドラの関数を自動的に`statements`で try/catch 囲みます。 これにより、クロス・オリジン・エラーに対する洞察が向上します。
この機能は、デフォルトで無効になっています。ほとんどのお客様にとって値に問題があるためです。 さらに、ウェブブラウザがこのウェブセキュリティモデルの脆弱性を修正し始めているため、この方法によってスクリプトエラーに関するより良い情報を収集できる保証はありません。
ineum('wrapTimers', enabled);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
この機能を無効化または有効化するフラグ。 |
例
ineum('wrapTimers', true);
スクリプト・エラーの無視
前述のメカニズムのいずれを使用してもスクリプトエラーに関する情報を取得できない場合、それらのエラーが Instana に報告されるのを停止することを検討してください。 これは、エラー統計が実用的な状態を維持するために有用である。 スクリプト・エラーが Instana に報告されないようにするには、次のスニペットを使用できます。
ineum('ignoreErrorMessages', [/^script error/i]);
カスタム・イベントの報告
グローバルカスタムイベントの詳細については、 イベントページをご覧ください。
カスタムイベントにより、非標準的なアクティビティ、重要なインタラクション、およびカスタムタイミングに関するレポートを Instana に送信できます。 これは特に、未捕捉エラー(ブレッドクラム)の分析や、より多くのパフォーマンス指標の追跡に役立ちます。
ineum('reportEvent', eventName, {
duration: duration,
timestamp: timestamp,
backendTraceId: backendTraceId,
error: error,
componentStack: componentStack,
meta: meta,
customMetric: customMetric
});
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
eventName (string) |
ウェブサイト上で発生した、カスタムビーコンの送信につながる可能性のあるイベントの種類を定義します。 |
timestamp (number, 任意指定) |
タイムスタンプは、そのイベントがいつ発生したかを示す。 定義しない場合は、now() - duration へフォールバックします。 |
duration (number, 任意指定) |
イベントの所要時間 (ミリ秒)。 |
backendTraceId (string, 任意指定) |
このパラメーターは、ビーコンをバックエンド・トレースに関連付けるために使用されます。 その値は16文字または32文字の16進文字列でなければなりません。 |
error (Error, 任意指定) |
より多くのコンテキストを提供するための JavaScript エラーオブジェクト。 エラーが発生したことを報告したい場合は、専用のエラー報告システム API をご利用ください。 |
componentStack (string, 任意指定) |
コンポーネント階層を表すストリング。 通常は、コンポーネント・ベースのフレームワークで提供されています。 |
maxMetadataKeys (number, 任意指定) |
ビーコンで送信されるメタデータキーの最大数。 デフォルトは25に設定されています。 |
meta (object, 任意指定) |
JavaScript オブジェクトと値。この単一のイベントに対してのみ、 Instanastring にメタデータを送信するために使用できます。 メタデータ API の使用とは対照的に、このメタデータは後続のビーコンには含まれません。 |
customMetric (number, 任意指定) |
小数点以下4桁までの精度を持つカスタムメトリックデータ。 この指標には機密情報を含めないでください。 |
例
ineum('reportEvent', 'login');
ineum('reportEvent', 'full example', {
timestamp: Date.now(),
duration: 42,
backendTraceId: '31ab91fc109223fe',
error: new Error('whooops – sorry!'),
componentStack: 'a component stack',
meta: {
state: 'running'
},
customMetric: 123.2342
});
クロス・オリジン要求のバックエンド相関
Instana のバックエンド相関は、XMLHttpRequest 要求または fetch 要求にカスタム・ヘッダーを設定することで機能します。 JavaScript エージェントはこれらのヘッダーを設定し、サーバーによって読み取られます。 ブラウザーでは、同一オリジン・ポリシーによってカスタム・ヘッダーの送信が制限されています。 より具体的には、カスタムヘッダーは同一オリジンリクエストに対してのみ設定可能、あるいはカスタムヘッダーの送信を許可する他のオリジンへのリクエストに対してのみ設定可能です。 例えば、デフォルトでは、によって提供されているウェブサイトは、これらが異なる https://example.com:443 オリジンであるため、 https://shop.example.com:443 へのリクエスト XMLHttpRequestを送信できません。
このセキュリティ制限を回避するために、 クロスオリジンリソース共有 ( CORS )が利用可能です。 CORS を使用すると、クロス・オリジン・リソース・アクセスに対してオリジンを許可できます。 既にアプリケーション内にクロス・オリジン・リソース・アクセスがある場合は、何らかの CORS ヘッダーを既に使用しているはずです。
Instana バックエンドの相関を有効にするには、次の手順を完了してください:
サーバー・サイドで以下のヘッダーによって応答することにより、クロス・オリジン要求に対して Instana の相関ヘッダーを許可します。
注記: サーバーは、プリフライトリクエストと通常のリクエストの両方に対して、これらのヘッダーで応答する必要があります。 プリフライトリクエスト( HTTPOPTIONSメソッドで識別可能)は、サーバーへのリクエスト発行を検証するためにブラウザによって実行される。Access-Control-Allow-Origin: https://your-origin.example.com Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-LJavaScript エージェントに対し、 CORS が正しく設定されていること、および以下の相関ヘッダーを設定する必要があることを通知してください:
ineum('allowedOrigins', urls);
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
urls (RegExp[]) |
許可される URL と突き合わせる RegExp オブジェクトの配列。 |
開始
この allowedOrigins コマンドは、 Instana リリース185以降で利用可能です。 以前のリリースでは、別名 whitelistedOrigins を使用してください。
別名
コマンド whitelistedOrigins は、allowedOrigins に対する非推奨の別名です。
例
ineum('allowedOrigins', [/.*api\.example\.com.*/]);
これらの変更後にアプリケーションが正しく機能することを確認してください。 JavaScript エージェントにバックエンド相関ヘッダー(つまりオリジン許可)を追加するよう指示する場合、サーバー側で CORS を設定せずに実行すると、ウェブサイトが機能しなくなる可能性が非常に高いです!
HTTP のリクエストまたはレスポンスヘッダーを取得する
HTTP リクエストまたはレスポンスヘッダーは XMLHttpRequest 、 JavaScript エージェントによってキャプチャできます。 fetch captureHeaders コマンドを使用して、JavaScript エージェントにキャプチャーさせる HTTP ヘッダーを定義できます。
ブラウザー内では、同一生成元ポリシーによってカスタム・ヘッダーのアクセスが制限されます。 クロス・オリジン・リソース共有 (CORS) 構成がないと、JavaScript エージェントがすべての HTTP ヘッダーをキャプチャーできない場合があります。 CORS を有効にするには、 クロス・オリジン要求のバックエンド相関を参照してください。 CORS では、 JavaScript エージェントによって収集できるのは、 CORS を満たすリクエストまたはレスポンスヘッダーと、Access-Control-Expose-Headers で定義されたヘッダーのみです。
パラメーター
以下の表にパラメータを列挙します:
| パラメーター | 説明 |
|---|---|
captureHeaders (RegExp[]) |
JavaScript エージェントがキャプチャする HTTPRegExp リクエストまたはレスポンスヘッダーのキーに一致するオブジェクトの配列。 |
開始
この captureHeaders コマンドは、 Instana リリース 216 から利用可能です。
例
ineum('captureHeaders', [/content-type/i]);