SLOのアラートにおいて、エラーバジェットの消費速度によるバーンレートアラートを設定することがあると思います。
The Site Reliability Workbookの第5章には、複数ウィンドウのバーンレートアラートについての記載があります。
現在プレビュー機能として公開されているNew RelicのCompound Alertsを使って同様のアラートを作成してみます。
Compound Alerts 機能は、本ブログ執筆時点ではプレビュー段階であるため、今後、仕様変更される可能性があります。
New Relic株式会社のQiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
Compound Alerts とは?
Compound Alertsは、New Relic上で作成した複数のアラートコンディションを、AND や OR などの論理演算子で組み合わせて、1つの新しいアラート条件として定義できる機能です。
詳細については公式ドキュメントをご参照ください。
対象とするSLO
今回、バーンレートアラートの対象とするSLOは以下のようなものを想定します。
- 期間:28日間
- 目標:99.9%
- 指標:エラーの割合(TransactionErrorの数 / Transactionの数)
また、アラートコンディションを作成するにあたり、このSLOのEntity guidを後程使用します。

短いウィンドウと長いウィンドウのアラートコンディション
ここからアラートコンディションを作成していきます。
今回はエラーバジェットの2%を消費するような障害を検知する設定とします。
バーンレートについてはSLOの期間が28日間であるため13.44とします。
どちらのアラートコンディションもNRQLにて指定するentity.guidは先ほど確認したSLOのEntity guidを使用します。
まずは、短いウィンドウのアラートコンディションから作成します。
- NRQL:
FROM Metric SELECT 100 - clamp_max((sum(newrelic.sli.valid) - sum(newrelic.sli.bad)) / sum(newrelic.sli.valid) * 100, 100) AS 'Error rate' WHERE entity.guid = 'NzM1MzU3MnxFWFR8U0VSVklDRV9MRVZFTHwyNjk0ODkx' - Window duration:5 minutes
- Sliding window aggregation:Enabled
- Slide by interval:1 minute
- Streaming method:Event flow
- Thresholds:Query result is above 1.344 at least once in 1 minute.
次に、長いウィンドウのアラートコンディションを作成します。
- NRQL:
FROM Metric SELECT 100 - clamp_max((sum(newrelic.sli.valid) - sum(newrelic.sli.bad)) / sum(newrelic.sli.valid) * 100, 100) AS 'Error rate' WHERE entity.guid = 'NzM1MzU3MnxFWFR8U0VSVklDRV9MRVZFTHwyNjk0ODkx' - Window duration:1 hour
- Sliding window aggregation:Enabled
- Slide by interval:1 minute
- Streaming method:Event flow
- Thresholds:Query result is above 1.344 at least once in 1 minute.
複数ウィンドウのアラートコンディション
作成した2つのアラートコンディションをCompound Alertsを使ってANDをとることで複数ウィンドウのアラートを再現します。
Alerts > Compound Alerts の画面から New compound alertをクリックします。
それぞれ各項目を入力して、Save compound conditionをクリックします。
- Name:任意のアラート名
- Selected conditions:先ほど作成した短いウィンドウと長いウィンドウの2つのコンディションを選択
- Tell us how you want these conditions to work together:a AND b
- Threshold Duration:30 seconds
以上の設定をすることで、2つのコンディションが2つとも閾値を超えた時にアラートイベントが作成されます。
アラートの発生からクローズまでの流れ
10分間、意図的に15%のエラーになるようにリクエストを送って、実際の挙動を確かめてみました。
エラーが15%に到達した後、すぐに短いウィンドウのアラートイベントが作成されました。
そして6分後に長いウィンドウのアラートイベントが作成されました。
短いウィンドウ、長いウィンドウ両方のアラートイベントが作成されたので、Compound Alertsのアラートイベントが作成されました。
Slackには以下のように通知されます。
その後、エラーが0%に戻ると7分後に短いウィンドウのアラートイベントがクローズされました。
短いウィンドウのアラートイベントがクローズされたため、Compound Alertsのアラートイベントもクローズされました。
さらに時間が経った後、長いウィンドウのアラートイベントもクローズされました。
まさに、最初に引用した、以下の画像と同じような挙動になったと思います。
おわりに
以上のように、少し手間ではありますが、複数ウィンドウによるバーンレートアラートを作成することができました。
是非、試してみてください。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!















