外れ値の検知 (NRQL アラート)

New Relic Alerts は NRQL アラート条件として、静的、ベースライン、外れ値の3つの閾値の設定タイプを提供しています。ここでは、外れ値の閾値の種類の仕組み、NRQL クエリの使用方法外れ値用の条件の作成方法を説明します。

外れ値の検出機能は、PRO レベルのサブスクリプションを契約の方のみ利用できます。Essentials プランをお使いの場合は、お使いの New Relic 製品の少なくとも1つを PRO レベルににアップグレードすると、この機能にアクセスできるようになります。

外れ値の検知機能とは?

ソフトウェアの開発と運用では、ほぼ同じ動作を期待しているメンバーから成るグループを持つのが一般的です。たとえば、ロードバランサを使っている場合、サーバーのトラフィックが増減することがありますが、すべてのサーバーのトラフィックはかなり厳密にグループ化されている必要があります。

NRQL アラートの外れ値検出機能は、グループ化された NRQL クエリが返したデータを解析し、以下のことをします。

  • 指定した想定するグループ数を探します。
  • 設定した感度と期間に基づいて異常値(グループから逸脱した値)を探します。

さらに、複数のグループを含めたクエリの場合、グループが同じ動作を開始するときに通知を受けるように選択できます。

New Relic Alerts - outlier NRQL alerts
このビジュアルは違反を引き起こす状況の種類やそうでない状況を理解するのに役立ちます。

この計算の背後にあるルールとロジックが気になる方は、外れ値値検出ルールをご覧ください。

注: この機能は、過去に監視した動作の値は考慮しません。現在報告されているデータの外れ値のみを検索します。過去の動作を考慮したアラートタイプについては、ベースラインアラートをご覧ください。

使用例

ここで紹介するユースケースは、異常値の閾値タイプをいつ使用すればいいのか理解するのに役立ちます。異常値機能には、FACETを含む NRQL クエリが必要であることに注意してください。

負荷分散されたサーバーの負荷が不均一である場合に通知する
ロードバランサは、ウェブのトラフィックを5つの異なるサーバ間でほぼ均等に分割しているとします。あるサーバーが他のサーバーよりも大幅にトラフィックの量が増え始めた場合に、アラート通知を送信するように設定できます。

クエリ例:

SELECT average(cpuPercent) FROM SystemSample 
WHERE apmApplicationNames = 'MY-APP-NAME' FACET hostname
負荷分散されたアプリケーションのインスタンスが正しく動作していない場合に通知する
ロードバランサの背後にあるアプリケーションインスタンスは、各アプリが同様のスループット、エラー率、応答時間である必要があります。インスタンスの状態が不正な状態であったり、ロードバランサの設定が誤っている場合はこれは当てはまりません。アプリケーション全体のエラー率が大幅に上昇しない場合は、集計メトリックを使って1つや2つの不正なアプリインスタンスを検出することは困難です。

アプリインスタンスのスループット、エラー率、応答時間が他のグループから離れすぎた場合にアラート通知を設定できます。

クエリ例:

SELECT average(duration) FROM Transaction 
WHERE appName = 'MY-APP-NAME' FACET host
異なる環境の変化を通知する
アプリケーションが2つの異なる環境にデプロイされ、それぞれに 10 のアプリケーションインスタンスが配置されているとします。1つの環境は実験的であり、別の環境よりも多くのエラーが発生します。同じ環境のインスタンスでは、ほぼ同じ数のエラーが発生するはずです。

インスタンスが同じ環境の他のインスタンスより多くのエラーを発生し始めたときにアラート通知を設定できます。また、2つの環境の間で同じ数のエラーが発生したときに通知を設定することもできます。

会社のログインユーザー数は、4つのアプリケーションでほぼ同じだが、会社が運営する3つのタイムゾーンによって大きく異なるとします。

あるアプリケーションが他のアプリケーションよりも特定の時間帯からより多くの、またはより少ないトラフィックを取得し始めたときに、アラート通知を設定できます。異なるタイムゾーンのトラフィックが同じ場合があるため、タイムゾーングループが重複している場合に通知されないようにアラート条件を設定できます。

この機能の動作を詳しく知りたい方は、異常値のルールとロジックをご覧ください。

外れ値のアラート条件を作成方法

異常値検出を使用するNRQLアラートを作成する手順は以下のとおりです。

  1. アラート条件を作成する際に、Select a product [製品の選択]の下の NRQL を選択します。
  2. Threshold type [閾値のタイプ]で Outlier [外れ値]を選択します。
  3. アラートを適用する値を返す FACETを使って NRQL クエリを作成します。
  4. 返された値のグループの内容に応じて、Number of expected groups [期待するグループの数]を設定します。
  5. グループの中心からの偏差と違反を引き起こす期間を設定します。
  6. オプション: 警告の閾値を追加し、偏差を設定します。
  7. 残りのオプションを設定し、保存を押します。

ルールとロジック

異常値の検出の詳しい仕組みは次のとおりです。

アラート条件ロジックの詳細
アラート条件が作成されると、クエリは収集サイクルごとに1回実行され、アラート条件が適用されます。ベースラインアラートとは異なり、外れ値検出の計算に履歴データは使いません。現在収集されているデータをだけを使用して計算します。

New Relic はクエリから返されたデータをアラート条件の作成中に選択されたグループの数に分割しようとします。

各グループごとに近似平均値が計算されます。アラート条件の作成時に選択した許容偏差は、その平均値を中心としています。グループのメンバーが許容偏差を超えた場合に、違反が発生します。

Trigger when groups overlap [グループの重なったときにトリガーする]が選択された場合、New Relic はグループのコンバージェンスを探します。条件が2つ以上のグループを探している場合かつ、返された値をその数の異なるグループに分けることができない場合、違反が発生します。このタイプの「オーバラップ」イベントは、グループバンドが接触することによってチャート上に表されます。

この機能は過去の行動を考慮しません。そのため、データは決して特定のグループに属しているとはみなされません。これが意味することは、場所を別の値に切り替えると違反が発生しないということです。別の意味としては、一緒に動くグループ全体が違反を引き起こさないということです。

NRQL クエリのルールと制限
NRQL クエリは FACET クエリでなければなりません。そして、1つの属性にのみ影響します。複数の属性で処理されるクエリは機能しません。

返される一意の値の数は500以下でなければなりません。クエリがこの数よりも多くの値を返す場合、アラート条件は作成できません。クエリが作成された後で、この数値以上の数を返された場合、アラートは失敗します。

未返送データはゼロ値扱い
クエリが一連の値を返す場合、実際に返される値のみが考慮されます。値が計算に使用できない場合(収集サイクルから収集されないまでを含む)、それはゼロとして描画され、無視されます。言い換えると、返されていないゼロ値の振る舞いは、違反を引き起こすことはありません。