問題
Pro + SPA エージェントを使用していますが、期待する route change
ブラウザー インタラクションのすべてが表示されていません。
これがご迷惑をおかけする可能性があることは承知しております。私たちの継続的な目標は、ルート変更の検出とキャプチャに使用する方法から始めて、SPA 機能の機能を改善し、よりシンプルかつ信頼性の高いものにすることです。
解決
短期的なソリューション
すべてのルート変更が確実にキャプチャされるようにするには、 SPA interactive() APIを使用できます。インタラクション API を使用すると、ルート変更が実際に検出されない場合、( category
属性の) BrowserInteraction
イベントが route
変更ではなく custom
として分類されます。
フレームワークがルーターのアクティビティを表すイベントを公開している場合、これらのイベントでカスタムインスツルメンテーションを使用することができます。ここでは、Angularのルーターで当社のAPIを使用する例を示します。
router.events.subscribe((event: Event) => { if (event instanceof NavigationStart) { let i = newrelic.interaction(); i.setName(event.url); i.save(); }});
この例では、 router
オブジェクトは ( @angular/router
モジュールからの) Angular ルーターのインスタンスです。 setName
呼び出しは、 BrowserInteraction
イベントの name 属性を新しい URL に設定し、 save
呼び出しは対話が確実にキャプチャーされるようにします。独自のアプリケーションのフレームワークのニーズに合わせてこれを調整する必要があります。
フレームワークがルーティング イベントを提供しない場合は、 click
などの元の対話イベントのイベント ハンドラーにこのコードを追加できます。
myButton.addEventListener('click', function() { let i = newrelic.interaction(); i.setName('new URL'); i.save();});
推奨事項: ルーター イベントにもインタラクション イベント ハンドラーにもアクセスできない場合は、ユーザー インタラクションの結果であることがわかっているコードにこれをできるだけ早く実装してください。
SPA API を使用する代わりに、ルートを PageAction
イベントとしてキャプチャすることもできます。PageAction
イベントを 使用して、任意のカスタム データをキャプチャできます。このオプションは、SPA インタラクション API の使用が期待どおりに機能しない場合のフォールバックとして、または組み込みの BrowserInteraction
イベントからカスタム インストルメンテーションを完全に分離するためにお勧めします。
これらのソリューションはどちらも、これらのイベントを BrowserInteraction
イベントまたは PageAction
イベントとして確実にキャプチャできます。ただし、正しい継続時間と関連する AJAX 呼び出しの記録には対処しません。
サポート
この方法で問題が解決しない場合は、サポートチケットを提出していただき、以下の情報をご用意ください。
- ほとんどのルートの変更が表示され、期待していた特定のルートの変更が表示されない場合は、その特定のルートのコードの実装の違いを評価してみてください。そのルートについて、サポートチームに提供できるような非標準的な、あるいはユニークなものはありますか?
- フレームワークや興味のありそうなライブラリを文書化してください。これが新しい問題である場合、これらのインタラクションが突然トラッキングされなくなるような環境の変化はありましたか?
- 使用しているブラウザエージェントのバージョンに注意してください。数リリース以上遅れている場合は、同様の問題が既に解決されている可能性があるため、最新のリリースに更新することをお勧めします。
- これらの問題の診断は複雑なため、チームはテストや研究のために問題を実証する環境やコードへのアクセスを必要とする可能性が高いことに注意してください。
原因
ブラウザエージェントは、フレームワークにとらわれず、コーディングのベストプラクティスをサポートしようとしています。しかし、期待したルート変更を収集できないようなエッジケースを見逃すこともしばしばあります。この実装は、最も一般的な非同期ブラウザAPIのインストゥルメントに基づいています。ウェブアプリケーションが非同期APIを使用していたり、カスタムコードやサードパーティコードを使用していても、インストルメント化されていない場合があり、その結果、不正確な経路変更や見逃しが発生することがあります。