Insights JavaScript API 経由でのカスタムイベントとカスタム属性の追加

Insights JavaScript API を使うと、互換性のある New Relic Browser アカウントのユーザーは、イベント、アクション、ルート変更やエンドユーザーがサイトやアプリケーション上で行う基本的なことをキャプチャできます。わずか数行のコー​​ドだけで、PageActions というカスタムイベントを Insights へ送信できます。それにより、JavaScript アプリケーションを計測できます。

PageActions には、自動的に全標準の PageView 属性を含んでいます。これには、地域やデバイスの情報も含まれています。また、New Relic エージェント経由で追加されたカスタム属性も含みます。

互換性と要件

JavaScript API を使って、New Relic Insights へデータを送信するには、以下の要件を満たす必要があります。

要件 説明
サブスクリプションレベル Insights Pro Trial[試用版] もしくは Insights Pro 年間サブスクリプション以上
New Relic Browser アプリ

以下のいづれかの方法でアプリに Browser エージェントをインストールできます。

Browser エージェントのバージョンは、593 以上が必要です。この説明ページからバージョを確認できます。

クライアントの Browser バージョン Recording PageAction イベントの保存には、ブラウザがクロスドメインの XHR をサポートしている必要があります。詳しくは、ブラウザの互換性と要件をご覧ください。

PageAction の生成

JavaScript のコード内で newrelic.addPageAction 関数を呼び出すことにより、PageActions を記録することができます。これらのイベントは、自動的に Insights に送信されます。その後、Insights 上で、actionName 属性を使って、照会できます。以下の例では、様々なイベントから PageActions を記録し、Insights でその結果を取得する様子を示してます。

リンククリックの記録
以下は、ユーザーが Try Me! リンクを押す度に、PageAction イベントを記録するという例です。イベントは、clickedTryMe という actionName で記録されます。

<a href="/demo" id="try-me">Try Me!</a>
<script>
    document.getElementById('try-me').addEventListener('click',function (e) {
        newrelic.addPageAction('clickedTryMe');
    })
</script>

そして、以下の NRQL で、Try Me! が何回クリックされたかを問い合わせることができます。

SELECT count(*) FROM PageAction WHERE actionName='clickedTryMe' SINCE 1 hour ago
ユーザー入力のキャプチャ
これは、Signup フォームがサブミットされた時に、ユーザー入力(メールアドレス)を記録します。イベントは、clickedTryMe という userSignup で記録されます。

<form action="/signup" id="myform">
   <input id="email" name="email">
   <input type="submit" value="Signup">
</form>
<script type="text/javascript">
    document.getElementById('myform').addEventListener('submit', function (e) {
        var email = e.target.elements['email'].value;
        newrelic.addPageAction('userSignup', {email: email});
    })
</script>

そして、以下の NRQL で、記録されたメールアドレスを問い合わせることができます。

SELECT uniques(email) FROM PageAction WHERE actionName='userSignup' SINCE 1 hour ago

PageAction 属性

PageActions には、エンドユーザーの情報を追跡する以下のデフォルト属性があります。

  • referrerUrl: ユーザーこのページにアクセスする前のページの URL を表示します。
  • currentUrl: PageAction 送信時にいたページのURLを表示します。URL フラグメントも含みます。
  • timeSinceLoad: ページがリクエストされてから、PageAction が発生するまでの経過時間(単位:秒)を表示します。
  • browserWidth: PageAction が発生時点のブラウザのウィンドウの幅を表示します。
  • browserHeight: PageAction が発生時点のブラウザのウィンドウの高さを表示します。

カスタム属性と PageActions

PageActions には、カスタム属性 API 経由で追加されたカスタム属性を含みます。また、JavaScript で属性を追加することができ、それにより、エンドユーザーのアクションをトリガーにカスタム属性をキャプチャできます。setCustomAttribute API コールを使って、カスタム属性を設定できます。これを使えば、PageAction イベントに設定した属性をキャプチャすることができます。

属性が設定されると、ページがリロードされるか、手動でその属性を削除されるまで、すべての PageAction イベントで記録されます。また、ウィンドウのロードイベント前に API コールを行われた場合は、Insights アカウントのすべての PageView イベントに追加されます。

以下の例では、3 つのカスタム属性(ユーザー、サブスクリプション ID、使用している製品を識別する情報)をページに追加しています。

newrelic.setCustomAttribute('username', 'user@example.com');
newrelic.setCustomAttribute('subscriptionID', 123);
newrelic.setCustomAttribute('productID', 456);

userSignup アクションの例で示しているように、呼び出しの第2引数にキーと値を含む JSON オブジェクトを渡すと、それを属性としてイベントに記録します。

手動で New Relic のアカウント ID やアプリケーション ID を属性に含める必要はありません。自動的に設定されます。
カスタム属性の名前として、accountIdappId は使用しないでください。アカウント ID とアプリケーション ID 用に予約されています。

トラブルシューティング

以下は、トラブルシューティングのティップスです。

問題 コメント
カスタム属性が表示されない PageView イベントにカスタム属性が表示されない場合は、ページのロードイベント前に setCustomAttribute を呼んでいることを確認してください。ページロード後にカスタム属性がよばれている場合は、PageView には表示されません。
PageAction イベント New Relic Insights に PageAction イベントが表示されない場合は、お使いのアカウントが、互換性があるかチェックしてください。

アカウントに互換性がある場合は、予約後の属性を使っていたり、不正な値を指定していないか確認してください。

制限と制約

PageAction イベントには以下の制限があります。

  • PageAction イベントは、10秒毎に Insights へ送信されます。10秒の収穫サイクル毎に、最大 20 イベントのみ、送信可能です。20 イベント以上となった場合は、それ以上のイベントは、記録されません。
  • カスタム属性の値に、複合オブジェクトを設定できません。文字列や数値などシンプルな型のみです。

以下の単語は NRQL と Insights が使います。属性の名前として使用しないでください。

これが予約語の全てというわけではありません。New Relic Insights が開発中である限り、MySQL の予約語 [external link]は使わないでください。

キーワード 説明
NRQL 構文用語 NRQL の構文用語にある文字列は、属性名として利用できますが、バッククォートで囲む必要があります。例えば、`LIMIT`。NRQL構文用語は、以下のとおりです。
ago, and, as, auto, begin, begintime, compare, day, days, end, endtime, explain, facet, from, hour, hours, in, is, like, limit, minute, minutes, month, months, not, null, offset, or, second, seconds, select, since, timeseries, until, week, weeks, where, with