SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

結局、SRE って僕たちに関係あるんですか?

SREをはじめる際のポイント:モニタリングとサービスレベルの考え方

結局、SRE って僕たちに関係あるんですか? 第3回

SLOの正しい計測を求めて

 適切なSLOを考えるにあたってのヒントをご紹介したところで、次は、SLOの正しい計測について考えてみましょう。

稼働率って何?

 ここまでのご説明で、「稼働率」という言葉を何度も使用してきました。では、稼働率とは一体なんでしょうか。「基本情報技術者試験」の勉強をされた方は、稼働率は以下の計算式で求められると記憶されていることでしょう。

  • 稼働率 = MTBF ÷ (MTBF + MTTR)
  • MTBF(Mean Time Between Failure):平均故障間隔、正常稼動している平均時間
  • MTTR(Mean Time To Repair):平均修理時間、復旧にかかる平均時間

 式にするとややこしく見えますが、稼働率はシステムが正常動作している時間の割合です。では、正常動作とは一体どういう状態のことでしょうか?正常の反対である異常について考えてみましょう。先ほど、「The Four Golden Signals」を紹介する際に、エラーの定義について以下のようにご紹介しました。

 エラーリクエストの割合のこと。エラーリクエストは、具体的にはHTTPステータスコードが5XX番のリクエスト、または、ポリシーとして失敗とみなすリクエスト(例えば、1秒以上のレイテンシを要するリクエストはエラーと見なす、など)です。

 つまり、システムが正常動作している時間の割合である稼働率を求めるには、1からエラーリクエストの割合を引けばよいですね。エラーが1%であれば、1から1%を引いた99%が稼働率といった具合です。

集計期間を区切る

 さて、ここで1つ問題があります。「エラーリクエストの割合」を求めるには、どこかで集計期間を区切る必要があります。ユーザからのリクエストはシステムの提供を終了するまで永遠に発生し続けます。集計期間を区切らない限りは、分母(総リクエスト数)も分子(エラーリクエスト数)も固定できないので、エラーの割合を計算することができません。

 では、集計期間の区切り方について考えてみましょう。仮に、月間100万リクエストを処理するサイトが存在したとします。ある日、サイトが24時間ダウンし、10万リクエストに対しHTTPステータスコード500を返したとしましょう。また、問題を簡単にするため、この日以外のすべてのリクエストは正常に処理されていたとします。さて、このサイトの適切だと思われる月次の稼働率はいくつでしょうか?

 おそらく、読者のみなさんの発想は2つに分かれたのではないでしょうか。

 1つ目は、エラーリクエスト数を総リクエスト数で割り、エラー率を算出するアプローチ。この問題の場合は、エラーリクエスト数10万を、総リクエスト数100万で割り、エラー発生率を10%と考えます。このアプローチは、モニタリングの集計期間を月次で区切っています。

 2つ目は、24時間(1日)ダウンしたのだから、エラー発生率は、1日÷30日(1か月)でしょ? と考えるアプローチ。約3.3%のエラー発生率です。この発想は、無意識のうちに集計期間を1日以下に区切っています。

 さて、みなさんにとって、どちらがより自然な集計期間でしょうか? 多くの人は、後者が自然と感じる方が大半ではないでしょうか。24時間のダウンタイムで分かりにくければ、1秒のダウンタイムと仮定してもよいでしょう。たった1秒ダウンしただけで、稼働率が90%になってしまうことに違和感があると思います。

 このように、集計期間をどのように区切り計測するかは、サービスの信頼性を大きく左右する重要なポイントです。みなさんの運営しているサービスにとって、より正しい計測方法を考えましょう。とはいえ、あまり難しく考えすぎずに、まずは計測できるものからはじめるとよいでしょう。前述したようなケースは、極端ですから。

 サービスレベルの集計期間をどう考えるべきかについては、書籍『The Site Reliability Workbook』(『Site Reliability Engineering』の後継となる書籍)にも、より詳しく解説されていますので、ご興味ある方はご一読ください。

SLOの運用

 さて、ここまで学んだ内容を整理しておきましょう。

  • モニタリングは、ユーザ影響の逆算で考える
  • 高すぎるSLOは何かを犠牲にする
  • サービスレベルの計測には、集計期間を考慮する

 これらの基本的な考え方を理解していれば、SLOを決定するための基本的な考え方はマスターしています。あわせて、書籍『The Site Reliability Workbook』のSLOドキュメント例(Example SLO Document)を参考にすれば、みなさんが管理するサービスにあわせたSLOを設定できるでしょう。

 さて、最後に、SLOの運用について触れます。SLOは、定義し、実際に運用されてはじめて効果を発揮するため、実はここが最も重要であると言えます。

関係者とSLOの内容を合意する

 まずは、設定したSLOについて、ぜひ社内の関係者に共有してください。そして、自分たちが運用しているシステムは、このSLOで適切かどうかを議論し、合意しましょう。

SLOを守れなかった時の運用をチームで合意する

 SLAであれば、違反時に返金対応などを行うことは前述しましたが、SLOを守れない時は、どうすればよいのでしょうか。SLOは、チームで合意したシステムの信頼性に関する目標なので、守れなかった時にはシステムの信頼性を維持・向上するためにチームで協力することが重要です。例えば、SLOを違反しそうになったら、新規機能追加は中断し、バグを修正したりするとよいでしょう。

SLOを守るためにエラーバジェットを運用する

 また、SLOを違反していないか? を意識するために、エラーバジェットの考え方を利用するとよいでしょう。エラーバジェットは、エラーを予算のように扱う考え方で、(1-SLO)×SLOの計測期間で求められます。例えば、毎月のSLOを99.9%の稼働率とすると、エラーバジェットは43分です。43分のバーンダウンチャートを用意し、エラー発生時に減らしていくことで、今月はあとどれくらいのエラー発生時間が許容されるかをチームで共有することができます。

さいごに

 本記事では、SREにとって欠かせないモニタリングやSLOの定義、運用について整理しました。みなさんの会社でSREをはじめるご参考になれば幸いです。

 何か分からないことがあれば、ぜひ本記事の筆者(@katsuhisa__)にご相談ください。

 次回記事では、サービス信頼性階層において、モニタリングの1つ上位層であるインシデントレスポンスや、ポストモーテムの詳細を深掘りします。お楽しみに。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
結局、SRE って僕たちに関係あるんですか?連載記事一覧

もっと読む

この記事の著者

北野 勝久(株式会社スタディスト)(キタノ カツヒサ)

 印IT企業でインフラ・ミドルウェアエンジニアとして勤務した後、スタディスト入社。マニュアル作成・共有プラットフォーム「Teachme Biz」の新規機能開発を担当の後、SRE チームの立ち上げを行う。信頼性に関わる一連の実装、運用を担当する。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11472 2019/04/16 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー