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も線上に記載されています。
まず、Sample Serviceに対して、Change tracking eventsを登録してみましょう。登録する方法はいろいろありますが今回は検証のためNerdGraph APIを用いて登録を行っています。登録後UIで各entityのグラフを確認すると、Sample ServiceにはChangesとしてグラフ上にマークが表示されます。
また、Sample Serviceを呼び出しているiosとandroidアプリにもRelated Changesとして、グラフ上にマークが表示されます。
次に、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の関係になっていることがわかります。
次に、change tracking eventを登録してみます。 change trackingはentityであれば登録可能なためworkloadにも登録することが出来ます。 登録後UIで各entityのグラフを確認するとRelated Changesとして、グラフ上にマークが表示されます。
このように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でフィルタを設定することで、共通のグループの変更を時系列で確認することが可能です。
まとめ
NewRelicのchange trackingにおける関連付けのパターンをいくつか紹介いたしました。お客様の運用状況に合わせて、適した使い方をお試し下さい。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。