NerdGraph APIを使用して、NewRelicアラートの信号損失検出とギャップフィリングをカスタマイズできます。たとえば、失われた信号を考慮するまでの待機時間を構成したり、時系列のギャップを埋めるために使用する値を構成したりできます。
信号の損失は、New Relicがデータの受信をしばらく停止すると発生します。技術的には、データが時系列で最後に受信されてからかなりの時間が経過した後に、信号の損失を検出します。信号の損失は、インシデントをトリガーまたは解決するために使用でき、これを使用してアラートを設定できます。
ギャップフィリングは、データポイントが失われたことによる問題を解決するのに役立ちます。有効なデータポイントの間にギャップが検出されると、最後に確認された値や静的な値などの代替値で自動的にギャップを埋めます。ギャップフィリングを行うことで、必要のないアラートの発生や解決を防ぐことができます。
ヒント
システムは、アクティブに報告された信号のギャップを埋めます。 この信号履歴は、2 時間操作がないと削除されます。 ギャップを埋めるために、この非アクティブ期間後に受信されたデータ ポイントは新しい信号として扱われます。
シグナル ロス、ギャップ フィリング、およびこれらの機能へのアクセスをリクエストする方法の詳細については、 このサポート フォーラムの投稿を参照してください。
このガイドでは、以下のことを説明しています。
電波障害検出のカスタマイズ
一定時間が経過してもデータが受信されない場合、信号喪失検出によってインシデントが開始または終了されます。たとえば、有効期限を 60 秒に設定し、統合が 1 分以上データを送信しないように見える場合、信号損失しきい値がトリガーされます。
NerdGraph の次の 3 つのフィールドを使用して、信号損失の期間と、インシデントを開くか閉じるかを構成できます。
expiration.expirationDuration:最後のデータポイントがプラットフォームによって受信されてから、信号が失われたと見なされるまでの待機時間(秒単位)。これは、データのタイムスタンプではなく、データがプラットフォームに到着する時間に基づいています。デフォルトではこれをnullのままにするため、信号損失検出は有効になりません。expiration.openViolationOnExpiration:trueの場合、信号が失われたときに新しいインシデントがオープンされます。デフォルトはfalseです。このフィールドを使用するには、期間を指定する必要があります。expiration.closeViolationsOnExpiration:trueの場合、シグナルに関連する未解決のインシデントは有効期限が切れるとクローズされます。デフォルトはfalseです。このフィールドを使用するには、期間を指定する必要があります。
信号が失われると予想される場合は、インシデントを開かないオプションもあります。 これを行うには、NerdGraph で次のフィールドを使用します。
expiration.ignoreOnExpectedTermination:trueの場合、信号が失われると予想されるときにインシデントは開かれません。 信号が失われると予想されることを示すには、エンティティにタグtermination: expectedが存在する必要があります。 デフォルトはfalseです。 インフラストラクチャ ホスト エンティティの場合、タグhostStatus: shutdownは、信号が停止し、インシデントの発生を防ぐことが予想されることも示します。
既存の状態の信号損失設定を見る
既存のNRQL条件では、信号損失設定がすでに構成されている場合があります。既存の条件設定を表示するには、 nrqlCondition > expirationの下のフィールドを選択します:
{  actor {    account(id: YOUR_ACCOUNT_ID) {      alerts {        nrqlCondition(id: NRQL_CONDITION_ID) {          ... on AlertsNrqlStaticCondition {            id            name            nrql {              query            }            expiration {              closeViolationsOnExpiration              expirationDuration              openViolationOnExpiration              ignoreOnExpectedTermination            }          }        }      }    }  }}このような結果が表示されるはずです。
{  "data": {    "actor": {      "account": {        "alerts": {          "nrqlCondition": {            "expiration": {              "closeViolationsOnExpiration": false,              "expirationDuration": 300,              "openViolationOnExpiration": true,              "ignoreOnExpectedTermination": false            },            "id": "YOUR_ACCOUNT_ID",            "name": "Any less than - Extrapolation",            "nrql": {              "query": "SELECT average(value) FROM AlertsSmokeTestSignals WHERE wave_type IN ('min-max', 'single-gap') FACET wave_type"            }          }        }      }    }  },  ...信号の消失を設定して新たな状態を作る
2 分間データが受信されなかった場合に信号損失しきい値をトリガーする NRQL 静的条件を 新規作成するとします。以下の例のように、 expirationDuration を 120 秒に設定し、 openViolationOnExpiration trueに設定します。
mutation {  alertsNrqlConditionStaticCreate(    accountId: YOUR_ACCOUNT_ID    policyId: YOUR_POLICY_ID    condition: {      name: "Low Host Count - Catastrophic"      enabled: true      nrql: {        query: "SELECT uniqueCount(host) FROM Transaction WHERE appName='my-app-name'"      }      signal {        aggregationWindow: 60        aggregationMethod: EVENT_FLOW        aggregationDelay: 120      }      terms: [{        threshold: 2        thresholdOccurrences: AT_LEAST_ONCE        thresholdDuration: 600        operator: BELOW        priority: CRITICAL      }]      valueFunction: SINGLE_VALUE      violationTimeLimitSeconds: 86400      expiration: {        expirationDuration: 120        openViolationOnExpiration: true      }    }  ) {    id    name  }}条件の信号消失設定の更新
アラート状態の信号損失パラメータを更新したい場合はどうなりますか?次の変更により、NRQL静的条件を新しいexpiration値で更新できます。
mutation {  alertsNrqlConditionStaticUpdate(    accountId: YOUR_ACCOUNT_ID    id: YOUR_STATIC_CONDITION_ID    condition: {      expiration: {        closeViolationsOnExpiration: true        expirationDuration: 300        openViolationOnExpiration: false        ignoreOnExpectedTermination: true      }    }  ) {    id    expiration {      closeViolationsOnExpiration      expirationDuration      openViolationOnExpiration      ignoreOneExpectedTermination    }  }}隙間を埋めるカスタマイズ
ギャップフィリングでは、時系列のギャップ値を、最後に見つかった値か、任意の静的な値で置き換えます。ギャップフィリングを行うのは、信号のギャップの後に別のデータポイントが受信されてから(データ受信が回復してから)です。
タイプがスタティックに設定されている場合、フィリングのタイプと値の両方を設定できます。
signal.fillOption:失われたデータポイントの置換値のタイプ。値は次のとおりです。NONE:ギャップフィリングは無効になっています。LAST_VALUE:時系列で見られる最後の値。STATIC:fillValueで定義された任意の値。
signal.fillValue:fillOptionがSTATICに設定されている場合に失われたデータポイントを置き換えるために使用する値。
重要
ギャップフィリングもexpiration.expirationDurationの影響を受けます。ギャップが有効期限よりも長い場合、信号は期限切れと見なされ、ギャップは埋められなくなります。
例えば、ギャップフィリングを設定した静的なNRQL条件を作成する方法は以下の通りです。
mutation {  alertsNrqlConditionStaticCreate(    accountId: YOUR_ACCOUNT_ID    policyId: YOUR_POLICY_ID    condition: {      enabled: true      name: "Example Gap Filling Condition"      nrql: { query: "SELECT count(*) FROM Transaction" }      terms: {        operator: ABOVE        priority: CRITICAL        threshold: 1000        thresholdDuration: 300        thresholdOccurrences: ALL      }      valueFunction: SINGLE_VALUE      violationTimeLimitSeconds: 28800      signal: {        aggregationWindow: 60        aggregationMethod: EVENT_FLOW        aggregationDelay: 120        fillOption: STATIC        fillValue: 1      }    }  ) {    id  }}