## 概要 [[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 内で一部省略されており、全体は読取不可。