🆕

New Relic Alert 閾値チューニング入門

に公開

この記事は、AEON Advent Calendar 2023New Relic Advent Calendar 2023の 6 日目です🎉

New Relic Alert 閾値設定難しすぎワロタァ

以下の図にあるような設定項目を全部理解して設定できているという方はさっさと帰っていただいて結構ですが(うそですごめんなさい)、それぞれのパラメーターの意味がよく理解できず Static Threshold Type のみでなんとなく閾値設定頑張っている、という方も多いのではないでしょうか?(知らんけど)

特に Window durationStreaming methodGap filling Strategy あたりは仕組みが少々複雑でなかなか理解するのが難しく NewRelic 初心者の方々には取っ付き難い部分かと思います(ワイもよくわかってない説ある)


ここをすべて理解して設定していると言えるのかい?

New Relic では Alert の閾値を以下のさまざまなパラメーターにより、きめ細かく柔軟に設定できます。
本記事ではそれぞれのパラメーターで最低限抑えておくと良い部分を中心に説明していこうと思います!

  • Threshold Type
    • Static
    • Anomaly
  • Data Aggregation
    • Window duration
    • Sliding window aggregation
  • Streaming method
    • Event flow
    • Event timer
  • Gap filling Strategy

Threshold Type

New Relic Alert 閾値設定の基本のキである Threshold Type は間違いなく抑えておきましょう!
これは閾値をどのように検知するかを決める設定で、Static(静的検知)か Anomaly(異常検知)を選択できます。

Static/Anomaly がそれぞれどのようなパラメーター、ユースケースで選択するかについては以下の通りです。

パラメーター 説明 ユースケース
Static あらかじめ設定した静的な閾値の超過有無で判定 良し悪しを判断できる明確な基準が設けられる場合
Anomaly 過去のデータに基づいて予測された正常範囲からの逸脱有無で判定 周期性の異常を判定したい場合や良し悪しを判断できる明確な基準や材料がない場合

もう少し深掘りしていきます。

Static

前述の通りあらかじめ設定した静的な閾値の超過有無で判定する設定ですが、グラフで見るとわかりやすいかと思います。


赤い線が閾値で赤色の範囲が検知した箇所


こんな感じで設定項目もシンプル

閾値超過の評価方法

Threshold Type Static の評価方法は以下の 2 通りです。

評価方法 説明
for at least XX minutes XX分間閾値を超過する状態が続いたらインシデントがオープンされる
at least once in XX minutes XX分間の間に1回でも閾値を超過したらインシデントがオープンされる

画像の例では When a query returns a value above 1 for at least 5 minutes となっているので クエリ結果の値が1以下でその状態が5分間継続 した場合にインシデントをオープンする設定になっています。

前述の通り、良し悪しを判断できる明確な基準が設けられる場合のユースケース、たとえば「CPU 使用率が 90%を超えた場合」などのアラートを設定したい場合などに有用です。

Anomaly

前述の通り過去のデータに基づいて予測された正常範囲からの逸脱有無で判定する設定ですが、こちらもグラフで見るとわかりやすいかと思います。
画像の灰色の範囲を逸脱すると異常と見做されインシデントがオープンされます。

Anomaly の場合、Static に比べ Threshold direction という設定項目が増えています。

Threshold direction

Upper and lower, Upper only, Lower only が選択でき、値に対してどの方向へのびた場合に検知するかを設定できます。

例えば Upper only だとこんな感じで値がいくら低くなっても検知しません。

Standard Deviation

Static では静的な値を閾値で設定しましたが Anomaly の場合、標準偏差を指定します。
標準偏差の値の増減で正常といえる範囲を設定します。

標準偏差を 3 にした場合と 6 にした場合のグラフを見比べてみてみましょう。


標準偏差を 3 にした場合


標準偏差を 6 にした場合

こんな感じで Severity level の Warning/Critical で標準偏差の値を変えて設定し、運用の中で必要に応じて値をチューニングしていくと良いでしょう。

Window duration

Window durtion についての説明に関しては以下の記事を見ていただくのをオススメします。

https://newrelic.com/jp/blog/how-to-relic/alert-configuration-guidance#toc-window-duration

記事から引用しますが Window duration とは

評価対象のデータを集約する期間を定義するものです。
1minであれば1min範囲内のデータが集約対象、2minであれば2min範囲内のデータを集約します。

とのことなのですが、もしかしたらちょっとわかりづらいかもしれないので図も引用します。

どんな時に使うと良いのか

基本的にはデータの山谷が激しいく、短期間の集約では適切に評価できないようなデータでのアラート設定時に利用するのが良いと思います。

以下はスループットのアラート設定時に Window duration を 1 分に設定した時のグラフですが、データの山谷が激しいことを確認できます(激しいか?)

NRQL
SELECT rate(count(apm.service.transaction.duration), 1 minute) AS 'Throughput' FROM Metric WHERE entity.guid IN ('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') FACET appName TIMESERIES 1 minute SINCE 6 hours ago


Window durationを1分に設定した時のグラフ

もっと平滑化したデータで評価をしたい、となった場合に Window duration を例えば 5 分などにしてみると以下のようなグラフになります。

NRQL
SELECT rate(count(apm.service.transaction.duration), 1 minute) AS 'Throughput' FROM Metric WHERE entity.guid IN ('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') FACET appName TIMESERIES 5 minute SINCE 6 hours ago


Window durationを5分に設定した時のグラフ

Window duration を大きくした場合の注意点もあるので以下に引用します。

なお、Window durationを大きくした場合、集約する期間が広がるため、アラート通知のタイミングもそれに従います。つまり、Window
durationが2minであれば、最短2min間隔となります。Window durationを広げつつ、アラート通知タイミングを細かくしたい場合は、Sliding
windowを利用して評価範囲をオーバーラップさせます。

というわけで Window duration を広げるが、アラート通知タイミングを細かくしたい場合には Sliding window aggregation を利用してあげる必要があります。

Sliding window aggregation

Sliding window aggregation についての説明に関しても以下の記事を見ていただくのをオススメします。

https://newrelic.com/jp/blog/how-to-relic/alert-configuration-guidance#toc-sliding-window

https://docs.newrelic.com/jp/docs/query-your-data/nrql-new-relic-query-language/nrql-query-tutorials/create-smoother-charts-sliding-windows/

そしてこちらも図の方が理解しやすいので、図を引用します。
図の通り、評価範囲をオーバーラップすることで for at least XX minutesat least once in XX minutes などで設定する評価期間を短く設定できるようになります。

Streaming method

Streaming method は特定の集計ウィンドウのデータが揃ったことを判定するロジックとなり、現在、Event flow, Event timer, Cadence の 3 種類のロジックが用意されています。

こちら中々説明が難しいので簡単にまとめると以下のような使い分けをすると良いのかなと思います。

Streaming method ユースケース 具体例
Event flow コンスタント且つ高確率で届くデータ APM/Infrastructure/Browserエージェントなど
Event timer 発生や到着にムラのあるデータ API PolingによるCloud IntegrationやMobileエージェントなど

より詳細については以下も参照してみてください。

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/get-started/choose-your-aggregation-method/

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/understand-technical-concepts/streaming-alerts-key-terms-concepts/

https://newrelic.com/jp/blog/nerdlog/new-aggregation-methods-for-nrql-alert-conditions

Gap filling Strategy

Gap filling Strategy は欠損データの取り扱い定義に関するパラメーターです。
よくわからず none を選択する場面も多いと思いますが、データの欠損がクリティカルな影響を与える場面では Custom static vlaue でアラートを上げるような値を入れたり、妥当な値を入れるなどの調整をすると良いでしょう。
また、値が予測可能で短時間で大きく変化しない場合などは Last known value を設定すると良いでしょう。

パラメーター 説明
none 欠損のまま扱う
Custom static value 固定値で埋める
Last known value 前出の値で埋める

詳細については以下を参照してみてください。

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-nrql-alert-conditions/#data-gaps

まとめ

  • Threshold Type は基本なのでしっかり理解して設定する
  • データを平滑化して評価したい場合 Window duration を大きくし、Window duration の値よりも通知のタイミングを細かく設定したい場合には Sliding window を利用する
  • Streaming method は特定の集計ウィンドウのデータが揃ったことを判定するロジックのこと
    • Cadence は非推奨のため利用しない
    • 継続的に送られるようなデータ(APM/Infrastructure/Browser エージェントなど)を取り扱う場合 Event flow を利用する
    • 発生や到着にムラがあるようなデータ(API Poling による Cloud Integration や Mobile エージェントなど)を取り扱う場合は Event timer を利用する
  • Gap filling Strategy は欠損データの取り扱い定義に関するパラメーターのこと
    • none は欠損のまま扱う
    • データの欠損がクリティカルな影響を与える場面では Custom static vlaue でアラートを上げるような値を入れたり、妥当な値を設定する
    • 値が予測可能で短時間で大きく変化しない場合などは Last known value を設定する

参考

以下、New Relic Alert 設定関連で参考になるリンクなので興味があれば是非見てみてください!

https://docs.newrelic.com/jp/docs/tutorial-create-alerts/create-an-alert/

https://docs.newrelic.com/jp/docs/new-relic-solutions/best-practices-guides/alerts-applied-intelligence/alerts-best-practices/

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/understand-technical-concepts/streaming-alerts-key-terms-concepts/

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-nrql-alert-conditions/#data-gaps

https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/understand-technical-concepts/streaming-alerts-key-terms-concepts/

https://newrelic.com/jp/blog/how-to-relic/understand-nrql-alert-condition

追伸

感謝賞いただきました🎉
https://x.com/Tocyuki/status/1749348451090055306

絶賛採用中です!

イオンスマートテクノロジーではエンジニアをはじめとした様々な職種を積極的に採用中です!
これからとてもおもしろいフェーズへ突入していくと思いますので興味のある方は是非カジュアル面談などで話を聞いてください!

https://hrmos.co/pages/ast

GitHubで編集を提案
AEON TECH HUB

Discussion