JavaScript エージェント API

JavaScript エージェントの API と Web REST API は別物です。 Web REST API を使用すると、収集されたデータに対してクエリを実行したり、新しいウェブサイトを設定したりすることができます。

JavaScript エージェントは、監視対象のWebサイトで利用可能な API を提供します。 ウェブサイトは、 JavaScript エージェントの API と連携して、収集したデータの補完や設定、カスタムイベントの送信などを行うことができます。

JavaScript エージェントのバージョン

Instana のJavascript(Weasel)エージェントに関するすべてのバージョン更新、機能、およびバグ修正については、 GitHub の「 Changelog」 ファイルでご確認いただけます。

グローバル・オブジェクト

Instana JavaScript エージェントは、ineum という新しいグローバル関数を定義しています。 この関数は、HTML 文書内の JavaScript スニペットの直後で使用できます。 つまり、エージェント自体がダウンロードされていなくても、その機能は存在するということだ。 これは、ineum API 呼び出しを簡単かつ効率的に行えるようにすることを目的としています。

エージェントがまだダウンロードされていない場合、実行されたすべての APIineum 呼び出しをキューに入れます。 エージェントのダウンロードが完了すると、これらの API 呼び出しは、実行された順序通りに同期的に実行されます。 それ以降、 ineum は、 API 呼び出しを直ちに実行する関数に置き換えられます。

API 構造

すべてのineumコールは、示されているのと同じ構造に従っている:

ineum(commandName, ...args);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
commandName (string) 実行するコマンドを指定する。 例えば、メタデータの設定やエラーの報告などだ。
...args 特定のコマンドに対する実引数。 引数の数と種類は各コマンドによって異なる。
注: この関数は(コマンド ineumgetPageLoadId を除き)何も返しません。

TypeScript 型定義

TypeScriptユーザーは、DefinitelyTypedプロジェクトが提供する型定義をインストールして使用することができます。

npm install --save @types/ineum
 

API

以下のセクションでは、使用可能なコマンド名とそれぞれの引数について説明します。

モニタリング・キー

監視キーはkeyコマンドで設定できる。 Instana のユーザーインターフェースでWebサイトを設定すると、監視キーが表示されます。

ineum('key', trackingKey);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
trackingKey (string) Instana で Web サイトを構成するためのモニタリング・キー。

モニタリング・キーの切り替え

各環境(本番、ステージング、テスト)を Instana 内で個別のWebサイトとしてモデル化し、デプロイメントに応じて JavaScript エージェントに異なるモニタリングキーを設定します。 モニタリング・キーがすでに利用可能な場合は、モニタリング・キーを構成管理システムに保存し、保存された値をモニタリング・キーの置き換えに使用します。

ウェブサイトが純粋に静的なファイルで構成されている場合や、コンフィギュレーション管理システムが利用できない場合は、ウェブサイトのコードスニペットを管理できるGoogleTag Managerのようなツールを採用することもできます。 あるいは、監視キーをハードコードして、Webブラウザ内でチェックを実行することもできます。

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

ビーコンは、 HTTP へのGETリクエストおよび POST を通じてレポート用 URL に送信され、監視データが Instana に送信されます。

ineum('reportingUrl', reportingUrl);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
reportingUrl (string) ウェブサイト監視データが送信される URL。

SaaS をご利用のお客様向けに、 Instana のユーザーインターフェース内に正しい設定例を表示しています。 オンプレミスのユーザーは、設定済みの EUMエンドポイントに基づいて、正しい URL を特定する必要があります。

複数のバックエンド

場合によっては、 JavaScript エージェント・レポートを複数のバックエンドに作成することが望ましい場合があります。 この場合は、 reportingBackends コマンドを使用して、 JavaScript エージェントが複数のバックエンドにレポートするようにします。

ineum('reportingBackends', reportingBackends);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
reportingBackends (ReportingBackend[]) ReportingBackend オブジェクトの配列。 各オブジェクトは、Web サイト・モニター・データの送信先となるバックエンドを定義します。

オブジェクトはこの通り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 が最初に呼び出された場合は除きます。

ページを定義するには、や window.title の代わりに payment selectionproduct detail page やのような論理 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 のウェブサイト監視機能は、シングルページWebアプリケーションのページ変更を自動的に検知します。 この機能は、ウェブサイト JavaScript およびエージェント 1.7.1 以降でサポートされています。

JavaScript のエージェント 1.8.0 以降では、ウェブサイトがシングルページアプリケーション(SPA)であり、自動ページ検出が有効になっている場合、ページ遷移の所要時間が自動的に収集されます。 これは、ページ遷移が発生した際の所要時間を示しています。

自動ページ検出は、ページ遷移イベントの追跡と記録に使用され、この機能はデフォルトでは無効になっている。 自動ページ検出機能を有効にするには、以下のいずれかの方法を使用する:

  • HTMLのheadタグ内に ` autoPageDetectionAPI ` コマンドを追加してください。

  • 次のコマンドを使用して、 Webサイトの自動計測を設定します:

    ineum('autoPageDetection', enabled);
     
パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
enabled (boolean) 自動ページ検出を有効にするには
論理ページ名と正規表現のマッピングを設定する

パラメータ mappingRule を使用して、正規表現の配列を指定し、 URL の変更をマッピングして、指定された名前に置き換える論理ページ名を設定できます。

ineum('autoPageDetection', {mappingRule: [[/.*urlRegex.*/i, 'Page Name']]});
 

ドキュメントのタイトルをページ名として設定するには、パラメータ titleAsPageName を有効にする必要があります true

ineum('autoPageDetection', {titleAsPageName: true});
 

Webサイトの自動計測設定で自動ページ検出を有効にすると、デフォルトでは 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 フィルター機能や、ユーザー情報の効果的な表示を利用することもできます。

注:Instana のサーバーにすでに送信されたデータは、事後的に更新することはできません。 したがって、ページの読み込みプロセスにおいて、できるだけ早くこの API を呼び出すことが重要です。

たとえば、ページの読み込みプロセス中にこの API を同期的に呼び出し、サーバー側で情報をHTMLドキュメントにレンダリングすることで、すべてのビーコンにユーザー情報が確実に含まれるようにし、一意のユーザー統計や影響を受けたユーザーの統計が正確になり、分析時にビーコンが適切にフィルタリングおよびグループ化されるようになります。

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 エージェントは、呼び出し trackSessions を行った後、 localStorage ブラウザの API を使用します。 厳密に言えば、セッションとは、ブラウザの 内に、2つのタイム localStorage スタンプと共に キーの下に保存されるランダム 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

ページ・ロードのバックエンド・トレース ID

ページの読み込み時に、フロントエンドとバックエンドの相関分析を可能にするために、バックエンドのトレースIDを定義することができます。 詳細については、 「バックエンド相関」 を参照してください。 ページ読み込み時のバックエンド処理とフロントエンド処理を関連付けるには、バックエンドのトレースIDを定義する必要があります。 または fetchXMLHttpRequest リクエスト間の相関関係は必須ではありません。 トレースIDは16文字または32文字の16進文字列でなければならない。

ineum('traceId', traceId);
 

パラメーター

パラメーター 説明
traceId (string) 関連するバックエンド・トレースのトレース ID。

トラッキングからの URL の除外

この API を使用すると、複数の正規表現を定義できます。 少なくとも1つでも一致する場合、 Instana へのデータ送信は行われません。 正規表現は以下のシナリオで評価される:

  • ドキュメントのURL(アドレスバーに表示されるURL、つまり)に基づいて評価を行います。正規 window.location.href表現のいずれかに一致した場合、 Instana へのすべてのデータ送信が無効化されます。
  • リソースのURL(例えば、JavaScriptCSSファイルのURL)に対する評価。 正規表現のいずれかに一致するリソースに関する情報は、 Instana には送信されません。
  • 例えば、 HTTP へのリクエストのターゲット URL に対する評価。具体的には、および XMLHttpRequest を通じて fetch行われます。 正規表現のいずれかに一致する HTTP への呼び出しに関する情報は、 Instana には送信されません。
ineum('ignoreUrls', ignoreUrls);
 

Instana また、ドキュメントのURL(つまり、ブラウザのアドレスバーに表示される URL )からシークレットを抽出する機能もサポートしています( シークレットについては API を参照してください)。 しかし、ドキュメントのURLに格納された秘密は、すべての第三者にほぼ漏れることに注意してください。 ドキュメントのURLに保存されたシークレットが、あらゆるサードパーティに漏洩しやすい理由を説明する専用のサンプルアプリを用意しています。 詳細については、このアプリの例と説明を参照してください。 ただし、この API を通じて、これらのURLに関するすべての監視データの収集を無効にすることも可能です。

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
ignoreUrls (RegExp[]) オブジェクトの配列は、無視したいURLにマッチするRegExp

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>と表示されます。

注:JavaScript エージェントでは、パスパラメータ (/account/<account id>/status) やマトリックスパラメータ (/account;accountId=<account id>/status) をシークレットとして扱うことはできません
注: ドキュメントのURLに保存された秘密情報は、ほぼすべての第三者に漏洩する恐れがあります。 詳細については、ドキュメントのURLに保存されたシークレットが、あらゆるサードパーティに漏洩しやすい理由を解説した専用のサンプルアプリをご覧ください。

URLから断片を削除する

収集された URL のフラグメントには、機密情報が含まれている可能性があります。 したがって、 JavaScript エージェントは、 URL パスに基づいて非表示にできるフラグメント値のパターンを指定する機能をサポートしています。 この編集は、Webブラウザ内の JavaScript エージェント内で行われます。 その結果、機密情報が Instana サーバーに送信され、処理されるのを防ぐことができます。 機密情報は、UIでの分析や API による取得の対象外となります。

ineum('fragment', fragment);
 

URL パスの一部がリスト内のエントリと一致した場合、そのフラグメント値は伏せられ、 Instana バックエンドには送信されません。 デフォルトでは、 Instana は URL の断片を非表示にしません。

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
fragment (RegExp[]) URLRegExp のパスに一致するオブジェクトを含む配列で、そのパスの一部が伏せられています。

ineum('fragment', [/example.com/i]);
 

例えば、 https://example.com/accounts/status?account=acount_name#fragmentinformation は収集され、 https://example.com/accounts/status?account=acount_name#<redacted>と表示されます。

トラッキングからのユーザー・タイミングの除外

Instana User-Timing API を通じて作成されたマーカーと計測値を自動的に収集し、それらをカスタムイベントに変換します。 つまり、ユーザー・タイミング API は、純粋なタイミング・データを Instana に報告するためのベンダー中立の方法として使用できます。

User-Timing API を使用すると、複数の正規表現を定義でき、そのうち少なくとも1つに一致した場合、特定のユーザータイミングの収集が行われないようにすることができます。 デフォルトでは、以下の条件は無視される:

  • React のuser-timings:⚛️または⛔の絵文字で始まるマークとメジャ
  • Angular のuser-timings:次のように始まるマークとメジャー Zone
  • 名前が または start で始まる単位 end
ineum('ignoreUserTimings', ignoreUserTimings);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
ignoreUserTimings (RegExp[]) 無視するユーザー・タイミングのマークと測定の名前と一致する RegExp オブジェクトの配列。

URL のクエリパラメータおよびフラグメントを追跡対象から除外する

デフォルトでは、 JavaScript エージェントは、すべてのパラメータを含む完全な URL を収集します。 エージェントの設定により、指定された正規表現のリストに一致するURLのパラメータのみを収集するように設定できます。 除外されたURLのパラメータは追跡されません。

提供された正規表現のリストに基づき、 JavaScript エージェントは次のようにURLを追跡します:

  • URL がリストのエントリと一致する場合、すべてのパラメータを含む URL 全体が取得されます。
  • URL がリストのエントリと一致しない場合、クエリパラメータおよび URL のフラグメントは、 Instana バックエンドに送信されません。
  • 指定されたリストが空の場合、デフォルトの動作が適用され、 URL およびそのパラメータのすべてが追跡されます。
ineum('queryTrackedDomainList',queryTrackedDomainList);
 

以下のシナリオでは、 URL に、 ineum('fragment', fragment)または ineum('secrets', secrets) を使用して伏せられたシークレットまたはフラグメントが含まれている場合の状況を説明します

  • URL がの項目と一致した場合、秘密鍵またはその一部が伏せられた URLqueryTrackedDomainList全体が、 Instana バックエンドに送信されます。
  • URL がの項目と一致しない場合、 URL を queryTrackedDomainListInstana バックエンドに送信する前に、すべてのパラメータが除外されます。

パラメーター

パラメーター 説明
queryTrackedDomainList (RegExp[]) 追跡したいURLの名前(すべてのパラメータを含む)と一致するオブジェクト RegExp の配列。

次の例では、正規表現 /\/comet.+/i/\/ws.+/i 、または に一致するURLが、その /example.com/i パラメータを含めて完全に収集されます:

ineum('queryTrackedDomainList', [
  /\/comet.+/i,
  /\/ws.+/i,
  /example.com/i
]);
 

バックエンドの相関分析において、 W3C のトレースヘッダーをサポートする

ブラウザがリモートサーバーにリクエストを送信し、 Instana エージェントがそのリモートサーバーを監視している場合、サーバーのレスポンスには、ブラウザ内で実行されている Instana エージェントに backendTraceId 情報を提供するために、 HTTP ヘッダー「Server-Timing」が含まれることがあります。 リモートサーバーで OpenTelemetry が有効になっている場合、 HTTPtracestate ヘッダーには.が含まれることがあります backendTraceId

tracestate および traceparent は、分散トレースIDの照合に使用される W3C-defined ヘッダーです。 W3C のトレースヘッダーに関する詳細については、 「トレースコンテキストレベル」 を参照してください。

リモートサーバーが OpenTelemetry を使用でき、ヘッダー tracestatebackendTraceId その値を提供できると予想される場合、ブラウザの Instana エージェントは、 W3CbackendTraceId ヘッダーの値を利用するために、 APIenableW3CHeaders をtrueに設定する必要があります。

この設定は backendTraceId 、3つの異なる場所で行うことができます。 Server-Timing ヘッダー、 tracestate ヘッダー、およびブラウザの APItraceId を使用して手動で行う方法です。 これらのアプローチの手順は以下の通りです:

  • が有効になっている enableW3CHeaders 場合、2つの選択肢があります。 まず、現在のページのメタデータからその tracestate 値を traceparent 抽出し、それを使用します。 を取得 tracestateできない場合は、 W3C のトレースコンテキストと互換性のある16文字の文字列が生成され、使用されます。
  • が無効になっている enableW3CHeaders 場合は、まず APItraceId が呼び出されているか確認してください。 API traceId が呼び出された場合は、その ID を として使用します backendTraceId。 API traceId が呼び出されない場合は、 HTTP ヘッダーの Server-Timing を解析して、. backendTraceIdを取得します。
  • 上記の値がいずれも利用できない場合、ビーコンをバックエンドのトレースに関連付けることはできません。
ineum('enableW3CHeaders',true);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
enabled (boolean) この機能を無効にするか有効にするかのフラグ。

次の例は、 W3C ヘッダーが有効になっていることを示しています:

ineum('enableW3CHeaders', true);
 

ページ・ロード後の最大待ち時間の構成

追加のメトリクスを収集するために、 JavaScript エージェントは、以下の条件が満たされるまで待機します。 例えば、初期入力遅延や累積レイアウトシフトなどです。

  • すべてのメトリクスが利用可能
  • ページがアンロードされた(タブが閉じられたなど)
  • 最大待機時間が経過するまで

この API を使用して、最大待ち時間を再構成することができます。 デフォルトでは、 Instana は、ページの読み込みが完了し、 onLoad イベントが終了してから最大1秒間待機します。

ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
 

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
durationMillis (番号) ページロードが終了してからページロードビーコンが送信されるまでの最大待機時間(ミリ秒)。

ページ・ロード ID の取得

たとえば、カスタム相関分析を行いたい場合など、ページ読み込みのIDを手動で取得しておくと便利なことがあります。 この関数は、JavaScriptエージェントがロードされない限り、undefinedを返す。 JavaScriptエージェントがロードされた後は、常に同じstringを返します。

ineum('getPageLoadId');
 

エラー・トラッキング

手動でのエラー報告

キャッチされたエラーを報告することができます。 この機能を使用して、キャッチされていないエラーをキャッチするフレームワークおよびライブラリーと 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.
}
 
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 オブジェクトの配列。

スクリプト・エラーに関する洞察

多くのサードパーティ製スクリプトを埋め込んでいるウェブサイトでは、通常、安定した数のScript Errorが発生する。 Instana これらのエラーをアクセス可能にする方法、つまり実際のエラーメッセージやスタックトレースにアクセスする方法について、 指針を示しています。 場合によっては、これらの手順に従えないこともあります。例えば、サードパーティが必要な Access-Control-Allow-Origin ヘッダーを追加していない場合などです。 このような場合、 Instana は、s Script Errorsに関する理解を深めるための別の手段を提供します。

このメカニズムは銀の弾丸ではない。 これにより、可視性が向上し、より役立つ追跡エラーが発生しますが、 Script Errorが表示されます (表示される数は少なくなります)。 詳細については、 クロスオリジンに関するガイドラインを参照してください。

DOM イベント・リスナー・エラーの明示的なトラッキング

これにより、 Instana エージェントがすべての DOMイベントリスナー のコールスタックに追加されます。 Instana エージェントは、イベントリスナーの関数の前後に自動的に`{}` try/catch を付加します。 これにより、クロス・オリジン・エラーに対する洞察が向上します。

ほとんどのお客様にとってこの値は疑わしいため、この機能はデフォルトで 使用不可 です。 さらに、ウェブ・ブラウザがウェブ・セキュリティ・モデルのこの穴にパッチを当て始めているため、この方法でスクリプト・エラーに関するより良い情報を収集できる保証はない。

ineum('wrapEventHandlers', enabled);
 
パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
enabled (boolean) この機能を無効にするか有効にするかのフラグ。
タイマー・エラーの明示的なトラッキング

これにより、 Instana エージェントがすべてのタイマーのコールスタックに追加されます。 Instana エージェントは、タイマーハンドラの関数の前後に自動的に`{}` try/catch を付加します。 これにより、クロス・オリジン・エラーに対する洞察が向上します。

この機能は、デフォルトで無効になっています。ほとんどのお客様にとって値に問題があるためです。 さらに、ウェブ・ブラウザがウェブ・セキュリティ・モデルのこの穴にパッチを当て始めているため、この方法でスクリプト・エラーに関するより良い情報を収集できる保証はない。

ineum('wrapTimers', enabled);
 
パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
enabled (boolean) この機能を無効または有効にするフラグ。
スクリプト・エラーの無視

前述のいずれの方法でもスクリプトのエラーに関する詳細情報を得られない場合は、 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, 任意指定) string を持つ JavaScript オブジェクト。これは、この単一のイベントについてのみ、 Instana にメタデータを送信するために使用できます。 メタデータ ` 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から提供されているウェブサイトは、XMLHttpRequesthttps://shop.example.com:443にすることはできない。

このセキュリティ制限を回避するために、 クロスオリジンリソース共有 ( CORS )を利用できます。 CORS を使用すると、クロス・オリジン・リソース・アクセスに対してオリジンを許可できます。 既にアプリケーション内にクロス・オリジン・リソース・アクセスがある場合は、何らかの CORS ヘッダーを既に使用しているはずです。

Instana のバックエンド相関機能を有効にするには、以下の手順を実行してください:

  1. サーバー・サイドで以下のヘッダーによって応答することにより、クロス・オリジン要求に対して Instana の相関ヘッダーを許可します。

    注: サーバーは、プレフライトリクエストと通常のリクエストの両方に対して、これらのヘッダーを含めて応答する必要があります。 プリフライトリクエスト( HTTPOPTIONS メソッドによって識別可能)は、サーバーへのリクエストが送信される可能性があるかどうかを確認するために、ブラウザによって実行されます。
    Access-Control-Allow-Origin: https://your-origin.example.com
    Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-L
    
     
  2. JavaScript のエージェントに対し、 CORS が正しく設定されており、以下の相関ヘッダーを設定する必要があることを通知してください:

    ineum('allowedOrigins', urls);
     

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
urls (RegExp[]) 許可される URL と突き合わせる RegExp オブジェクトの配列。

開始

この allowedOrigins コマンドは、 Instana リリース 185 以降で利用可能です。 以前のリリースでは、別名 whitelistedOrigins を使用してください。

ineum('allowedOrigins', [/.*api\.example\.com.*/]);
 

これらの変更後にアプリケーションが正しく機能することを確認してください。 サーバー側で CORS を設定せずに、 JavaScript エージェントに対してバックエンド相関ヘッダー(つまりオリジンの許可)を追加するよう指示すると、ウェブサイトが正常に動作しなくなる可能性が非常に高くなります!

HTTP のリクエストまたはレスポンスヘッダーを取得する

HTTP リクエストまたはレスポンスのヘッダーは XMLHttpRequestfetchJavaScript エージェントによって取得できます。 captureHeaders コマンドを使用して、JavaScript エージェントにキャプチャーさせる HTTP ヘッダーを定義できます。

ブラウザー内では、同一生成元ポリシーによってカスタム・ヘッダーのアクセスが制限されます。 クロス・オリジン・リソース共有 (CORS) 構成がないと、JavaScript エージェントがすべての HTTP ヘッダーをキャプチャーできない場合があります。 CORS を有効にするには、 クロス・オリジン要求のバックエンド相関を参照してください。 CORS を使用する場合、 JavaScript エージェントが収集できるのは、 CORS の条件を満たすリクエストまたはレスポンスヘッダー、およびAccess-Control-Expose-Headersで定義されているヘッダーのみです。

注: リクエストのヘッダーについては、通常、 HTTP リクエストに追加したヘッダーのみを取得でき、ブラウザによって自動的に追加される組み込みのヘッダーは取得できません。 たとえば、User-Agentヘッダーは、サーバーやネットワーク上の相手先が、リクエストを送信したユーザーエージェントのアプリケーション、オペレーティングシステム、ベンダー、およびバージョンを識別するために使用する固有の文字列です。 これはブラウザによって追加されるものであり、 JavaScript エージェントでは取得できません。 レスポンスのヘッダーについては、クロスオリジンポリシーによってブロックされていない限り、サーバー側から送信される組み込みヘッダーおよびカスタムヘッダーの両方を、 JavaScript エージェントが取得できます。

パラメーター

次の表にパラメータを一覧表示します:

パラメーター 説明
captureHeaders (RegExp[]) JavaScript エージェントにキャプチャさせたい、 HTTPRegExp のリクエストまたはレスポンスヘッダーのキーに対応するオブジェクトの配列。