• ログイン無料アカウント

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

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

問題を作成する

NerdGraphチュートリアル。信号の消失とギャップフィリング

NerdGraph APIを使用して、NewRelicアラートの信号損失検出とギャップフィリングをカスタマイズできます。たとえば、失われた信号を考慮するまでの待機時間を構成したり、時系列のギャップを埋めるために使用する値を構成したりできます。

信号の損失は、New Relicがデータの受信をしばらく停止すると発生します。技術的には、データが時系列で最後に受信されてからかなりの時間が経過した後に、信号の損失を検出します。信号の損失は、違反をトリガーまたは解決するために使用でき、これを使用してアラートを設定できます。

ギャップフィリングは、データポイントが失われたことによる問題を解決するのに役立ちます。有効なデータポイントの間にギャップが検出されると、最後に確認された値や静的な値などの代替値で自動的にギャップを埋めます。ギャップフィリングを行うことで、必要のないアラートの発生や解決を防ぐことができます。

ヒント

アラートシステムは、アクティブに報告された信号のギャップを埋めます。この信号の履歴は、2時間操作が行われないと失われます。ギャップを埋めるために、この非アクティブ期間の後に受信されたデータポイントは新しい信号として扱われます。

信号損失、ギャップの充填、アクセスをリクエストする方法の詳細については、このExplorers Hubの記事を参照してください。

このガイドでは、以下のことを説明しています。

電波障害検出のカスタマイズ

信号損失の検出は、一定の時間が経過してもデータが受信されない場合に、違反を開いたり閉じたりします。例えば、有効期限の期間を60秒に設定し、ある統合が1分以上データを送信しないようであれば、シグナル喪失の違反がトリガーされます。

NerdGraphのこの3つのフィールドを使って、信号損失の持続時間や違反を開くか閉じるかを設定できます。

  • expiration.expirationDuration:最後のデータポイントがプラットフォームによって受信されてから、信号が失われたと見なされるまでの待機時間(秒単位)。これは、データのタイムスタンプではなく、データがプラットフォームに到着する時間に基づいています。デフォルトではこれをnullのままにするため、信号損失検出は有効になりません。
  • expiration.openViolationOnExpirationtrueの場合、シグナルが失われたときに新しい違反が開かれます。デフォルトはfalseです。このフィールドを使用するには、期間を指定する必要があります。
  • expiration.closeViolationsOnExpirationtrueの場合、シグナルに関連する未解決の違反は、有効期限が切れるとクローズされます。デフォルトはfalseです。このフィールドを使用するには、期間を指定する必要があります。

既存の状態の信号損失設定を見る

既存の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
            }
          }
        }
      }
    }
  }
}

このような結果が表示されるはずです。

{
  "data": {
    "actor": {
      "account": {
        "alerts": {
          "nrqlCondition": {
            "expiration": {
              "closeViolationsOnExpiration": false,
              "expirationDuration": 300,
              "openViolationOnExpiration": true
            },
            "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秒に設定し、 openViolationOnExpirationtrueに設定します。

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: BOOLEAN
        expirationDuration: DURATION_IN_SECONDS
        openViolationOnExpiration: BOOLEAN
      }
    }
  ) {
    id
    expiration {
      closeViolationsOnExpiration
      expirationDuration
      openViolationOnExpiration
    }
  }
}

隙間を埋めるカスタマイズ

ギャップフィリングでは、時系列のギャップ値を、最後に見つかった値か、任意の静的な値で置き換えます。ギャップフィリングを行うのは、信号のギャップの後に別のデータポイントが受信されてから(データ受信が回復してから)です。

タイプがスタティックに設定されている場合、フィリングのタイプと値の両方を設定できます。

  • signal.fillOption:失われたデータポイントの置換値のタイプ。値は次のとおりです。

    • NONE:ギャップフィリングは無効になっています。
    • LAST_VALUE:時系列で見られる最後の値。
    • STATICfillValueで定義された任意の値。
  • signal.fillValuefillOptionSTATICに設定されている場合に失われたデータポイントを置き換えるために使用する値。

重要

ギャップフィリングも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
  }
}
Copyright © 2022 New Relic Inc.