JavaScript エージェント API
JavaScript エージェントAPIと Web REST APIは異なる。 Web REST APIは、収集したデータに対してクエリーを実行したり、新しいウェブサイトを構成したりするために使用できる。
JavaScript エージェントは、監視対象のウェブサイトで利用可能なAPIを公開する。 あなたのウェブサイトは、 JavaScript エージェントのAPIと相互作用して、収集したデータを充実させたり、設定したり、カスタムイベントを送信したりすることができます。
JavaScript エージェントバージョン
Instana Javascript (Weasel) エージェントのすべてのバージョン更新、機能、バグ修正は、 GitHub の Changelog ファイルでご覧いただけます。
グローバル・オブジェクト
Instana JavaScript エージェントは、ineum という新しいグローバル関数を定義しています。 この関数は、HTML 文書内の JavaScript スニペットの直後で使用できます。 つまり、エージェント自体がダウンロードされていなくても、その機能は存在するということだ。 これは、ineum API 呼び出しを簡単かつ効率的に行えるようにすることを目的としています。
エージェントがまだダウンロードされていない場合、 ineum は実行されたすべてのAPIコールをキューに入れます。 エージェントがダウンロードされた後、これらの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 内で固有の Web サイトとしてモデル化し、展開に応じて 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
ビーコンは、 HTTP GET および POST を介してレポート URL に送信され、Instana にモニタリングデータを配信します。
ineum('reportingUrl', reportingUrl);
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
reportingUrl (string) |
ウェブサイト監視データの送信先 URL。 |
例
SaaS、正しいコンフィギュレーションがInstanaのユーザーインターフェイスに表示されます。 オンプレミスのユーザーは、設定されている EUM エンドポイントに基づいて正しい URL を識別する必要があります。
複数のバックエンド
場合によっては、 JavaScript エージェントを複数のバックエンドにレポートさせることが望ましいかもしれない。 この場合、 reportingBackends コマンドを使用して、 JavaScript エージェントを複数のバックエンドにレポートさせる。
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.
}
コマンド reportingBackends は、Instana Release 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 や window.href ではなく、 product detail page や payment selection のような論理名を使用する。 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ヘッドに
autoPageDetectionAPIコマンドを追加する。以下のコマンドを使用して、 ウェブサイトの自動計測を設定する:
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 イベントを無視することを要求するかもしれません。 ignorePopstateEvent パラメータが true に設定されている場合、 JavaScript エージェントはページ変更のための popstate イベントを無視します。
ineum('autoPageDetection', {ignorePopstateEvent: true});
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
mappingRule (RegExp[], string) |
ページ変更の URL にマッチする RegExp オブジェクトの配列が、指定された文字列に置き換えられます。 マッピング結果が空の場合、このトランジションは無視される。 titleAsPageName が true に設定されている場合は、マッピング・ルールを提供しない。 |
titleAsPageName (boolean) |
trueに設定すると、ページ遷移のビーコンでドキュメントのタイトルがページ名として使われる。 falseに設定すると、ページ遷移ビーコンのページ名として、ページ URL、またはマッピングルールのいずれかが使われる。 |
ignorePopstateEvent (boolean) |
trueに設定すると、 JavaScript エージェントは、ページ遷移を検出したときにブラウザによって生成される popstate イベントを無視します。 |
例
例えば、 URL に https://example.com/accounts/checkUserDetails が含まれている場合、Instana 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 エージェントは、 を呼び出した後、ブラウザAPIを使用する。 localStoragetrackSessions ブラウザAPIを使用する。 厳密には、セッションとはランダムなIDのことで、ブラウザの localStorage 、 in-session というキーの下に、2つのタイムスタンプとともに保存される。
プライバシー規定の順守は、この 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を定義することは、ページロードのバックエンドとフロントエンドの処理の相関を得るために必要である。 XMLHttpRequest 、 fetch リクエスト間の相関には必要ない。 トレース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 やCSSファイルのURL)に対する評価。 正規表現のいずれかに一致するリソースに関する情報は、Instanaに送信されません。
XMLHttpRequestやfetchなど、 HTTP 呼び出しの対象 URL に対する評価。 正規表現のいずれかに一致する HTTP コールに関する情報は、Instana には送信されない。
ineum('ignoreUrls', ignoreUrls);
Instanaは、ドキュメントのURL、つまりブラウザのアドレスバーに表示される URL ( secrets 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[]) |
RegExp オブジェクトを持つ配列。 URL のパスにマッチし、そのフラグメントが再編集される。 |
例
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のユーザータイミング: ⚛️ または ⛔ の絵文字で始まるマークとメジャー
- 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 が
queryTrackedDomainListのエントリと一致しない場合、 URL を Instana バックエンドに送信する前に、すべてのパラメータが除外される。
パラメーター
| パラメーター | 説明 |
|---|---|
queryTrackedDomainList (RegExp[]) |
すべてのパラメータを含む、追跡したい URL の名前にマッチする RegExp オブジェクトの配列。 |
例
以下の例では、正規表現 /\/comet.+/i、 /\/ws.+/i 、 /example.com/i にマッチするURLは、そのパラメータとともに完全に収集される:
ineum('queryTrackedDomainList', [
/\/comet.+/i,
/\/ws.+/i,
/example.com/i
]);
バックエンド相関のための W3C トレース・ヘッダをサポートする
ブラウザがリモートサーバーにリクエストを送信し、Instanaエージェントがリモートサーバーを監視する場合、サーバーのレスポンスに HTTP Server-Timingヘッダーが含まれ、ブラウザで実行されるInstanaエージェントに backendTraceId 。 リモートサーバーで OpenTelemetry が有効になっている場合、 tracestate HTTP ヘッダーには backendTraceId を含めることができる。
tracestate と traceparent は、分散トレースIDの関連付けに使用される W3C-defined ヘッダーである。 W3C トレース・ヘッダーの詳細については、 トレース・コンテキスト・レベルを参照のこと。
リモートサーバーが OpenTelemetry を使用し、 tracestate ヘッダーで backendTraceId を提供できると予想される場合、ブラウザの Instana エージェントは enableW3CHeaders API を true に設定し、 W3C ヘッダーの backendTraceId 値を使用する必要があります。
backendTraceId Server-Timing ヘッダー、 ヘッダー、そしてブラウザーの APIを使った手動です。 tracestate traceId これらのアプローチの順序は以下の通りである:
enableW3CHeaders、2つの選択肢がある。 まず、現在のページのメタデータtraceparentからtracestateの値を取り出し、それを使う。tracestateを取得できない場合、 W3C トレースコンテキストと互換性のある16文字の長い文字列が生成され、使用される。enableW3CHeadersが無効になっている場合は、まずtraceIdAPI が呼び出されているかどうかを確認する。traceIdAPIが呼び出された場合は、そのIDをbackendTraceIdとして使用する。traceIdAPIが呼び出されていない場合は、 HTTP ヘッダーのServer-Timingを解析し、backendTraceIdを取得する。- 上記のいずれの値も利用できない場合は、ビーコンとバックエンドのトレースを関連付けることはできない。
ineum('enableW3CHeaders',true);
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
この機能を無効にするか有効にするかのフラグ。 |
例
次の例は、 W3C ヘッダーが有効になっていることを示している:
ineum('enableW3CHeaders', true);
ページ・ロード後の最大待ち時間の構成
追加のメトリクスを収集するために、 JavaScript エージェントは以下の条件が一致するまで待機します。 例えば、最初の入力遅延や累積レイアウトシフトなどである。
- すべてのメトリクスが利用可能
- ページがアンロードされた(タブが閉じられたなど)
- 最大待機時間が経過するまで
この API を使用して、最大待ち時間を再構成することができます。 デフォルトでは、Instana はページのロードが終了してから最大 1 秒間待機します。つまり、 onLoad イベントが終了します。
ineum('maxMaitForPageLoadMetricsMillis', durationMillis);
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
durationMillis 数 |
ページロードが終了してからページロードビーコンが送信されるまでの最大待機時間(ミリ秒)。 |
例
ineum('maxMaitForPageLoadMetricsMillis', 500);
ページ・ロード ID の取得
カスタム相関を行いたい場合など、ページロードのIDを手動で受け取ることが役に立つことがある。 この関数は、 JavaScript エージェントがロードされない限り、 undefined を返す。 JavaScript エージェントがロードされると、常に同じ string を返す。
ineum('getPageLoadId');
戻り
string または undefined のページロードID。
例
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 Error。 Instanaは、これらのエラーにアクセスできるようにする方法、つまり実際のエラーメッセージとスタックにアクセスする方法についての ガイダンスを提供する。 サードパーティが必要な Access-Control-Allow-Origin ヘッダーを追加しないなどの理由で、これらの指示に従えない場合があります。 このような場合、Instanaは、 Script Errorsのインサイトを改善する代替手段を提供する。
このメカニズムは銀の弾丸ではない。 視認性が向上し、より有用なトラッキングエラーが発生するようになるが、それでも(数は減るが) Script Error。 詳細については、 クロスオリジン・ガイダンスを参照のこと。
DOM イベント・リスナー・エラーの明示的なトラッキング
これにより、Instana エージェントがすべての DOM イベントリスナーのコールスタックに入ります。 Instana エージェントは、イベントリスナーの関数の周りに try/catch ステートメントを自動的に配置します。 これにより、クロス・オリジン・エラーに対する洞察が向上します。
ほとんどのお客様にとってこの値は疑わしいため、この機能はデフォルトで 使用不可 です。 さらに、ウェブ・ブラウザがウェブ・セキュリティ・モデルのこの穴にパッチを当て始めているため、この方法でスクリプト・エラーに関するより良い情報を収集できる保証はない。
ineum('wrapEventHandlers', enabled);
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
enabled (boolean) |
この機能を無効にするか有効にするかのフラグ。 |
例
ineum('wrapEventHandlers', true);
タイマー・エラーの明示的なトラッキング
これにより、インスタナ・エージェントは、すべてのタイマーのコールスタックに入る。 Instanaエージェントは、タイマーハンドラの関数の周りに自動的に 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, 任意指定) |
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 によって提供されているウェブサイトは、 XMLHttpRequestを https://shop.example.com:443 にすることはできません。
このセキュリティ制限を回避するために、CORS( Cross-Origin Resource Sharing )が利用できる。 CORS を使用すると、クロス・オリジン・リソース・アクセスに対してオリジンを許可できます。 既にアプリケーション内にクロス・オリジン・リソース・アクセスがある場合は、何らかの CORS ヘッダーを既に使用しているはずです。
Instana バックエンド相関を有効にするには、次の手順を実行します:
サーバー・サイドで以下のヘッダーによって応答することにより、クロス・オリジン要求に対して Instana の相関ヘッダーを許可します。
注意: あなたのサーバーは、 プリフライトリクエストと通常のリクエストの両方に対して、これらのヘッダーで応答しなければなりません。 プリフライトリクエスト(OPTIONSHTTP メソッドで識別可能)は、ブラウザによって実行され、リクエストがサーバーに発行される可能性があることを確認する。Access-Control-Allow-Origin: https://your-origin.example.com Access-Control-Allow-Headers: X-INSTANA-T, X-INSTANA-S, X-INSTANA-LCORSが正しく設定され、相関ヘッダーを設定しなければならないことを、 JavaScript エージェントに通知する:
ineum('allowedOrigins', urls);
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
urls (RegExp[]) |
許可される URL と突き合わせる RegExp オブジェクトの配列。 |
開始
allowedOrigins コマンドは、Instana リリース 185 以降で使用できます。 以前のリリースでは、別名 whitelistedOrigins を使用してください。
別名
コマンド whitelistedOrigins は、allowedOrigins に対する非推奨の別名です。
例
ineum('allowedOrigins', [/.*api\.example\.com.*/]);
これらの変更後にアプリケーションが正しく機能することを確認してください。 サーバー側で CORSを設定することなく、 JavaScript エージェントにバックエンド相関ヘッダー(オリジンを許可する)を追加するよう指示すると、高い確率でウェブサイトが壊れます!
HTTP リクエストまたはレスポンスのヘッダーをキャプチャする
XMLHttpRequest または fetch リクエストの HTTP リクエストまたは応答ヘッダーは、 JavaScript エージェントによって捕捉できる。 captureHeaders コマンドを使用して、JavaScript エージェントにキャプチャーさせる HTTP ヘッダーを定義できます。
ブラウザー内では、同一生成元ポリシーによってカスタム・ヘッダーのアクセスが制限されます。 クロス・オリジン・リソース共有 (CORS) 構成がないと、JavaScript エージェントがすべての HTTP ヘッダーをキャプチャーできない場合があります。 CORS を有効にするには、 クロス・オリジン要求のバックエンド相関を参照してください。 CORSでは、CORSが満足するリクエストまたはレスポンスヘッダーと、Access-Control-Expose-Headersで定義されるものだけが、 JavaScript エージェントによって収集される。
パラメーター
以下の表にパラメータを示します:
| パラメーター | 説明 |
|---|---|
captureHeaders (RegExp[]) |
JavaScript エージェントにキャプチャさせたい HTTP リクエストまたはレスポンスヘッダーのキーにマッチする RegExp オブジェクトの配列。 |
開始
captureHeaders コマンドは Instana リリース 216 から利用可能です。
例
ineum('captureHeaders', [/content-type/i]);