New Relic Mobile におけるカスタム属性とカスタムイベント

New Relic Mobile は、New Relic Insights へデータを送信できます。インストール済みのモバイルアプリから、自動的にデータのデフォルトセットを収集し、送信します。この中には、インタラクション、セッション、クラシュについてのデータも含まれます。さらに、より詳細のデータを追跡するためのカスタム属性やカスタムイベントも送ることもできます。

属性とは何か?

属性は、キー/値のペア(名前、値)です。これはアプリケーションのセッション中に記録され、Insights へ送信されます。たくさんのデフォルト属性が、Mobile から Insights へ自動的に記録されます。

また、カスタム属性により、メトリック値やユーザー名など、アプリにおいてその時で記録されるべきデータを追跡することができます。カスタム属性を追加するには、記録したい名前と値を setAttribute に渡します。詳しくは、Android SDK API [英語]iOS SDK API [英語] のドキュメントをご覧ください。

New Relic Mobile におけるイベントとは何か?

New Relic Mobile は、アプリ内部のイベントをカテゴリの数に分割します。各イベントは、CrashInteractionSessionCustom イベントに分類されます。これらのカテゴリは、デフォルトの Mobile 属性の1つとしてキャプチャされます。New Relic Mobile は、SessionInteractionCrash におけるイベントを自動で記録します。. Events in the InteractionCustom カテゴリに属するイベントは、常に関連した Name 属性があります。一方、SessionCrash イベントいはありません。

また、カスタムイベントを作成すると、アプリ内の特定のイベントを追跡できます。例えば、ユーザーの購入という行動を追跡したいとき、購入イベントに値段、SKU、数量を追跡するカスタム属性を付加できます。また、イベントに名前をつけることもできます。(例: Purchase)。詳しくは、Android SDK API [英語]iOS SDK API [英語] のドキュメントを御覧ください。

この機能は何に役立つのか?

Mobile 属性とイベントを利用すると、New Relic Insights で利用可能なアプリの特定の情報を収集することができます。それにより、ユーザーによるアプリの使用方法やパフォーマンスについてより深い分析が可能となるのです。

属性の例: 特定のユーザーの追跡
セッションにまたがったでユーザーを追跡するカスタム属性を作成することができます。その後、そのユーザーのすべてのインタラクションを問い合わせることができます。以下の様に、setAttribute メソッドを呼び出すことで、ユーザ名を属性として追加できます。

iOS 上のユーザー名の設定:

BOOL attributeSet = [NewRelic setAttribute:@"username" value:@"jsmith"];

Android 上のユーザー名の設定:

boolean attributeSet = NewRelic.setAttribute("username", "jsmith");

この属性に対して WHERE 句を使うと、過去1日に指定したユーザー名が行った全アクションを表示できます。

SELECT * from Mobile WHERE username = 'jsmith' since 1 day ago
属性の例: 特定のアクションの追跡

カスタム属性は、アプリケーションで特定のアクションが発生した回数を追跡したい場合にも利用できます。例えば、ボタンがクリックされた回数や、ゲーム内で、レベルアップした回数を追跡することができます。レベルアップを追跡するには、incrementAttribute を呼び出します。これには引数はありません。これは、デフォルト値として、1を持つ属性を生成します。

iOS 上のカウンターの作成:

BOOL levelIncremented = [NewRelic incrementAttribute@"level"];

Android 上のカウンターの作成:

boolean levelIncremented = NewRelic.incrementAttribute("level");

incrementAttribute を続けて呼ぶと、その度に、level 属性に 1 が足されます。

iOS 上のカウンターのインクリメント:

levelIncremented = [NewRelic incrementAttribute@"level"];

Android 上のカウンターのインクリメント::

levelIncremented = NewRelic.incrementAttribute("level");

この処理を最初からやり直すと際は、値を 0 にリセットする必要があります。リセットするには、setAttribute メソッドに 1 (または 0) を渡して、呼び出します。

iOS 上のカウンターのセット:

levelReset = [NewRelic setAttribute:@"level" value:@1];

Android 上のカウンターのセット:

levelReset = NewRelic.setAttribute("level", 1);

Insights では、この level 属性を使って、データをフィルターできます。例えば、usernamelevel があった場合、 max() 関数を使って、以下のように、最もレベルの高いユーザーを見つけだすことができます。

SELECT max(level) from Mobile where username = 'jsmith'
イベントの例: 購入の追跡
アプリ内での購入処理を追跡したい場合、recordEvent を使って、イベントと関連属性(価格、数量、SKU など)を作成できます。

iOS でイベントを作成する:

BOOL purchaseRecorded = [NewRelic recordEvent:@"Purchase" attributes:@{@"sku": @"12345LPD", @"quantity": @1, @"unitPrice": @99.99, @"total": @99.99}];

Android でイベントを作成:

Map<String, Object> purchaseAttributes = new HashMap<String, Object>();

attributes.put("sku", "12345LPD");

attributes.put("quantity", 1);

attributes.put("unitPrice", 99.99);

attributes.put("total", 99.99);

boolean purchaseRecorded = NewRelic.recordEvent("Purchase", purchaseAttributes);

Insights では、Purchase という名前のカスタムイベントを記録します。そんため、以下のように、過去1日のアプリ内で作成した購入を全て問い合わせることができます。。

SELECT * from Mobile where category = 'Custom' and name = 'Purchase' since 1 day ago

New Relic にいつデータが送られるのか?

デフォルトで、New Relic は、アプリのセッション終了時、もしくはクラッシュ時にデータを送信します。アプリがバックグラウンドに移動したときに、セッション終了とみなされます。アプリがクラシュした場合は、そのセッション中の属性とイベントは収集され、Insights へ送信されます。(iOS 上で起きた場合は、アプリが次に起動された際に送信されます。)送信されたイベントと属性のデータは、Insights で問い合わせたり、解析するのに使えます。

Mobile からどのようにして Insights へデータを送信するのか?

上記の例に加えて、各 SDK の API ドキュメントを参照ください。:

関連情報

関連する情報は以下のとおりです。