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
: データセットの定義に使用されるワークロード GUID 。異常は、このワークロード内のすべてのエンティティ (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
: 異常なデータを保存し、データセットのエンティティを決定するために使用される accountId。このアカウントは後で編集できません。anomalyDetector.name
: 構成を説明するわかりやすい名前の文字列。anomalyDetector.domainType
:domain
: エンティティ ドメインを表す文字列。type
: エンティティ タイプを表す文字列。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
: 異常なデータを保存するために使用される accountId。このアカウントは後で編集できます。anomalyDetector.name
: 構成を説明するわかりやすい名前の文字列。anomalyDetector.nrqlSignals
: カスタム NRQL クエリによって定義されたシグナルのリスト。accountId
: 照会されている accountId。name
: シグナルを説明するわかりやすい名前の文字列。例: 「Throughput」、「ErrorRate」など。nrql
: 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
: オプション。このフィールドを使用すると、一部のエンティティをワークロードから削除せずにデータセットから除外できます。これは、異常検出に使用する既存のワークロードがある場合に役立ちます。既存の excludeEntityGuids をクリアしたい場合は、空の配列[]
を渡します。anomalyDetector.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
: オプション。詳細については、しきい値に関するセクションを参照してください。
以下は、 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
: 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
: オプション。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
: 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 オブジェクトの例です。
{ 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
: エンティティ ドメインを表す文字列。type
: エンティティ タイプを表す文字列。deviationSensitivity
: オプション。どのデータが異常であるかを判断するための機密レベル。値のオプションは次のとおりです。
NONE
- 異常なし。LOW
- 異常が少ない。たとえば、ホストの CPU 使用率があまりにも多くの異常を生成しているため、それを減らしたいと判断する場合があります。MEDIUM
- いくつかの異常。HIGH
- より多くの異常。たとえば、サービスのエラー率が生成する異常が少なすぎて、もっと多くしたいと判断する場合があります。
significantDeviationDirection
: オプション。信号に関連する変化の方向を決定するための重要な方向。値のオプションは次のとおりです。
HIGHER
- 相対変化が大きい場合は異常です。たとえば、サービスのエラー率は、上昇した場合にのみ異常であると判断する場合があります。HIGHER_LOWER
- 相対変化が高いか低い場合は異常です。LOWER
- 相対変化が低い場合は異常です。たとえば、サービスのスループットが異常なのは、サービスがダウンしたときだけだと判断する場合があります。
upperLimit
: オプション。静的上限。有意偏差の方向がHIGHER
またはHIGHER_LOWER
の場合、この制限値を超える値はすべて異常と見なされます。value
: オプション。数値。active
: オプション。正しいか間違っているか。upperRelativePercent
: オプション。有意な偏差の方向がHIGHER
またはHIGHER_LOWER
の場合、このパーセント値より高い相対変化率は異常と見なされます。value
: オプション。数値。active
: オプション。正しいか間違っているか。lowerLimit
: オプション。静的下限。有意偏差の方向がLOWER
またはHIGHER_LOWER
の場合、この制限値を下回る値はすべて異常と見なされます。value
: オプション。数値。active
: オプション。正しいか間違っているか。lowerRelativePercent
: オプション。有意偏差の方向がLOWER
またはHIGHER_LOWER
の場合、このパーセント値より低い相対変化率は異常と見なされます。value
: オプション。数値。active
: オプション。正しいか間違っているか。