- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口今ここ
- アプリ処理今ここ
- DB保存
この期は、同じログから SLI の分母と分子をどう決めるかを、実際に数えて確かめます。今回決めるのは分母です。
まず結論
同じ 2,000 行の nginx アクセスログから、分子と分母の決め方4通りで 86.000% / 97.000% / 96.629% / 96.667% が出ました。5xx の 60 件はどの決め方でも同じで、変わったのは何を分母に置くかです。
SLI の値は測ります。何を数えるかは決めます。決めた分母はバジェットの件数まで動かします。
同じログで 5xx は 60 件。4xx 220 件を悪いに数えない方法として、(B)良いに入れる、(C)分母から外す、の2つを試します。99% SLO のバジェット件数はどうなるでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
この回で決めること — 分母
この回で決めるのは分母です。 同じログの同じ行を、SLI の対象に入れるか外すか。外した行は良いにも悪いにも数えられず、バジェットの件数も変わります。
SRE Book 第4章は SLI を a carefully defined quantitative measure と定義します。第15期では「測って出てきた値」の側を見ました。この期は carefully defined の側、何を数えるかを決める作業を、実際に数えて確かめます。
The Art of SLOs(Google のワークショップ教材)のハンドブックは、SLI の式をこう書きます。
The proportion of valid events that were good.
続けて、ある事象をバジェットに数えさせない道を2つ挙げます。
Events can be prevented from counting against an error budget either by including them in the numerator or by excluding them from the denominator. The former is achieved by classifying some events good, the latter by classifying some events invalid.
分子に入れる(良いに分類する)か、分母から外す(対象外に分類する)か。どちらでも「悪い」には数えられませんが、分母の大きさが違ってきます。
分母の呼び名は文書ごとに違います。SRE Workbook 第2章は the number of good events divided by the total number of events、Google Cloud は eligible events。この期では「有効な事象」と呼びます。
- ・SLI = 良い ÷ 有効。バジェット件数 = (1 − SLO) × 有効
- ・悪いに数えさせない道は、良いに入れるか、対象外にするかの2つ
2,000 行を4通りに割る
nginx の後ろに自前アプリを置き、要求を 2,000 件流しました。/api/ はアプリへ転送し、/static/ は nginx 自身が配ります。ログは既定の combined 形式1本です。件数は固定し、順序だけ random.seed(28) で混ぜました。
環境: nginx:1.30(nginx/1.30.5)、python:3.14-slim(Python 3.14.7)、Docker Engine 28.4.0 / Docker Desktop 4.47.0(linux/arm64)、2026-09-28。
1650 20040 30230 30430 400140 40450 42940 50020 503
4xx は 30 + 140 + 50 = 220 件、5xx は 40 + 20 = 60 件。この同じ行を、4通りの決め方で割ります。
by class: 2xx=1650 3xx=70 4xx=220 5xx=60 (/api/ total=1800, /api/ 5xx=60)定義 分子 分母 SLI bad budget@99%A 2xx/3xx / all 1720 2000 86.000% 280 20.00B non-5xx / all (Workbook App.A) 1940 2000 97.000% 60 20.00C 2xx/3xx / (all - 4xx) (4xx invalid) 1720 1780 96.629% 60 17.80D non-5xx / /api/ only (path validity) 1740 1800 96.667% 60 18.00
式にするとこうです。
- A: 良い = 2xx + 3xx = 1,720、有効 = 全件 = 2,000
- B: 良い = 全件 − 5xx = 1,940、有効 = 全件 = 2,000
- C: 良い = 2xx + 3xx = 1,720、有効 = 全件 − 4xx = 1,780
- D: 良い = /api/ − /api/ の 5xx = 1,740、有効 = /api/ = 1,800
5xx の 60 件は4通りとも同じです。 A だけは 4xx も悪いに数えるので悪いが 280 件。B・C・D はどれも悪いが 60 件なのに、値は 97.000 / 96.629 / 96.667 と分かれます。分母が違うからです。2回走らせて出力は完全に一致しましたが、件数を固定した模擬なので、これは再現性の確認であって一般則ではありません。
C は、ハンドブックの「分母から外す」を 4xx に当ててみた構成例です。原典の実例がこの形を 4xx に当てているわけではありません(次節)。出力の B 行の括弧書きは検証時の名札で、付録A の式に近いのは D です(後述)。
A(86.000%)と B(97.000%)は分母がどちらも 2,000 です。差を生んだのは何ですか。
分母から外すのは、何の対象かを決めるとき
原典の実例は、4xx をどちらに置いているでしょうか。
SRE Workbook 第2章は 5XX responses count against SLO, while all other requests are considered successful.、付録A は Any HTTP status other than 500–599 is considered successful. です。4xx は分母に残り、良いに入ります。
The Art of SLOs の Facilitator Handbook も同じ向きで、treat 4xx responses as successes と書き、理由を利用者の誤りや偽のクライアントが 5xx の兆候を埋もれさせるからだとしています。スライドの例は 2XX, 3XX or 4XX (excl. 429) です。
では「分母から外す」は何に使われているか。ハンドブックは validity is determined by request parameters such as hostname or request path と書き、Facilitator Handbook は外から確かめるために自分で送る要求を UserAgent で見分けて ignore those requests as invalid としています。対象外にするのは「この SLI が見る要求か」で決まる事柄で、4xx ではありません。
語についての注意も1つ。SRE Workbook 第2章と付録A の保存原文を全文検索した範囲では、分母を指す valid の語はありません。第3章・第5章は確かめていません。
付録A の式は B ではなく D に近い
付録A の可用性の式は次のとおりです。
count of "api" http_requests whichdo not have a 5XX status codedivided bycount of all "api" http_requests
分母は全件ではなく all "api" http_requests です。成功判定は B と同じでも、分母はすでに "api" に絞られています。実演の D(1,740 ÷ 1,800)がこの形です。
分母はバジェットの件数も決めます。Google Cloud はこう書きます。
Your error budget for a compliance period is (1 − SLO goal) × (eligible events in compliance period).
Workbook 第2章の例では、99.9% で4週間に 300 万要求なら予算は 3,000 件、1回の障害で 1,500 件失えば予算の 50% です。実演の 99% SLO では、B が 0.01 × 2,000 = 20 件、C が 0.01 × 1,780 = 17.8 件、D が 18 件。17.8 件をどう丸めるかは原典に規定がありません。
SRE Workbook 付録A の可用性の式に最も近いのは、実演の A〜D のどれですか。
B: 4xx を良いに入れる
Workbook 付録A の成功判定(5xx 以外は成功)を、対象を絞らずに全件へ当てた形。4xx は分母に残り、分子にも入る。
良い 1,940有効 2,000SLI 97.000%予算 20 件(99%)
C: 4xx を対象外にする
ハンドブックの「分母から外す」を 4xx に当てた構成例。4xx は分母にも分子にも入らない。原典の実例はこの形を 4xx に当てていない。
良い 1,720有効 1,780SLI 96.629%予算 17.8 件(99%)
同じ「4xx を悪いに数えない」なのに、なぜ SLI と予算の件数がずれるのでしょうか。
悪いの件数ではなく、割る数を比べてください。
この章のまとめ
- SLI は 良い ÷ 有効。値は測るが、何を分母と分子に置くかは決める。
- 同じ 2,000 行から 86.000 / 97.000 / 96.629 / 96.667%。5xx の 60 件はどれでも同じ。
- 悪いに数えさせない道は 良いに入れる か 対象外にする かの2つで、分母とバジェット件数(1 − SLO)× 分母が変わる。
- Workbook も Art of SLOs の実例も、4xx は 良い に入れている。対象外にするのは path・hostname・自分で送る確認用の要求。
- 付録A の分母は
all "api" http_requestsで、実演の D に近い。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
The Art of SLOs の進行役向け資料とスライドの実例は、4xx をどう数えていますか。
用語集(3語)
- 有効な事象 (valid events)
- SLI の分母。The Art of SLOs のハンドブックの語。SRE Workbook は total、Google Cloud は eligible events と書く。対象外にした事象はバジェットに数えられない。
- 良い事象 (good events)
- SLI の分子。有効な事象のうち、良い結果だったもの。
- バジェット件数
- (1 − SLO) × 有効な事象の件数。1 − SLO は割合で、件数にするには分母を掛ける。分母を変えると件数も変わる。
出典(一次ソース)
- The Art of SLOs — handbook(ワークショップ教材 PDF。版・日付の表記なし、2026-09-28 取得)p.6 The SLI Equation ↗
- The Art of SLOs — Facilitator Handbook(PDF。版・日付の表記なし、2026-09-28 取得)PDF p.21-22 ↗
- The Art of SLOs — スライド(PDF。版・日付の表記なし、2026-09-28 取得)PDF p.62 ↗
- SRE Workbook(© 2018)— Chapter 2. Implementing SLOs ↗
- SRE Workbook(© 2018)— Appendix A. Example SLO Document ↗
- SRE Book(web 版、© 2017)— Chapter 4. Service Level Objectives ↗
- Google Cloud Observability — Concepts in service monitoring(Last updated 2026-09-25 UTC) ↗
- nginx — Module ngx_http_log_module(2026-09-28 取得。実演は nginx 1.30.5) ↗