一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • SREの原則を実践する:SLI/SLO設計とエラーバジェットの運用

SREとは何か:運用の属人化からの脱却

Site Reliability Engineering(SRE)は、Googleが提唱したソフトウェアエンジニアリングの手法で、信頼性を定量的に管理するアプローチです。従来の運用チームが「障害を起こさない」ことを目標にしていたのに対し、SREは「許容できる範囲で障害を受け入れ、その分を開発速度に充てる」という考え方を採る。筆者がSREのプラクティスを導入した複数のチームで共通して得られた成果は、運用負荷の定量化と、開発チームとの建設的な対話の実現だった。

SLI:信頼性を測る物差し

SLI(Service Level Indicator)は、サービスの信頼性を測定するための具体的なメトリクスです。SLIを適切に定義することが、SRE実践の出発点となります。

SLIの定義で重要なのは、ユーザー体験に直結するメトリクスを選ぶことです。サーバーのCPU使用率やメモリ使用量といったインフラメトリクスではなく、ユーザーが実際に感じるサービスの品質を反映するものでなければなりません。

代表的なSLIの種類は以下の通りです。

  • 可用性:リクエスト総数に対する成功レスポンスの割合。最も基本的なSLI
  • レイテンシ:リクエストの応答時間。通常は50パーセンタイル、95パーセンタイル、99パーセンタイルで測定します
  • スループット:単位時間あたりの処理量。バッチ処理やデータパイプラインで重要
  • 正確性:レスポンスの内容が正しい割合。検索エンジンや推薦システムで特に重要
  • 鮮度:データがどの程度最新ですか。分析ダッシュボードやキャッシュ系サービスで使用

良いSLIの条件

筆者の経験から、良いSLIには以下の特徴があります。

  • ユーザーの体感品質と強く相関しています
  • 計測が容易で、自動的かつ継続的に取得できます
  • 境界条件が明確です(何が「成功」で何が「失敗」かが曖昧でない)
  • チームメンバー全員が同じ理解を持てるシンプルさがあります

たとえばWebアプリケーションのAPIであれば、「ステータスコード5xxを除いたレスポンスの割合」を可用性SLIとし、「レスポンスタイムが300ms以下のリクエストの割合」をレイテンシSLIとするのが一般的です。

SLO:信頼性の目標値を設定します

SLO(Service Level Objective)は、SLIに対する目標値です。SLOの設定はSREの中核をなす作業であり、ここを適切に行えるかどうかが成否を分ける。

SLOの設定指針

SLOを設定する際に考慮すべきポイントは以下の通りです。

  • 100%を目標にしません:100%の可用性は非現実的であり、コストが指数関数的に増大します。99.9%と99.99%の間には10倍の工数差があります
  • ユーザーの期待値から逆算します:ユーザーが許容できる障害の頻度と期間を起点に考える
  • 依存サービスのSLOを考慮します:外部APIに依存しています場合、自サービスのSLOはその外部APIのSLOを超えられません
  • 段階的に厳しくします:最初は緩めに設定し、運用実績に基づいて段階的に引き締める

具体的なSLO設計の例を挙げると、ECサイトの商品検索APIであれば、可用性SLOを99.9%(30日間で約43分のダウンタイム許容)、レイテンシSLOを95パーセンタイルで300ms以下と設定するのが妥当なラインでしょう。

エラーバジェット:開発と信頼性のバランサー

エラーバジェットは、SLOの裏返しとして算出される「許容できる障害の量」です。SLOが99.9%であれば、エラーバジェットは0.1%となります。30日間で約43分のダウンタイムが「使える予算」として割り当てられるわけです。

エラーバジェットの本質的な価値は、信頼性と開発速度のトレードオフを定量的に管理できることにあります。エラーバジェットが潤沢にあれば、リスクの高いリリースやインフラ変更を積極的に行える。逆にエラーバジェットが枯渇しつつある場合は、信頼性改善に注力すべきだという明確なシグナルとなります。

エラーバジェットポリシーの策定

エラーバジェットを実効性のある仕組みにするには、バジェットの消費状況に応じた行動指針をあらかじめ定めておく必要があります。

  • バジェット残り75%以上:通常の開発サイクル。新機能リリースを積極的に実施
  • バジェット残り50〜75%:リリース前のテストを強化。リスクの高い変更は慎重に判断
  • バジェット残り25〜50%:新機能の凍結を検討。信頼性改善タスクを優先
  • バジェット残り25%未満:新機能リリースを凍結。全リソースを信頼性改善に投入

このポリシーは開発チーム、SREチーム、プロダクトマネージャーの三者で合意しておくことが重要です。合意がない状態でエラーバジェットを導入しても、機能しません。

SLOの運用サイクル

SLOは設定して終わりではなく、継続的に運用・改善していくものです。以下のサイクルを回すことが重要です。

  • 計測:SLIを継続的に計測し、SLO達成状況を可視化します
  • レビュー:週次または月次でSLO達成率とエラーバジェット消費状況をレビューします
  • 調整:SLOが緩すぎたり厳しすぎたりする場合は、四半期ごとに見直す
  • 改善:SLO未達の原因を分析し、改善施策を実行します

導入時のよくある失敗と対策

SLI/SLOの導入で筆者が経験した、あるいは見聞きした典型的な失敗パターンを共有します。

SLIが多すぎる

あれもこれもとSLIを定義しすぎると、どれが重要か分からなくなります。最初は2〜3個の核心的なSLIに絞り、運用が安定してから追加するのが良い。

インフラメトリクスをSLIにしてしまう

CPU使用率90%以上がSLI違反、といった定義は避けるべきです。CPU使用率が高くてもユーザーに影響がなければ問題ないし、逆にCPU使用率が低くてもアプリケーションのバグでエラーが多発する場合もあります。あくまでユーザー体験に基づいたメトリクスを選ぶ。

組織的な合意なしに始める

SLOとエラーバジェットは技術的な仕組みですと同時に、組織的な合意でもあります。開発チームだけで決めても意味がなく、ステークホルダーを巻き込んだ上で導入しなければ形骸化します。

まとめ:小さく始めて文化を育てる

SLI/SLOとエラーバジェットの導入は、技術的にはそれほど難しくありません。難しいのは、組織としてこの仕組みを受け入れ、活用し続けることです。まずは1つのサービスから小さく始め、チームが成功体験を積んでから他のサービスに展開していくのが、筆者が最も推奨するアプローチです。完璧なSLOを最初から求めるのではなく、運用しながら学び、改善していく姿勢が大切です。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア