New Relicで周期性を考慮したアラートが可能に！

New Relicのアラート機能ではAlert conditionを作成して、任意のテレメトリーデータで閾値を基準にアラートをあげることが可能です。この閾値には固定値を用いるStaticと、テレメトリーデータの変化の幅に応じて検知するAnomalyがあります。このAnomalyは例えば急激な変化が生じた際にアラートをあげることができるものですが、場合によってはこの急激な変化が周期的なサイクルとして予測されていた動きであることもあります。

Anomalyではこのような周期的に予測された変化を加味して構成することができます。以前から周期性は自動で加味されていましたが、今回のアップデートでは周期性を手動でも調整できるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/d64b6ec6-d8b6-4782-9da6-b59b5a123ea0.png)

# New Relicでアノマリーを用いたアラートを構成する
そもそもNew Relicではアノマリーで検知するためのアラートをどんなふうに構成できるんでしょうか。軽くおさらいしてみましょう。
New Relicでのアラートの基本的な構成についてはここでは割愛しますが、アノマリーを閾値とした構成はアラートコンディションを作成する際に設定することができます。
閾値設定でAnomalyにチェックすることで、シグナルの変化を基準にした条件を作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/d7fcd3bd-05f1-4e3d-810b-8a1055165b2c.png)

どのくらいの変化でアラートをあげるかは、標準偏差の値で調整することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/e92c6371-3303-426f-a08d-20b2a612694e.png)

数値だけでは分かりづらいかもしれませんが、上部に表示されるチャートでは許容される変化の範囲がグレーで示されます。これまで収集されたデータを元にアラートがあがる箇所をプレビューしてくれるので参考にしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/985e877b-3bfd-4e0b-8ba9-5f550219ae19.png)

# アノマリーでの周期性(Seasonality)の構成
さてここからが本題です。アノマリーの周期性の調整は今回のアップデートで新たに **Calculate seasonality** を構成できるようになりました。ここから変動の周期について設定できるわけですが、設定値はとてもシンプルです。どの期間で周期を計算するかをドロップダウンから選ぶだけ。 **Hourly** 、 **Daily** 、 **Weekly** や計算しない場合は **None** を選択します。あるいはこれまで通りNew Relicで自動計算させる場合は **New Relic calculation** にセットしておくことも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/179a5180-d4f4-4c2a-bd48-b43e030ca84c.png)

# 設定値による違いの例
これらの周期性の設定によってどのような違いが出てくるのでしょうか。
**New Relic calculation**に設定すると周期性が自動計算されます。予測アルゴリズムは周期的な変動を検出し、適用しようと試みます。
どのくらいの変動が予測されているのかは、これまでのデータでの例をプレビューから見ることができます。ここから想定しているアノマリー検知が設定できているかを確認しましょう。

基本的には自動計算により周期性を予測するのが良いとは思いますが、既知の周期的な変動をうまく検知できない場合もあります。この場合は **Calculate seasonality**で把握している周期を設定するのがいいでしょう。

例えば以下はデモ環境のとあるアプリケーションのTransactionのレスポンスです。1日に1度、定期的にデプロイ処理が走っており、そのタイミングでレスポンスが悪くなっています。これが既知の周期性の場合、事象はもう把握ができているので、アラートをあげる必要はないかもしれません。つまり、アノマリーで周期的な変動として予測に組み込んでほしいわけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/f5203173-2382-4f96-aec1-af0b22bdc3fe.png)


以下のプレビューでは自動計算( **New Relic calculation**)によって周期性が考慮できておらず、結果としてアラートが発生する予測になっています。(プレビューではアラートがあがる部分は下部が赤色でマークされます)
通常はレスポンスタイムなどでアラートを設定する場合、上への変動のみをアラート対象にしますが、今回は周期性設定の違いによるプレビューの変化を分かりやすくするために、上下の変動をアラートの対象として設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/b555f011-24b1-4e61-882b-f900896cf87b.png)


こういった場合に手動で周期を調整することで、この変動を予測内にできる可能性があります。
今回のデモ環境に関しては1日1回のデプロイによる変動なので日次の周期となります。設定を **Daily**にしてみましょう。

そうすると以下の通り、変動が予測され、アラートはあがらない状態となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/e47f9dc0-12f8-4d8c-8963-f8870b7e6b4a.png)

ちなみに毎時の変動として **Hourly**にしてみるとうまく変動を予測できずにアラートがあがる状態になります。正しく周期を設定しておく必要性がわかりますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045210/983face9-b8d9-4db1-bc24-60e36d146165.png)

今回のご紹介ではアラート作成時に表示されるプレビューで挙動の違いを確認しましたが、実際のアラートでは作成後に受信した1~4週間分のデータも考慮されるようになるので、予測の精度が高まります。

皆さんの環境でも周期性の設定を適切に実施し、必要なタイミングでアノマリーアラートがあがるように調整してみてください。


# まとめ
New Relicのアラートでアノマリーによって閾値設定した時に設定できる周期性についてご紹介しました。皆さんがアラートで使うデータの周期を考慮して、適切な検知ができるように設定しましょう！

## その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています！
無料でアカウント作成も可能なのでぜひお試しください！

:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::
:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！
](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/66d6a010-e4fe-4004-a09b-c01eaad5a614.png)](https://newrelic.com/jp/contact-sales)