SLO - arosh/arosh.github.com GitHub Wiki

https://sre.google/workbook/alerting-on-slos/

1: Target Error Rate ≥ SLO Threshold

月間の SLO が 99.9% であるとき、たとえば10分間のエラーレートが 0.1% を超えたらアラートにする方法。

  • good: アラートが一度も起きなければ確実に SLO 達成
  • bad: 過敏すぎる。この例では 0.6 秒止まるだけで 0.1% を超える

2: Increased Alert Window

1 では10分間だったウィンドウをたとえば36時間に延ばす。

  • good: 2分10秒止まるとアラートになる。これは妥当だろう
  • good: アラートが一度も起きなければ確実に SLO 達成という性質は維持されている
  • bad: アラートが一度 trigger されると resolve されるまで36時間かかってしまう

3: Incrementing Alert Duration

ウィンドウは1に戻して(10分間にして)、エラーレートが上がった状態が n 分継続したらアラートとする。

  • good: 過敏すぎる状態は是正された
  • bad: n が深刻度によって変わらない。全断した状態でもエラーレートが0.2%の状態でも、とにかくn分待たされる
  • bad: (アラートウィンドウが10分だとして)10分全断、10分エラーなし、という状態が繰り返されるパターンではアラートにならない。これは一度もアラートが起きていないのに SLO を大きく下回っていた、ということになりかねない

4: Alert on Burn Rate

バーンレートとはエラーバジェットの消費速度(SLO をちょうど達成する消費速度を1とする)である。SLO のウィンドウを28日、SLO を 99.99% としたときのバーンレートが以下である。

Burn rate Error rate for a 99.99% SLO Time to exhaustion
1 0.01% 28 days
2 0.02% 14 days
10 0.1% 2 days + 19.2 hours
100 1% 6 hours + 43.2 minutes
500 5% 80.6 minutes
2500 25% 16.1 minutes
5000 50% 8.1 minutes
10000 100% 4 minutes

アラートウィンドウをA、SLO のウィンドウをW、バーンレートをR、消費されるエラーバジェットの割合をBとしたとき、以下の関係が成り立つ。

B=R*A/W

ここから逆算して「A 時間以内にエラーバジェットが B 以上消費されるような事態が起きたらアラートを出したい」というようなときのバーンレートを計算することができる。

バーンレートR'の障害が起きたときエラーバジェットがB消費されるまでの時間Tは

T=B/R'*W
  • good: 3 と比べると、深刻な障害ではすぐにアラートが出る
  • bad: 設定したバーンレート以下ではアラートが出ない。これは一度もアラートが起きていないのに SLO を大きく下回っていた、ということになりかねない
  • bad: A を1時間に設定すると resolve されるまでに1時間かかることになる

5: Multiple Burn Rate Alerts

バーンレートとアラートウィンドウを複数組み合わせたアラートを設定することもできる。これにより「一度もアラートが起きていないのに、いつのまにか SLO を大きく下回っていた」ということがなくなる。またアラートウィンドウに応じてオンコールを緊急で呼び出すかどうか変えることも考えられる。バーンレートが高くなければ翌営業日での対応でもよい。

SLO のウィンドウを28日としたときの対応は以下の通り。

SLO budget consumption Time window Burn rate Notification
2% 1 hour 13.44 緊急警告
5% 6 hours 5.6 緊急警告
10% 2.8 days 1 通常警告
  • good: 「一度もアラートが起きていないのに、いつのまにか SLO を大きく下回っていた」が解消される
  • good: 深刻度に応じて対応レベルを変更できる
  • bad: アラートウィンドウが大きいものは resolve されるまでに時間がかかる

6: Multiwindow, Multi-Burn-Rate Alerts

アラートウィンドウの12分の1の時間を short window とする。5 のアラートに加えて and で short window でもしきい値を超えているかどうか判定することで、問題が今でも継続しているかどうか判定することができる。

これにより resolve されるまでの時間の問題が解消される。