• ログイン

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

NerdGraphチュートリアル。異常検知の設定

New Relic の自動異常検知は、異常検知器から始まります。異常検知器とは、特定のデータセットの異常を体系的に観察し、記録する方法です。データセットに名前を付けて設定するには、異常検出器の設定を作成する必要があります。これは、監視対象のシグナルや異常データをどこに保存するかを示すフィールドのセットです。

ベータ版機能

この機能はまだ開発中ですが、ぜひ試してみてください。

設定には、監視するデータセットの作成方法の違いに対応する3つの種類があります。ワークロード構成では、 ワークロード に含まれるすべてのエンティティをデータセットとして使用して検出器を作成します。エンティティタイプ構成では、1つまたは複数のアカウントの単一の エンティティタイプ (たとえば、モバイルアプリ)のすべてのエンティティをデータセットとして使用します。NRQL構成では、1つ以上の NRQLクエリ の結果をデータセットとして使用します。

異常検知器の設定は、 NerdGraph API で管理することができます。これには、 api.newrelic.com/graphiql にある GraphiQL インターフェースの使用も含まれます。

ここではいくつかの例をご紹介します。

コンフィギュレーションの作成

以下は、既存の ワークロード を使用して構成を作成する NerdGraph 突然変異 の例です。

mutation {
  anomalyDetectorConfigurationsWorkloadAnomalyDetectorCreate(
    workloadGuid: "WORKLOAD_GUID",
    anomalyDetector: {
      name: "NAME_OF_CONFIGURATION",
      excludedEntityGuids: ["ENTITY_GUID_1", "ENTITY_GUID_2", ...]
    }
  )
  {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • workloadGuid: データセットを定義するために使用された ワークロードガイド のこと。異常は、このワークロード内のすべてのエンティティ( excludedEntityGuids で指定されていない限り)からのゴールデンシグナルに基づいて検出される。異常データは、本作業負荷に関連するアカウントに保存される。作業負荷は、後で編集できない。
  • anomalyDetector.name: 構成を説明するためのユーザーフレンドリーな名前を持つ文字列です。
  • anomalyDetector.excludedEntityGuids: オプション。このフィールドでは、ワークロードから削除することなく、データセットから一部のエンティティを除外することができます。これは、異常検知に使用したい既存のワークロードがある場合に便利です。

以下は、 エンティティタイプ を使用して構成を作成するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsEntityTypeAnomalyDetectorCreate(
    accountId: ACCOUNT_ID,
    anomalyDetector: {
      name: "NAME_OF_CONFIGURATION",
      domainType: {
        domain: "ENTITY_DOMAIN",
        type: "ENTITY_TYPE"
      },
      includedEntityGuids: ["ENTITY_GUID_1", "ENTITY_GUID_2", ...],
      additionalSourceAccountIds: [ADDITIONAL_SOURCE_ACCOUNT_ID_1, ADDITIONAL_SOURCE_ACCOUNT_ID_2, ...]
    }
  )
  {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • accountId: 異常なデータを保存し、データセットのエンティティを決定するために使用されるアカウントIDです。このアカウントは後で編集できない。
  • anomalyDetector.name: 構成を説明するためのユーザーフレンドリーな名前を持つ文字列です。
  • anomalyDetector.domainType:
  • domain: エンティティ・ドメインを表す文字列です。
  • タイプ: エンティティ・タイプを表す文字列です。
  • anomalyDetector.includedEntityGuids: オプションです。このフィールドでは、アカウントからすべてのエンティティを追加することなく、一部のエンティティをデータセットに含めることができます。これは、異常検知に使用したい同じタイプのエンティティが数個しかない場合や、静的なデータセットを希望する場合に便利です。デフォルトでは、エンティティタイプ内のすべてのエンティティを使用しますが、時間の経過とともに変更される可能性があります。
  • anomalyDetector.additionalSourceAccountIds: オプションです。このフィールドでは、複数のアカウントからのエンティティをデータセットに含めることができます。これらのアカウントは後で編集可能です。

以下は、 NRQL クエリの結果を使用して構成を作成するミューテーションの例です。:

NRQLバリデーション

すべてのNRQL機能が異常検知に対応しているわけではありません。無効なNRQLのエラーを避けるために、まずシグナルのNRQLを 検証変異 に通してください。

mutation {
  anomalyDetectorConfigurationsNrqlAnomalyDetectorCreate(
    accountId: ACCOUNT_ID,
    anomalyDetector: {
      name: "NAME_OF_CONFIGURATION",
      nrqlSignals: [
        {
          accountId: NRQL_QUERY_ACCOUNT_ID,
          name: "NAME_OF_NRQL_SIGNAL",
          nrql: "NRQL_QUERY",
          mutedFacetValues: ["FACET_VALUE_1", "FACET_VALUE_2", ...]
        }
      ]
    }
  )
  {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • accountId: 異常なデータを保存するために使用されるアカウントIDです。このアカウントは後で編集可能です。
  • anomalyDetector.name: 構成を説明するためのユーザーフレンドリーな名前を持つ文字列です。
  • anomalyDetector.nrqlSignals: カスタムNRQLクエリで定義されたシグナルのリストです。
  • accountId: 問い合わせ先の accountId です。
  • name: 信号を説明するためのユーザーフレンドリーな名前の文字列です。例:"Throughput","ErrorRate", など。
  • nrql: A NRQL クエリ.異常検知は現在、すべてのNRQL機能をサポートしているわけではありません。当社の 検証ミューテーション を使用して、構成を作成する前に NRQL クエリが完全にサポートされていることを確認できます。
  • mutedFacetValues: オプション。このフィールドでは、結果のデータセットからいくつかのファセット値を除外することができます。

設定の更新

以下は、 ワークロード の構成を更新するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsWorkloadAnomalyDetectorUpdate(
    anomalyDetectorId: DETECTOR_ID,
    anomalyDetector: {
      name: "UPDATED_DETECTOR_NAME",
      status: DETECTOR_STATUS,
      deviationSensitivity: DEVIATION_SENSITIVITY,
      excludedEntityGuids: ["ENTITY_GUID_1", "ENTITY_GUID_2", ...],
      thresholds: [THRESHOLD_SIGNAL_1, THRESHOLD_SIGNAL_2, ...]
    }
  ) {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • anomalyDetectorId: 検出器の一意の識別子。
  • anomalyDetector.name: オプション。構成を説明するためのユーザーフレンドリーな名前の文字列です。
  • anomalyDetector.status: オプション。ステータスのデフォルトは ACTIVE です。検出器に異常を生成させたくない場合は、このフィールドを INACTIVE に設定することができます。
  • anomalyDetector.deviationSensitivity: オプション。どのデータが異常であるかを判断するための感度レベルです。このフィールドのデフォルトは LOW で、最も重要な異常のみを記録します。より高い感度が必要な場合は、このフィールドを MEDIUM または HIGH に設定できます。
  • anomalyDetector.excludedEntityGuids: オプション。このフィールドでは、ワークロードから削除することなく、データセットから一部のエンティティを除外することができます。これは、異常検知に使用したい既存のワークロードがある場合に便利です。既存のexcludedEntityGuidsをすべて消去したい場合は、空の配列を渡す [].
  • anomalyDetector.thresholds: オプションです。詳細は、 thresholds のセクションを参照してください。

以下は、 エンティティタイプ の設定を更新するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsEntityTypeAnomalyDetectorUpdate(
    anomalyDetectorId: DETECTOR_ID,
    anomalyDetector: {
      name: "UPDATED_DETECTOR_NAME",
      status: DETECTOR_STATUS,
      deviationSensitivity: DEVIATION_SENSITIVITY,
      includedEntityGuids: ["ENTITY_GUID_1", "ENTITY_GUID_2", ...],
      additionalSourceAccountIds: [ADDITIONAL_SOURCE_ACCOUNT_ID_1, ADDITIONAL_SOURCE_ACCOUNT_ID_2, ...],
      thresholds: [THRESHOLD_SIGNAL_1, THRESHOLD_SIGNAL_2, ...]
    }
  )
  {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • anomalyDetectorId: 検出器の一意の識別子。
  • anomalyDetector.name: オプション。構成を説明するためのユーザーフレンドリーな名前の文字列です。
  • anomalyDetector.status: オプション。ステータスのデフォルトは ACTIVE です。検出器に異常を生成させたくない場合は、このフィールドを INACTIVE に設定することができます。
  • anomalyDetector.deviationSensitivity: オプション。どのデータが異常であるかを判断するための感度レベルです。このフィールドのデフォルトは LOW で、最も重要な異常のみを記録します。より高い感度が必要な場合は、このフィールドを MEDIUM または HIGH に設定できます。
  • anomalyDetector.includedEntityGuids: オプションです。このフィールドでは、アカウント(複数)からすべてのエンティティを追加するのではなく、エンティティタイプから一部のエンティティを含めることができます。これは、異常検知に使用したい同じタイプのエンティティが数個しかない場合に便利です。タイプ内のすべてのエンティティを使用したい場合は、空の配列 [] を渡してください。
  • anomalyDetector.additionalSourceAccountIds: オプションです。このフィールドでは、データセットに複数のアカウントのエンティティを含めることができます。
  • anomalyDetector.thresholds: オプションです。詳細は、 thresholds のセクションを参照してください。

以下は、 NRQL の設定を更新するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsNrqlAnomalyDetectorUpdate(
    anomalyDetectorId: DETECTOR_ID,
    accountId: ACCOUNT_ID,
    anomalyDetector: {
      name: "UPDATED_CONFIGURATION_NAME",
      status: DETECTOR_STATUS,
      deviationSensitivity: DEVIATION_SENSITIVITY,
      newSignals: [
        {
          accountId: NRQL_QUERY_ACCOUNT_ID,
          name: "NAME_OF_NRQL_SIGNAL",
          nrql: "NRQL_QUERY",
          mutedFacetValues: ["FACET_VALUE_1", "FACET_VALUE_2", ...]
        }
      ],
      updatedSignals: [
        {
          queryId: QUERY_ID,
          name: "UPDATED_NAME_OF_NRQL_SIGNAL",
          mutedFacetValues: ["FACET_VALUE_1", "FACET_VALUE_2", ...],
          threshold: THRESHOLD
        }
      ],
      deletedQueries: [QUERY_ID_1, QUERY_ID_2]
    }
  )
  {
    anomalyDetectorId
  }
}

この突然変異の詳細については

  • anomalyDetectorId: 検出器の一意の識別子。
  • accountId: オプション。異常なデータを保存するために使用される accountId です。
  • anomalyDetector.name: オプション。構成を説明するためのユーザーフレンドリーな名前の文字列です。
  • anomalyDetector.status: オプション。ステータスのデフォルトは ACTIVE です。検出器に異常を生成させたくない場合は、このフィールドを INACTIVE に設定することができます。
  • anomalyDetector.deviationSensitivity: オプション。どのデータが異常であるかを判断するための感度レベルです。このフィールドのデフォルトは LOW で、最も重要な異常のみを記録します。より高い感度が必要な場合は、このフィールドを MEDIUM または HIGH に設定できます。
  • anomalyDetector.newSignals: オプション。検出器に追加する信号のリストです。
  • accountId: 問い合わせ先の accountId です。
  • name: 信号を説明するためのユーザーフレンドリーな名前の文字列です。例:"Throughput","ErrorRate", など。
  • nrql: A NRQL クエリ.異常検知は現在、すべてのNRQL機能をサポートしているわけではありません。当社の 検証ミューテーション を使用して、構成を作成する前に NRQL クエリが完全にサポートされていることを確認できます。
  • mutedFacetValues: オプション。このフィールドでは、結果のデータセットからいくつかのファセット値を除外することができます。
  • anomalyDetector.updatedSignals: オプション。変更のあるシグナルのリスト。
  • queryId: 一意のシグナルクエリ識別子。
  • name: オプション。シグナルを説明するためのユーザーフレンドリーな名前の文字列。例:"Throughput","ErrorRate", など。
  • mutedFacetValues: オプション。このフィールドでは、結果のデータセットからいくつかのファセット値を除外することができます。
  • threshold: オプション。詳細は、 閾値 のセクションを参照してください。
  • anomalyDetector.deletedQueries: オプション。検出器から削除するユニークな信号クエリの識別子のリストです。

設定の削除

以下は、あらゆる種類の設定を削除するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsAnomalyDetectorDelete(
    anomalyDetectorId: DETECTOR_ID
  )
  {
    success
  }
}

この突然変異の詳細については

  • anomalyDetectorId: 検出器の一意の識別子。

アノマリーディテクターの設定を問い合わせる

以下は、自分がアクセスできるすべての設定を返すミューテーションの例です。

{
actor {
anomalyDetectorConfigurations {
anomalyDetectors {
id
name
... on AnomalyDetectorConfigurationsWorkloadAnomalyDetector {
workloadGuid {
guid
}
}
... on AnomalyDetectorConfigurationsEntityTypeAnomalyDetector {
domainType {
domain
type
}
}
... on AnomalyDetectorConfigurationsNrqlAnomalyDetector {
nrqlSignals {
name
}
}
}
}
}
}

簡略化されたクエリは、すべてのタイプの構成でアクセス可能なフィールドに興味がある場合に使用できます。

{
actor {
anomalyDetectorConfigurations {
anomalyDetectors {
id
name
}
}
}
}

特定の設定を取得したい場合は、以下のように固有の識別子を含むフィルターを前のクエリに渡します。

{
  actor {
    anomalyDetectorConfigurations {
      anomalyDetectors(filters: {anomalyDetectorIds: [ANOMALY_DETECTOR_ID_1, ANOMALY_DETECTOR_ID_2, ...]}) {
        id
        name
      }
    }
  }
}

この質問の一部について詳細を説明します。

  • フィルター: 任意。
  • filters.anomalyDetectorIds: オプション。一意な異常検知器の識別子のリスト。

QraphiQL explorer で、より多くのクエリ可能なフィールドを見ることができます。

デフォルトのしきい値の照会

以下は、現在のデフォルトの スレッショルドを返すクエリの例です

{
actor {
anomalyDetectorConfigurations {
anomalyDetectorThresholds {
signalName
domainType {
domain
type
}
deviationSensitivity
upperLimit {
active
value
}
upperRelativePercent {
active
value
}
significantDeviationDirection
lowerRelativePercent {
value
active
}
lowerLimit {
active
value
}
}
}
}
}

このクエリについての詳細です。

  • signalName: globalDefault という名前のグローバルな閾値か、信号の閾値を表す文字列(例えば、"throughput," " errorRate," など)。
  • domainType: グローバル閾値にはドメインタイプがありません。

しきい値を1つ以上のdomainTypesにフィルタリングしたい場合は、前のクエリに次のようにフィルタを渡します。

{
  actor {
    anomalyDetectorConfigurations {
      anomalyDetectorThresholds(filters: {
        domainTypes: [
          {
            domain: "ENTITY_DOMAIN",
            type: "ENTITY_TYPE"
          }
        ]
      }
      )
      {
        signalName
      }
    }
  }
}

この質問の一部について詳細を説明します。

  • domainType.domain: エンティティ・ドメインを表す文字列。
  • domainType.type: エンティティタイプを表す文字列です。

カスタムNRQLシグナルの検証

これは、NRQL ベースの異常検知器を作成する場合にのみ有効です。異常検知はすべてのNRQL機能をサポートしているわけではありません。作成時のエラーを回避するために、まず使用予定のNRQLクエリを検証してください。クエリが有効でない場合は、その理由のリストを提供します。空のリストは、あなたのクエリが有効であることを示します。

以下は、NRQL クエリが異常検知に完全に対応していることを検証するミューテーションの例です。

mutation {
  anomalyDetectorConfigurationsValidateNrqlSignal(
    accountId: ACCOUNT_ID,
    nrql: "NRQL"
  ) {
    invalidNrqlReasons
  }
}

この突然変異の詳細については

  • accountId: 問い合わせ先の accountId です。
  • nrql: A NRQL クエリ.

理由は、あなたのクエリが無効である可能性があります。

  • CASES_NOT_SUPPORTED - ケースはサポートされていません。
  • COMPARE_WITH_NOT_SUPPORTED - COMPARE WITH 句はサポートされていません。
  • COULDNT_COMPLETE_QUERY - クエリが返したデータ量が多すぎて、異常検知がサポートできません。
  • DAQS_NOT_ALLOWED - そのクエリは DAQS でサポートされていません。
  • INVALID_NRQL - クエリが無効です。
  • LIMIT_NOT_SUPPORTED - LIMIT 句はサポートされていません。
  • MISSING_FACET - クエリにはファセットの値がありません。
  • MULTIPLE_FACET_NOT_SUPPORTED - クエリごとの複数のファセット属性はサポートされていません。
  • MULTISELECT_NOT_SUPPORTED - 複数の SELECT 句はサポートされていません。
  • NON_NUMERIC_AGGREGATE_NOT_SUPPORTED - 数値以外の値を返すクエリはサポートされていません。
  • NOT_AUTHORIZED - ユーザーは提供されたアカウントへのアクセス権を持っていません。
  • SINCE_NOT_SUPPORTED - SINCE 句はサポートされていません。
  • TIMESERIES_NOT_SUPPORTED - TIMESERIES 句はサポートされていません。
  • TOO_MANY_FACET_VALUES - クエリは異常検出ファセットの限界を超えています。
  • UNTIL_NOT_SUPPORTED - UNTIL 句はサポートされていません。

異常検知のしきい値

閾値とは、信号が異常であると判断される上限& または下限を示す設定のグループです。異常検出器の設定を作成すると、ほとんどの検出器に適したデフォルトの設定が使用されます。

しきい値の照会

デフォルト値には、単一のグローバルしきい値とシグナルしきい値の2種類がある。異常検出器に関連する閾値を照会する場合、 WorkloadAnomalyDetector または EntityTypeAnomalyDetector 内のNULL値は、シグナルのデフォルト値が使用されていることを示します。

NrqlAnomalyDetector内のNULL値は、グローバルなデフォルト値が使用されていることを示します。これらのデフォルト値は時間の経過とともに変更される可能性があります。最新のデフォルト値を取得するには、 thresholds query を使用してください。

しきい値の更新

閾値の変更は、任意の構成編集変異で行うことができる。ワークロードおよびエンティティタイプの設定には、エンティティタイプごとにゴールデンシグナルごとに1つの閾値のリストがあります(ワークロードには複数のエンティティタイプを含めることができます)。

NRQL の構成では、カスタムシグナルごとに 1 つのしきい値があります。以下は THRESHOLD オブジェクトの例で、任意の update mutation でしきい値を更新するために使用されます。

{
  signalName: "SIGNAL_NAME",
  domainType: {
    domain: "ENTITY_DOMAIN",
    type: "ENTITY_TYPE"
  },
  deviationSensitivity: DEVIATION_SENSITIVITY,
  significantDeviationDirection: SIGNIFICANT_DEVIATION_DIRECTION,
  upperLimit: {
    value: LIMIT_VALUE,
    active: STATUS
  },
  upperRelativePercent: {
    value: PERCENT_VALUE,
    active: STATUS
  },
  lowerLimit: {
    value: LIMIT_VALUE,
    active: STATUS
  },
  lowerRelativePercent: {
    value: PERCENT_VALUE,
    active: STATUS
  }
}

このタイプの詳細をご紹介します。

  • signalName: シグナルの名前です。 nrql構成の場合、この名前は nrqlSignal.name と一致しなければなりません。 .
  • domainType: カスタムNRQLシグナルの場合はNULLとなります。
  • domain: エンティティ・ドメインを表す文字列です。
  • タイプ: エンティティ・タイプを表す文字列です。
  • deviationSensitivity: オプション。どのデータが異常であるかを判断するための感度レベルです。値のオプションは
  • NONE - 異常なし。
  • LOW - 異常値が少ない。例えば、ホストのCPU使用率の異常値が多すぎるので、異常値を減らしたいという場合です。
  • MEDIUM - いくつかの異常がある。
  • HIGH - より多くのアノマリー。例えば、あなたのサービスのエラーレートでは異常が少なすぎるので、もっと異常を増やしたいと思うかもしれません。
  • significantDeviationDirection: 任意。シグナルに関連する変化の方向を決定するための有意な方向。値のオプションは
  • HIGHER - 相対的な変化がより大きい場合に異常となる。例えば、自分のサービスのエラーレートが上がったときだけ異常だと判断することができます。
  • HIGHER_LOWER - 相対的な変化がより高いor低い場合に異常となる。
  • LOWER - 相対的な変化が低い場合に異常となる。例えば、サービスのスループットが低下したときのみ異常であると判断することができます。
  • upperLimit: 任意。静的な上限値です。有意な偏差の方向が HIGHER または HIGHER_LOWER の場合、この上限値を超える値は異常とみなされる。
  • : オプション。数値を指定します。
  • active: オプション。TrueまたはFalseを指定します。
  • upperRelativePercent: オプション。有意な偏差の方向が HIGHER または HIGHER_LOWER の場合、このパーセント値よりも高い相対的な変化は異常とみなされる。
  • : オプション。数値を指定します。
  • active: オプション。TrueまたはFalseを指定します。
  • lowerLimit: 任意。静的な下限値です。有意な偏差の方向が LOWER または HIGHER_LOWER の場合、この制限値以下の値は異常とみなされる。
  • : オプション。数値を指定します。
  • active: オプション。TrueまたはFalseを指定します。
  • lowerRelativePercent: オプション。有意な偏差の方向が LOWER または HIGHER_LOWER の場合、このパーセント値よりも低い相対的な変化は異常とみなされる。
  • : オプション。数値を指定します。
  • active: オプション。TrueまたはFalseを指定します。
Copyright © 2022 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.