New RelicではChange Trackingという機能を提供しています。アプリのデプロイやシステムの構成変更、機能のフラグ変更などをChange tracking eventsとして登録することで、問題が発生した時の原因分析や変更前後のパフォーマンスの変化などを確認できます。

Change tracking eventsはNerdGraph API等を利用して柔軟に登録することが可能です。イベントを作成する際、通常はNew Relicが予め用意している標準のカテゴリーとタイプを指定して分類します。しかし、引数にdataHandlingRulesを加えることで、独自のカテゴリーやタイプを指定することも可能になります。 さらに、カスタム属性を用いて独自のkeyで属性を追加することもできるため、ビジネス要件に合わせてより柔軟かつ詳細にイベントの情報を管理できるようになります。 それでは、それぞれの具体的な設定方法について確認していきましょう。

カスタムカテゴリーとタイプの利用

NerdGraph APIのchangeTrackingCreateEvent mutationを利用してイベントを作成する際、イベントを分類するためのcategoryとtypeを指定します。 DeploymentやFeature Flagといった標準カテゴリーとそれに紐づく標準タイプを利用するのが一般的ですが、お客様の運用によっては独自のカテゴリーやタイプを定義して管理したいケースも考えられます。

その際は、リクエストのパラメータにあるdataHandlingRules内のvalidationFlagsフィールドに、ALLOW_CUSTOM_CATEGORY_OR_TYPEを設定することで独自のカテゴリーやタイプを指定することができます。 このフラグを設定しないと、値が事前に定義された標準カテゴリやタイプと完全に一致しないため、APIはINVALID_INPUTのエラーを返します。

下記リクエストサンプルでは、dataHandlingRulesにALLOW_CUSTOM_CATEGORY_OR_TYPEを指定し、categoryとtypeに標準で用意されていない"Custom Category"と"Custom Type"を指定しています。

mutation {
  changeTrackingCreateEvent(
    changeTrackingEvent: {
      categoryAndTypeData: {
        kind: {
          category: "Custom Category", 
          type: "Custom Type"
        }
      }, 
      entitySearch: {
        query: "name = 'Sample iOS App'"
      }
    }
    dataHandlingRules: {
      validationFlags: ALLOW_CUSTOM_CATEGORY_OR_TYPE
    }
  ) {
    changeTrackingEvent {
      categoryAndType
    }
  }
}

カスタム属性の利用

さらにイベントのカスタマイズ性を高めるパラメータとして、customAttributesがあります。 カテゴリーやタイプでの分類に加えて、より詳細なコンテキストや運用時の環境情報などをイベントに付与したい場合、この機能が活躍します。 customAttributesを使用すると、任意のメタデータをキーと値のペアとして追加できます。値にはstring、 boolean、 number を指定することが可能です。

下記にリクエストのサンプルを示します。注意点として、デフォルトの属性名やNRQLのキーワードとの名前の衝突を防ぐため、特定のキー名の使用は制限されています。 例えば、accountId、description、timestamp、limit、typeなどの名前はキーとして利用できません。設定を行う際は、これらの予約語を避けてキー名を設計するようにしてください。

mutation {
  changeTrackingCreateEvent(
    changeTrackingEvent: {
      categoryAndTypeData: {
        kind: {
          category: "Custom Category", 
          type: "Custom Type"
        }
      },
      customAttributes: {
        customKeyName : "value",
        anotherCustomKeyName: 2.1
      }, 
      entitySearch: {
        query: "name = 'Sample iOS App'"
      }
    }
    dataHandlingRules: {
      validationFlags: ALLOW_CUSTOM_CATEGORY_OR_TYPE
    }
  ) {
    changeTrackingEvent {
      categoryAndType
      customAttributes
    }
  }
}

イベントの確認

作成したイベントをChange TrackingのUI画面で確認すると、指定したカスタムカテゴリとタイプ、そして追加した各属性が正しく記録されていることがわかります。 さらに、標準のイベントと同様に画面上部のフィルター条件から独自のカテゴリを選択できるため、特定の変更履歴だけをスムーズに抽出することが可能です。

13606-customizedChangeTracking

まとめ

New RelicのChange Trackingにおける、ALLOW_CUSTOM_CATEGORY_OR_TYPEによる柔軟な分類と、カスタム属性による独自のメタデータ付与について紹介いたしました。これらを活用することで、単なる変更履歴の記録にとどまらず、自社のビジネス要件にフィットした高度な分析が可能になります。お客様の運用状況に合わせて、適したカスタマイズをお試し下さい。