執筆者:小畑 啓、監修:山﨑政憲
4.1 SLOの定義と作り方
SLO(Service Level Objective)とは?
SLOは、サービスの健全性を測定するための内部目標で、適切な信頼性のレベルです。
SLIで計測されるサービスレベルのターゲット値またはターゲット値の範囲を表します。
SLOはSLAやSLIと連動し、ユーザー体験の基準になります。
SLO、SLA、SLIについてまとめると下表のようになります。
名称 | 概要 |
---|---|
SLO(Service Level Objective) | サービスレベルの目標・評価基準を定めたもの。外部のユーザー体験が許容できないレベルに達する前にチームが問題を特定して修正するためのセーフティーネットとして機能する。 |
SLA(Service Level Agreement) | 顧客との間で合意されたサービスレベル保証。ユーザーはSLAを確認し、対象サービスの稼働率や稼働しなかった場合の返金方法など契約の保障を把握してから契約に進む。 |
SLI(Service Level Indicator) | サービスの稼働状況を数値化した指標。サービスの顧客体験をビジネス上の目標に直接沿った方法で測定するように定義する。 |
SLOの設定手順
SLOは以下の手順で設定します。
① ユーザー視点で重要な指標やサービス(SLI)を決める
② 目標値(SLO)を定義する
③ 対象の期間とエラーバジェットを設定する
④ 可観測性ツールでデータを収集し、モニタリングとアラートを設定する
⑤ SLOに基づいてアラートや改善アクションを設計・実装する
これらのステップを踏むことで、サービスの品質を維持・向上させるための現実的で効果的なSLOを設定できます。
具体的なSLIとSLOの設定例は下表を参考にしてください。
サービス | SLI | SLO |
---|---|---|
Webアプリケーションの可用性 | 稼働率 | 99.9%以上 |
APIレスポンスタイム | 95パーセンタイルのレスポンスタイム | 500ms以下 |
エラー率 | HTTP 5xxエラーの割合 | 0.1%以下 |
データベースクエリ時間 | クエリの平均実行時間 | 100ms以下 |
Instanaを活用したSLOのモニタリング
Instanaはアプリケーションパフォーマンスをリアルタイムで可視化し、SLO達成状況のモニタリングに有効です。
レイテンシやエラー率などの指標をメトリクスとして自動で収集し、SLOに設定した閾値を超えるとアラートを発報できます。
サービス単位でのSLOの定義が可能で、ダッシュボードで達成状況を確認できます。
また、データの分析によって、SLO違反の傾向や根本原因分析も行えます。
さらに、SLIと連携することで、ユーザー体験に基づいた精度の高いモニタリングが実現可能です。
Instanaを利用することで、DevOpsやSREチームによる信頼性の向上と運用効率化に貢献します。
4.2 InstanaでSLOをモニタリングする方法
SLIの可視化
Instanaのカスタムダッシュボード機能を活用することで、SLIを可視化することができます。
InstanaのカスタムダッシュボードでSLIを可視化する手順は下記の通りです。
① Instana環境にアクセスし、TOPページを開きます。
② メニュー画面の「カスタムダッシュボード」を選択し、ダッシュボードを新規作成します。
③ 画面右上の「ウィジェットの追加」ボタンをクリックして、左メニューから「SLO」を選択し、「次へ」をクリックします。(下図参照)
④ 入力必須項目を記入し、「作成」をクリックします。これでSLIの登録が完了です。
InstanaのSLIは、Instanaで定義された「Webサイト」あるいは「アプリケーション・パースペクティブ」に対して作成できます。また、「イベントベース」「時間ベース」の2種類のSLIタイプを選択できます。
SLOスマートアラートの設定方法
SLOのスマートアラートは、SLOのステータスやエラー予算の使用率・消費率などの指標があらかじめ設定された基準を超えた際に、即座にアラートを送信する仕組みです。
これにより、サービスの健全性や信頼性の低下に早期に気付くことができ、迅速な対応が可能になります。
SLOのスマートアラートを作成するための特別な権限は不要ですが、アラートの作成はSLOが関連付けられているアプリケーションやウェブサイトといったエンティティのアクセス権限に依存します。つまり、対象エンティティの表示権限があるユーザーであれば、該当するSLOに対してスマートアラートを作成することができます。
SLOスマートアラートの詳細については、サービスレベル目標のためのスマート・アラートを参考にしてください。
4.3 エラーバジェット運用の実践例
エラーバジェットとは?
エラーバジェットとは、SLOに基づき、一定期間内で許容されるエラーやダウンタイムの上限を指します。
例えば、SLOが99.99%のリクエスト応答率を維持することである場合、エラーバジェットは、エラー応答率を0.01%以下に抑えることになります。
SREの実践では、エラーバジェットを活用することで、新機能開発とシステムの安定性維持のバランスを取ることが可能です。開発チームと運用チームは、エラーバジェットの条件を満たしてシステムの信頼性を維持するという共通の目標に向かってお互いに協力し合いながら働きます。
Instana等のツールを使えば、リアルタイムでSLOの達成度やエラーバジェットの消費状況を可視化し、信頼性を損なわずに継続的な改善が実現できます。
エラーバジェットのメリット
エラーバジェットを使用すると、「1日につき1%の割合でバジェットを消費し続けています」あるいは「エラーバジェットがあと15分残っています」という言い方が可能になります。
現在の状況を理解してもらいやすくなり、どこを中心に作業すべきかについての議論を容易に行えます。
エラーバジェットを使用して意思決定を行うことは、組織でSLO文化の成熟が高いレベルに達していることを示しますが、多くの場合長い道のりになります。
しかし、そこに到達できれば、目的のためのあらゆる種類の新しいデータを収集できるようになります。
エラーバジェットの管理
Instanaでは、SLO用のカスタムダッシュボードウィジェットを作成し、サービスのパフォーマンスを時系列で可視化できます。ウィジェットは、エラーバジェットチャートまたはインジケータチャートとして表示可能です。表示期間は、SLOの時間ウィンドウまたはユーザーがUIで選んだ時間に設定できます。
リアルタイムのメトリクスにより、エラー率やレスポンス遅延などを即時に検出可能です。
これにより、エラーバジェットの消費状況をチームが迅速に把握し、リリース判断に活用できます。
また、異常の根本原因を自動解析する機能も備えており、迅速な対応が可能です。
結果として、信頼性を保ちつつ開発スピードを最適化できます。
詳細については、サービスレベル目標ウィジェットを参考にしてください。
4.4 信頼性とリリース頻度のバランスを取る方法
信頼性とリリース頻度のトレードオフ
ソフトウェア開発において、システムの信頼性とリリース頻度はトレードオフの関係にあります。
頻繁なリリースを行えば新機能を早く提供できますが、信頼性を犠牲にするリスクがあります。
一方、信頼性を重視しすぎると、リリースが遅れてビジネスの競争力が低下します。
信頼性重視とリリース頻度重視についてまとめると、下表のようになります。
項目 | メリット | デメリット |
---|---|---|
信頼性重視 | システム障害が少ない、安定運用が可能 | リリースが遅れてビジネス機会を逃す |
リリース頻度重視 | 迅速な機能追加、競争力の向上 | バグや障害発生のリスク増大 |
理想的なバランスは、適切なSLOを設定し、エラーバジェットを活用することで、信頼性を維持しながら効率的にリリースを行うことです。
信頼性とリリース頻度のバランスを取るためのSREプラクティス
信頼性とリリース頻度のバランスを取るためのプラクティスとして、カナリアリリースやブルーグリーンデプロイを活用する方法があります。それぞれの特徴は下記の通りです。
・カナリアリリース:新機能を一部ユーザーに限定して公開し、問題がなければ本番環境へ広げる手法です。リスクを抑えつつ新バージョンの安全性を検証できます。この手法により、ユーザーが新バージョンで遭遇するトラブルを最小限に抑え、未知の問題に対するリスクを管理します。
・ブルーグリーンデプロイメント:2つの本番環境(ブルーとグリーン)を用意し、新バージョンを片方にデプロイしてから切り替える方式です。すぐにロールバックできるため、ダウンタイムや障害のリスクを最小化できます。
カナリアリリースやブルーグリーンデプロイにより、安全に変更を本番に展開することが可能です。
また、CI/CDパイプラインと自動ロールバックを組み合わせれば、問題発生時も迅速に復旧します。