仕組みから学ぶ Web
発展読了目安 16 分#SLO#SLI#エラーバジェット#アラート#監視#SRE

SLO とエラーバジェット — どこまで壊れてよいかを、先に数字で決める

アラームは 1 日 80 件鳴っていた。当番は見なくなり、決済の 5% が失敗していた 2 時間に誰も気づかなかった。鳴らすべきは「何かがおかしい」ではなく、「利用者との約束を、このままだと守れない」とき。

この記事の進み方

What — 3 つの言葉

言葉意味例
SLI(指標)利用者から見た「良い体験」の割合決済の要求のうち、成功したものの割合
SLO(目標)その割合を、期間の中でどこまで保つか直近 30 日で 99.9%
エラーバジェット(予算)目標から逆算した、失敗してよい量30 日で 0.1% = 約 43 分ぶん

大事なのは、SLI が「利用者から見た体験」を数えていることです。CPU 使用率やメモリは、利用者が困っているかどうかと直接は結び付きません。CPU が 90% でも応答が返っていれば誰も困らず、CPU が 20% でも決済サービスが失敗していれば利用者は困ります(ログと監視)。

100% を目標にしない

「落ちないこと」、つまり 100% は、目標にできません。

  • 利用者の回線、ブラウザ、決済サービス、クラウド。自分で直せないものが、すべて 100% ではない
  • 99.9% から 99.99% に上げると、許される失敗は 43 分から 4 分になる。4 分では、人が気づいて何かをする前に使い切る
  • 目標を 1 桁上げるたびに、費用と開発の遅さが大きく増える

目標を決めることは、「この程度の失敗は許す」と決めることです。許せる量が決まれば、それを何に使うかを選べます。新しい機能のリリース、実験、計画的なメンテナンス。

Compareいつアラームを鳴らすか

CPU・メモリ・エラー 1 件、など、おかしくなりそうな兆しで鳴らす。

CPU > 80%        → 鳴る
メモリ > 85%     → 鳴る
エラー 1 件      → 鳴る
応答 > 1 秒      → 鳴る

1 日 80 件。大半は自然に戻る
1 日の通知
80 件
利用者が困っているか
分からない
本当の障害の見つけやすさ
埋もれる
ゆっくり続く失敗
—
急な障害
—
  • –冒頭の事故はこれ。決済の失敗は、いつもの通知に混ざって埋もれた。
  • –原因の数値は、通知ではなく、調べるときに見るもの。

同じ監視の仕組みでも、何を条件に鳴らすかで、当番が見るかどうかが変わる。

確認 — ここまで読めたか

EC サイトの SLI として、最も適しているのはどれですか?

まず選ぶ(解答例は a〜d の記号で説明します)

Why — なぜ数字で決めておくのか

「どこまで壊れてよいか」を、誰も言えない

冒頭の事業側の質問に、誰も答えられませんでした。目標が無いと、すべての失敗が同じ重さに見えます。CPU の一瞬の上昇も、決済の 5% の失敗も、同じ「エラー」の通知です。

SLO があると、失敗に重さが付きます。「決済の成功率 99.9% の約束に対して、このままだと 6 時間で予算を使い切る」は、今すぐ動く理由になります。「CPU が一瞬 80%」は、予算を減らしていないので、動く理由になりません。

予算を使い切ったら、何をするかを先に決める

エラーバジェットのいちばんの価値は、安定と開発の速さの取り合いを、数字で決められることです。

  • 予算が残っている → 新しい機能のリリースを続けてよい。多少の失敗は予算の中
  • 予算を使い切った → リリースを絞り、安定性の改善に時間を使う

ただし、これは事前に、事業側と合意しておく必要があります。使い切ってから「リリースを止めます」と言っても、通りません。

目標の数字の決め方

目標は、次の 2 つから決めます。

  1. 今の実績: 過去 30 日で、実際に何 % だったか。実績より大きく高い目標は、最初から守れない
  2. 利用者が困り始める水準: 問い合わせや解約が増え始めるのは、どのくらいの失敗からか

たとえば、実績が 99.95% で、問い合わせが増えるのが 99.5% を下回ったときなら、99.9% が出発点になります。守れる数字から始め、運用しながら見直します。

確認 — ここまで読めたか

直近 30 日の SLO が 99.9% のとき、エラーバジェットはどのくらいですか?

まず選ぶ(解答例は a〜d の記号で説明します)

演習 — まず自分で判断する

解説を読む前に、まず自分で判断してみてください。ここで一度詰まっておくと、 次の節の判断軸が「なるほど」ではなく「そう来たか」に変わります。

演習 — 設計判断を問う

冒頭の EC サイトの監視を、どう作り直しますか?

与えられた条件
  • 今は CPU・メモリ・エラー 1 件・応答 1 秒超えで鳴らし、1 日 80 件鳴っている
  • 利用者にとって大事なのは、商品を見る・カートに入れる・決済する、の 3 つ
  • 過去 30 日の実績: 決済の成功率 99.95%、商品ページの 1 秒以内の表示 99.2%
  • 当番は 1 人。夜間に呼ばれるのは、本当に今すぐ動くべきときだけにしたい
この軸で考える
  • · 何を数えるか(利用者から見た体験になっているか)
  • · 目標の数字を、何から決めるか
  • · いつ人を呼び、いつ翌日の作業にするか
まず選ぶ(解答例は a〜d の記号で説明します)

演習 — 説明できるか

「目標は 100%、落ちないことに決まっている」と言う事業部長に、SLO を 100% にしない理由を説明してください

与えられた条件
  • 相手は、サービスが止まることで売上と信用が失われることを心配している
  • 相手は技術の詳細には詳しくない
  • 合意してほしいこと(予算を使い切ったときの扱い)も伝えたい

読み終わりましたか?

読了にすると、これを前提とする記事がロードマップで開放されます。

この知識を使う実践ケース