## 概要
[[Fred Moyer]](Zendesk、SLOgician)が SREcon20 Americas で発表した 20 分トーク。Zendesk の 1,000 名規模のエンジニア組織を対象に、SLI/SLO/エラーバジェットの実装公式と、レイテンシ・可用性を複合した単一エラーバジェット設計、さらにサービス依存関係をまたいだマルチサービスエラーバジェットの問題を解説した。前年の "Latency SLOs Done Right" (SREcon19 Americas) で示したパーセンタイル問題の実装論を、Zendesk での実地展開として拡張した発表である。
## 主要メッセージ
- **エラーバジェットは信頼性作業と機能作業の優先順位を決める**(p.4)
- **SLI/SLO/EB の公式は人間とコードの両方が解析できる形式にする**(p.13, p.20, p.27)
- **レイテンシ AND 可用性を OR 結合した複合 SLI で単一 EB を管理できる**(p.29-31)
- **マルチサービス構成では依存先のエラー率が上位層の観測誤差率に加算される**(p.33-35)
## 視覚的に重要な図表
**p.13 SLI の公式(カラーコーディング)**
![[_attachments/2020__SREcon20Americas__Latency-and-Availability-Error-Budgets-Done-Right-at-Scale/page-013.png]]
SLI を `[Metric Identifier]`(赤)`[Operator]`(青)`[Metric Value]`(橙)の 3 要素に色分けし、人間と機械が解析可能な構造として明示する。
**p.30 Latency AND Availability の複合 SLI/SLO/EB**
![[_attachments/2020__SREcon20Americas__Latency-and-Availability-Error-Budgets-Done-Right-at-Scale/page-030.png]]
SLI = `(response code != 5xx) OR (served in < 100ms)`、SLO = `99% of (SLI) over last 7 days`、EB = `Allow 1% failure of (SLI) over last 7 days` として、一つの SLI に可用性とレイテンシを OR 結合している。
**p.31 Zendesk の SLO 設定 UI(実装例)**
![[_attachments/2020__SREcon20Americas__Latency-and-Availability-Error-Budgets-Done-Right-at-Scale/page-031.png]]
Zendesk の内部ダッシュボードで、Good events を `a - b - c`(全リクエスト - レイテンシ超過 - 5xx エラー)として複合クエリを定義し、7 日・30 日・90 日の三つの時間窓に対して `Target: 99.95% / Warning: 99.99%` を設定した例。エラーバジェット消費率「25.502%」が緑表示されている。
**p.35 マルチサービス構成でのエラー率伝播**
![[_attachments/2020__SREcon20Americas__Latency-and-Availability-Error-Budgets-Done-Right-at-Scale/page-035.png]]
Edge tier(1% EB)→ Mid tier(1% EB)→ \[Third party(1.0% ER)| Backend(0.1% ER)\] の構成で、Edge tier は自身 0.1% ET ER + Mid tier 起源 1.2% MT ER を観測し、Mid tier は自身 0.1% MT ER + (Third party + Backend) 起源 1.1% TP+BE ER を観測する。どちらも 1% EB を超えて見えるが、Mid tier の実際のコードバグ由来は 0.1% のみ。
## 公式の体系
スライドで明示された 3 つの公式(p.9-13、p.15-22、p.23-27):
| 層 | 公式形式 | 例 |
|---|---|---|
| SLI | `[Metric Identifier] [Operator] [Metric Value]` | `95th percentile home page latency over 5 min < 500ms` |
| SLO | `[Success Objective] [SLI] [Period]` | `99% of (SLI) over the trailing month` |
| Error Budget | `[Error Budget] [SLI] [Period]` | `Allow 1% failure of (SLI) over the trailing month` |
エラーバジェットの基本式: `Error Budget = 1 - SLO`(例: SLO 99% → EB 1%)(p.22)
## エラーバジェット民主化の 3 原則
p.28 "Keys to Error Budget Democratization":
1. **実例を参照しやすい形で示す**——チームが独自の定義を作るための手本
2. **人間とコードが解析できる公式にする**——自動化・ツール連携を可能にする
3. **明示的であること;小さな詳細が大きな差をもたらす**——曖昧さを排除する
## 参照元(prior art)
p.5-6 でレビューした資料:
- *Site Reliability Engineering*(Google SRE Book)
- *The Site Reliability Workbook*
- *Implementing Service Level Objectives*(Alex Hidalgo)
- Google Cloud "SLIs, SLOs, SLAs, oh my!"(Seth Vargo, Liz Fong-Jones)
- "Latency SLOs Done Right"(Fred Moyer、SREcon19 Americas)——本発表の前身
## 口頭説明・補足
以下は Whisper transcript から得た、スライドに載らない口頭説明(Source: transcript.md):
**SLI 違反と SLO 違反の区別**(重要な概念的区別):
> "notice i didn't say slo violation which is like an sla violation because that's a one-time event per evaluation period you violate your slo when you have exhausted your air budget"
SLI 違反はエラーバジェットを少しずつ削る都度発生のイベントであるのに対し、SLO 違反はエラーバジェットを使い切った時点で初めて起きる評価期間単位の 1 回限りのイベントである。
**段階的バーン率しきい値**:
> "you can prioritize reliability work at a percentage of your air budget say when you burn through 50 or 80 of it"
EB の完全消費を待たず、消費率 50% や 80% の時点で信頼性作業を優先するという段階的対応を推奨している。
**参照書籍・動画の背景**:
Moyer は SRE Book / SRE Workbook / *Implementing Service Level Objectives*(Alex Hidalgo)を精読したうえで「高レベルの理論はよく書かれているが実装詳細が不十分」と判断し、補完として Liz Fong-Jones・Seth Vargo の "SLIs, SLOs, SLAs, oh my!" 動画と自身の "Latency SLOs Done Right" シリーズを参照した。
**"Latency SLOs Done Right" シリーズの共著者**:
Moyer 以外の版は「the zirconis founder theo schlossnagel」(= Circonus 創設者)と「henry kartman data scientist」が担当している。3 本すべての視聴を推奨。
**複合 SLI のレイテンシ閾値は意図的な単純化**:
> "it is important to note here that i'm showing a simple threshold based sli for latency there are definitely better ways of doing this"
p.30 の `served in < 100ms` という閾値ベースのレイテンシ SLI は例示目的であり、より正確なレイテンシ SLI は "Latency SLOs Done Right" シリーズを参照すること。
**Zendesk の観測スタック**: Datadog を使用し、SLO ウィジェットに Good events(分子)と Total events(分母)を投入している。
**エラーバジェットは責任追及のためではない**:
> "error budgets aren't there to assign blame their purpose is to prioritize reliability work"
マルチサービス構成での議論の締めくくりとして Moyer が強調した原則。
## 概念・実体への接続
- 概念: [[エラーバジェット]] / [[サービスレベル目標]]
- エンティティ: [[Fred Moyer]] / [[Zendesk]]
- 前身 source: [[@2019__SREcon19 Americas__Latency SLOs Done Right]]
## 限界・不確実点
- transcript は Whisper 自動生成のため固有名詞の一部が誤字(例: "zirconis" = Circonus、"henry kartman" = Henrik Rexed と推定)。固有名詞はスライドの表記を優先する。
- p.36 の写真(子供たちの綱引きシーン)の文脈: transcript では口頭説明が「teamwork」文脈と一致("it takes teamwork to put this into practice at scale")。
- Zendesk 内部ツールの具体的なメトリクス名(`zendesk.classic.app.sli.request.A...`)は p.31 の UI 内で一部省略されており、全体は読取不可。