New RelicではChange Trackingという機能を提供しています。アプリのデプロイやシステムの構成変更などをChange tracking eventsとして登録することで、問題が発生した時の原因分析や変更前後のパフォーマンスの変化などを確認できます。 Change tracking eventsは1つのentityにのみ紐づきますが、Entity RelationshipsやgroupIdを用いることで、他のentityの変更も確認することができます。それぞれみていきましょう。

Entity Relationships

New Relic ではEntity relationships という考えがあります。Relationship にはいくつかのタイプがあり、例えば、モバイルアプリがバックエンドのAPIを呼び出すケースではCALLSという関係が自動で作成されます。 そして、entity同士が関係付けられている場合、Change tracking events は登録した entity だけでなく、関係するentityにも紐付けられます。 Change Trackingで対応するrelation typeは限られているため、うまく表示されない場合は、最新のドキュメントをご確認ください。

では、実際にいくつか確認してみましょう。

CALLS

前述のように、モバイルアプリがバックエンドのAPIを呼び出している例になります。 各entityのrelationはmapから確認でき、relation typeも線上に記載されています。

13569_calls

まず、Sample Serviceに対して、Change tracking eventsを登録してみましょう。登録する方法はいろいろありますが今回は検証のためNerdGraph APIを用いて登録を行っています。登録後UIで各entityのグラフを確認すると、Sample ServiceにはChangesとしてグラフ上にマークが表示されます。 13569_sampleServiceCT

また、Sample Serviceを呼び出しているiosとandroidアプリにもRelated Changesとして、グラフ上にマークが表示されます。 13569_mobileRC

次に、Sample Android Appに対して、Change tracking eventsを登録してみます。登録後UIで各entityのグラフを確認すると、Sample ServiceにRelated Changesとしてグラフ上にマークが表示され、Sample Android AppにははChangesとしてマークが表示されます。しかし、Sample iOS AppはSample Android Appと関係がないため、グラフ上にマークは表示されません。

CONTAINS

次に、relation typeがCONTAINSのケースを確認してみます。 CONTAINSの関係を作るためにワークロードを利用します。ワークロードは、関連するエンティティをビジネス関連の単位にグループ化することで、技術スタック全体を整理、監視、トラブルシューティングするのに役立つ機能です。 まず、sample-workloadというワークロードを作成し、各entityを追加します。 ワークロードの画面にあるmapから各entityのrelationを確認すると、sample-workloadが各entityとCONTAINSの関係になっていることがわかります。

13569_contains

次に、change tracking eventを登録してみます。 change trackingはentityであれば登録可能なためworkloadにも登録することが出来ます。 登録後UIで各entityのグラフを確認するとRelated Changesとして、グラフ上にマークが表示されます。

13569_sampleServiceRC

このようにworkloadによって関連するエンティティをグループ化することで、グループ内の変更を1つのeventで管理することができます。

groupId

change trackingのgroupIdを用いることで、複数のchange tracking eventを1つのグループとして管理することもできます。例えば、ある機能に関するデプロイを各entityで行った際に共通のgroupIdを設定しておくことで、Change TrackingUI 上でまとめて確認・比較できます。 下記クエリの例ではgroupIdにgroupAを指定しています。

クエリの例

mutation {
  changeTrackingCreateEvent(
    changeTrackingEvent: {categoryAndTypeData: {categoryFields: {deployment: {version: "v2.0.2"}}, kind: {category: "deployment", type: "basic"}}, entitySearch: {query: "id = 'XXX'"}, groupId: "groupA"}
  ) {
    changeTrackingEvent {
      groupId
    }
  }
}

Change TrackingUIにおいて、groupIdでフィルタを設定することで、共通のグループの変更を時系列で確認することが可能です。

13569_CTUI

まとめ

NewRelicのchange trackingにおける関連付けのパターンをいくつか紹介いたしました。お客様の運用状況に合わせて、適した使い方をお試し下さい。