Burn Rate
SLO におけるバーンレート(Burn Rate)は、時間ウィンドウにおいて、サービスが SLO によって許容されるエラーレート(Error Rate)と比較してどの程度エラーを発生させているかを表す。 Burn rate is how fast, relative to the SLO, the service consumes the error budget.
バーンレートの定義
時間ウィンドウ$ wにおけるエラーレートを$ \mathrm{ErrorRate}(w)とする。ここでいうエラーレートは、例えばリクエスト全体における失敗したリクエストの割合が考えられる。
時間ウィンドウ$ wにおけるバーンレート$ \mathrm{BurnRate}(w)は以下のように定義される。
$ \mathrm{BurnRate}(w) = \frac{\mathrm{ErrorRate}(w)}{1 - \mathrm{SLO}}.
例えば、SLO が 99.9% でエラーレートが 0.2% だったとき、バーンレートは $ 0.002 / (1 - 0.999) = 2になる。
エラーバジェット消費量とバーンレート
次に、SLO ウィンドウ$ w_\mathrm{SLO}におけるエラーバジェット(Error Budget)が、時間ウィンドウ$ wの間にどの程度消費されたかを示す割合$ \mathrm{ConsumedErrorBudget}(w)を考える。 0% の場合、時間ウィンドウ中にサービスにエラーが発生しておらず、エラーバジェットが消費されていない。
100%の場合、エラーバジェットがすべて消費された。
$ \mathrm{ConsumedErrorBudget}(w)と$ \mathrm{BurnRate}(w)の関係は以下のように表される。
$ \begin{aligned} \mathrm{ConsumedErrorBudget}(w) &= \frac{|\mathrm{observed\ errors\ in\ }w|}{|\mathrm{acceptable\ errors\ in\ }w_\mathrm{SLO}|} \\ &= \frac{\mathrm{ErrorRate}(w)|w|}{(1-\mathrm{SLO})|w_\mathrm{SLO}|} \\ &= \mathrm{BurnRate}(w) \cdot \frac{|w|}{|w_\mathrm{SLO}|}.\end{aligned}
すなわち
$ \mathrm{BurnRate}(w) = \mathrm{ConsumedErrorBudget}(w) \cdot \frac{|w_\mathrm{SLO}|}{|w|},
$ \mathrm{ErrorRate}(w) = \mathrm{ConsumedErrorBudget}(w) \cdot \frac{|w_\mathrm{SLO}|}{|w|} \cdot (1 - \mathrm{SLO}).
例えば、目標 99.9% の SLO において、そのエラーバジェットを28日の SLO ウィンドウで定め、1時間で2%のエラーバジェットが消費されたときにアラートを発行することを考える。このとき、
バーンレートの閾値は 2% * (28 days / 1 hour) = 13.44。
エラーレートの閾値は 2% * (28 days / 1 hour) * (1 - 0.999) = 13.44 * 0.001。
SLO ウィンドウにおけるエラーバジェット残量
SLO ウィンドウ$ w_\mathrm{SLO}におけるエラーバジェットの残量は以下の式で計算できる。
$ \begin{aligned} 1 - \mathrm{ConsumedErrorBudget}(w_\mathrm{SLO}) &= 1 - \mathrm{BurnRate}(w_\mathrm{SLO}) \cdot \frac{|w_\mathrm{SLO}|}{|w_\mathrm{SLO}|} \\ &= 1 - \frac{\mathrm{ErrorRate}(w_\mathrm{SLO})}{1 - \mathrm{SLO}}. \end{aligned}