Contents
1. エラーバジェットとは何か
| 用語 | 意味 |
|---|---|
| SLI(Service Level Indicator) | 実際に観測された可用性、レイテンシ、エラー率などの指標。数値は「実績」になる。 |
| SLO(Service Level Objective) | 事前に合意した目標水準。たとえば「月間稼働率 99.9 %」や「95%リクエストのレイテンシ ≤ 200 ms」など。 |
| エラーバジェット(Error Budget) | 許容ダウンタイム = (1 – SLO) × 期間 と実績ダウンタイムとの差分。残りエラーバジェット = 許容ダウンタイム – 実障時間 |
ポイント
- エラーバジェットは「可用性改善のための予算」とみなせる。残高が減っていくほど、変更やリリースに伴うリスクが高まる。
- SLO が 99.9 %(=月間 43.2 分)で実績が 99.95 %(=月間 21.6 分)なら、残りエラーバジェットは 21.6 分。
2. エラーバジェットの計算式
2‑1. 基本式
[
\text{許容ダウンタイム} = (1 - \text{SLO}) \times T
]
[
\text{実障害時間} = (1 - \text{SLI}) \times T
]
[
\text{エラーバジェット残量} = \text{許容ダウンタイム} - \text{実障害時間}
]
- T は対象期間(秒・分・時間・日いずれでも単位を合わせれば可)。
- SLO/SLI は 0〜1 の小数で表す。(例:99.9 % → 0.999)
2‑2. スプレッドシートでの実装例
| セル | 内容 | 数式(Google Sheets / Excel) |
|---|---|---|
| B2 | 期間(日) | 手入力例 30 |
| B3 | SLI(小数) | 手入力例 0.9995 |
| B4 | SLO(小数) | 手入力例 0.999 |
| C2 | 許容ダウンタイム(時間) | =B2*24*(1-B4) |
| C3 | 実障時間(時間) | =B2*24*(1-B3) |
| C4 | エラーバジェット残量(時間) | =C2-C3 |
備考
- Excel の場合は*24を省き、期間を「時間」単位で直接入力すれば同様に計算できる。
- 小数点以下の桁数は必要に応じてROUND関数で調整(例:=ROUND(C4,2))。
3. 無料テンプレート一覧(2024〜2026 年版)
| テンプレート名 | 提供元・ライセンス | 対応プラットフォーム | 主な機能 |
|---|---|---|---|
| Error Budget Calculator(Web) | dotcom‑monitor / SaaS 利用規約(2024/03 更新) | ブラウザのみ | リアルタイム SLI/SLO 比較、グラフ表示、CSV エクスポート |
| SRE 引き継ぎシート | alternativework.jp / CC BY‑NC 4.0(改変可・非営利利用限定) | Excel, Google Sheets | SLO 根拠、エラーバジェット運用ルール、インシデント記録テンプレート |
| SRE Incident Response Template | App‑Tatsujin / MIT License(商用利用可) | Excel, Google Sheets | インシデント概要・復旧手順・自動エラーバジェット消費計算 |
| sre‑error‑budget (GitHub) | open‑source community / Apache 2.0 | CSV/JSON + Python スクリプト | API 経由でメトリクス送信、Datadog/Prometheus 連携サンプル |
利用上の注意
- 各テンプレートのライセンス条項は必ず公式ダウンロードページに記載されている最新版を確認してください。
- 商用プロジェクトで使用する場合、特に CC BY‑NC 系列は「非営利」要件に抵触しないか注意が必要です。
4. エラーバジェットを Datadog と連携させる実装手順
4‑1. 前提条件
| 項目 | 内容 |
|---|---|
| Datadog API キー | DD_API_KEY(システム環境変数または Secret Manager に保存) |
| アプリケーションキー | DD_APP_KEY(書き込み権限が必要) |
| 送信対象メトリクス名 | error_budget.remaining_seconds(任意の名前で可) |
公式参照:Datadog API v1 の「Submit metrics」エンドポイント https://docs.datadoghq.com/api/latest/metrics/#submit-metrics
4‑2. Google Apps Script からメトリクス送信
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/** * エラーバジェット(秒)を Datadog に送信するサンプル */ function pushErrorBudgetToDatadog() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Budget'); const remainingHours = sheet.getRange('C4').getValue(); // 時間単位 const remainingSec = Math.round(remainingHours * 3600); const payload = { series: [{ metric: "error_budget.remaining_seconds", points: [[Math.floor(Date.now() / 1000), remainingSec]], type: "gauge", tags: ["environment:prod", "service:my-service"] }] }; const options = { method: "post", contentType: "application/json", payload: JSON.stringify(payload), muteHttpExceptions: true, headers: { "DD-API-KEY": PropertiesService.getScriptProperties().getProperty('DD_API_KEY'), "DD-APPLICATION-KEY": PropertiesService.getScriptProperties().getProperty('DD_APP_KEY') } }; const response = UrlFetchApp.fetch("https://api.datadoghq.com/api/v1/series", options); Logger.log(response.getResponseCode() + ": " + response.getContentText()); } |
C4は先ほど計算した エラーバジェット残量(時間)。gaugeタイプで送信すれば、Datadog のモニタ作成画面で「閾値以下になったらアラート」を設定できる。
4‑3. Datadog 側のモニタ例
| 項目 | 設定 |
|---|---|
| メトリクス名 | error_budget.remaining_seconds |
| アラート条件 | value < 300(残り 5 分未満) |
| 通知先 | Slack #sre-alert、PagerDuty Service |
| 評価期間 | 5 分間の連続評価 |
ベストプラクティス
- 複数サービスを管理する場合はservice:xxxタグで切り分ける。
– アラートノイズ防止のため、「低下率」(例:5 分間に 30 % 以上減少)でも追加モニタを設定すると有効。
5. バーンレート(消費速度)の活用
5‑1. 定義と計算式
[
\text{バーンレート} = \frac{\text{エラーバジェット残量}}{\text{経過期間中の累計障害時間}}
]
- 単位:
時間 / 時間(無次元)または分/分。 - バーンレートが 1.0 を超えると、残りエラーバジェットが同じ速度で消費されていることを意味し、枯渇リスクが高い。
5‑2. スプレッドシート実装例
| セル | 内容 | 数式 |
|---|---|---|
| D2 | 累計障害時間(分) | 手入力例 12 |
| E2 | バーンレート | =C4*60 / D2 (残量を「分」に変換して割る) |
応用
- バーンレートが一定閾値(例:> 1.5)を超えたら、Datadog に別メトリクスerror_budget.burn_rateを送信し、同様にアラート化できる。
6. エラーバジェット管理の実務シナリオ
| シナリオ | 手順・ポイント |
|---|---|
| ① リリース前の判断 | - 新機能追加で予想ダウンタイムが 5 分 → バーンレート 5 ÷ 残量 が 0.2 以下ならリスク許容。- エラーバジェット残量が 10 分未満の場合はリリースを延期し、改善作業を先に実施。 |
| ② インシデント後のレビュー | - インシデントごとに「消費エラーバジェット(分)」と「原因カテゴリ」を記録。 - 月次レポートでカテゴリ別合計を可視化し、上位 2 件を改善対象に設定。 |
| ③ 複数サービス間の予算配分 | - 全体エラーバジェット(例:300 分)をサービス A/B/C に均等割り当て。 - 各サービスのバーンレートが高いものから追加予算(リトライ回数削減、キャッシュ導入など)を投下。 |
| ④ 経営層への報告 | - 「残エラーバジェット = X 分(Y %)」と「今月のバーンレート = Z」だけで要点を示すスライド作成。 - 可視化は Datadog ダッシュボードか Google Data Studio のチャートで提示。 |
7. テンプレート利用時の注意点と更新管理
7‑1. ライセンス確認の具体例
| 提供元 | ライセンス表記(2024/10 時点) |
|---|---|
| dotcom-monitor | SaaS 利用規約 – 商用利用は無料だが、データ保存期間に制限あり。 |
| alternativework.jp | CC BY‑NC 4.0 – 改変可・非営利限定、クレジット表記必須(「© alternativework.jp」)。 |
| App‑Tatsujin | MIT License – ソースコード/シートの改変・再配布自由。商用利用も可。 |
GitHub sre-error-budget |
Apache 2.0 – 特許権付与あり、変更時は NOTICE ファイルに追記が必要。 |
実務的アドバイス
- 社内でテンプレートを改変して配布する場合は、必ず上記ライセンス条項に従い「クレジット」や「NOTICE」の追加を書き込むこと。
- 法務部門と事前に合意形成を取っておくと、後々のコンプライアンスリスクが低減できる。
7‑2. バージョン管理と互換性
| 項目 | 推奨手順 |
|---|---|
| 更新チェック | 提供元の「Release Notes」や GitHub の releases ページを月1回程度閲覧。 |
| バックアップ | 変更前にシート全体を .xlsx と .csv の二重保存。 |
| 互換性テスト | Excel ⇔ Google Sheets 間で数式がエラーになるケースは ARRAYFORMULA・IFERROR の差異が主因。簡易テスト用シートで「全セル比較」スクリプトを走らせると安心。 |
| 自動デプロイ | CI/CD(例:GitHub Actions)でテンプレート更新時に社内共有フォルダへ自動コピーするフローを構築すると、手作業の漏れが防げる。 |
8. まとめ
- エラーバジェットは SLO と実績 SLI の差分であり、可用性改善予算として活用できる。
- 計算はシンプルな乗算・減算だけなので、Excel/Google Sheets に数式を埋め込むだけで即座に算出可能。
- Datadog 連携では API v1 の
seriesエンドポイントへgaugeメトリクスとして送信し、閾値アラートで事前警告が実現できる。 - バーンレートを併せてモニタリングすれば、「残予算がいつ枯渇するか」を定量的に把握でき、リリース判断やインシデント後の改善策立案に有効。
- 無料テンプレートは ライセンス条項を必ず確認し、社内で改変・再配布する際はクレジット表記等の条件を遵守すること。
次のステップ
- まずは自チームの SLO を明文化し、上記数式をシートに落とし込む。
- スクリプトで Datadog にメトリクス送信し、閾値アラートを設定。
- 月次レビューでバーンレートとインシデント消費量を分析し、改善サイクル(Plan‑Do‑Check‑Act)へフィードバックする。
エラーバジェット管理は 可視化 → アラート → 改善 の3ステップで完結します。この記事の手順に沿って実装すれば、SRE チームだけでなく経営層にも「信頼できる可用性予算」の証拠を示せます。