成功率だけでは分からないことKamuiDashの稼働実績の測り方

同じ99.0%でも、計測できた範囲は違う。過去の成功率が高くても、今の状態は分からない。SLIの公開を支える、成功条件・欠測・結果の鮮度の設計を紹介します。

直近30日の成功率が高くても、最後のチェックが古ければ、今の状態は判断できません。HTTP 200が返っていても、期待した画面が返っているかは別の確認です。

KamuiDashでは、定期的な動作確認の結果をSLI(サービスの状態を表す指標)としてステータスページで公開しています。個人プランではSLAを定めていませんが、観測した実績と、その計測条件を確認できるようにしています。

この記事では、成功と数える条件、欠測の扱い、古い結果を「正常」と表示し続けないための設計を紹介します。

最初に、何を測った数字なのか

アプリの実績として公開しているのは、1台構成の参考アプリと、2台構成のダッシュボードのサインイン画面を観測した結果です。利用者のすべてのアプリやリクエストを集計した成功率ではありません。

ほかの機能も、監視用に決めた操作で確認しています。サーバーが起動していてもファイルを保存できなければ、ストレージを使える状態とはいえないためです。

KamuiDashの計測対象と確認内容
対象確認していること
アプリの公開画面HTTP応答と、期待する内容が返ること
ストレージファイルの保存・取得・削除
データベース接続・データの保存・取得・削除
ダッシュボードAPIプロジェクト情報の取得

こうした定期的な動作確認は合成監視と呼ばれます。アクセスが少ない時間帯にも、決めた条件でサービスの動作を確かめられます。

アプリの公開画面には1分ごとにアクセスし、10秒以内のHTTP 200と、期待する本文を成功の条件にしています。ステータスコードだけでは、想定と違う画面が返っていることを見落とす可能性があるためです。

キャッシュされたページが返るだけでは、その時点でアプリが応答できるかを確かめられません。監視リクエストにはキャッシュを避ける指定を付け、応答ヘッダーからキャッシュ済みと判定できた結果は、有効な計測から除外しています。

サインイン画面の確認にログイン操作は含まれません。また、1台構成と2台構成は異なるアプリを観測しているため、台数だけの効果を比較した実験ではありません。

同じ99.0%でも、計測できた範囲は違う

成功率は、有効なチェックのうち成功した割合です。

SERVICE LEVEL INDICATOR
成功率(SLI) = 成功したチェック数
÷ 有効なチェック数 × 100

ここでは失敗と欠測を分けています。応答異常やタイムアウトを観測した場合は失敗です。一方、監視処理が動かなかった場合やキャッシュ応答を除外した場合など、判断に使える結果がなければ欠測です。

次の2つは、どちらも1,000回のチェックを予定した説明用の例です。例Aでは全回の結果があり、例Bでは100回の欠測があります。

説明用の数値例。KamuiDashの実測値ではありません。
チェックの内訳例A例B
予定した回数1,000回1,000回
成功990回891回
失敗10回9回
欠測0回100回
有効な回数1,000回900回
成功率(SLI)99.0%99.0%

欠測は分母にも分子にも含めないため、成功率は990 ÷ 1,000も、891 ÷ 900も99.0%です。ただし例Bでは、残り100回の状態は分かりません。そのため、日別の詳細では有効なチェック数と予定していたチェック数も確認できるようにしています。結果がない期間を、正常として埋めることはしていません。

複数の操作があるサービスでは、操作ごとの成功率のうち最も低い値を代表値にします。保存が99%、取得と削除が100%なら、表示は99%です。取得の成功回数が多いことで、保存の問題が平均に埋もれるのを避けています。

用語の補足:SLIは観測した実績、SLOは運用上の目標です。ステータスページに表示する実測値や目標値は、サービス品質保証であるSLAを示すものではありません。

「現在の正常」には、有効期限がある

過去の成功率と、現在使えるかどうかは別の情報です。最後に確認できた時刻が古ければ、過去の正常結果だけで現在の状態を判断できません。

アプリのHTTP監視では、最後の計測結果が3分より古くなると、現在の状態を「不明」にします。

FIG. 01アプリの現在状態を判定する
現在状態を表示するとき
判断できる計測結果を
取得できたか
いいえ →不明
最後の計測から
3分以内か
いいえ →不明
成功条件を満たしたか
はい ↓正常
いいえ ↓異常
アプリの自動計測による判定を簡略化した図です。過去の成功率は履歴として残し、現在状態は結果の有無と鮮度から判断します。

表示用データの取得に失敗した場合にも、以前の正常表示を維持しません。「不明」は障害が起きたという断定ではなく、現在の状態を判断する材料が足りないことを表します。

この場合も、過去の成功率や最後に確認できた時刻は履歴として残します。現在状態と過去の実績を分けることで、確認できていることをそのまま表示します。

計測結果と障害報告を、別の役割で届ける

自動チェックで分かるのは、決めた条件で動作を確認できたかどうかです。原因や影響範囲、対応状況は運用者が記録し、数値と同じページで伝えます。

FIG. 02計測結果と運用者の報告を併記する
自動計測SLI・現在状態・履歴
ステータス
ページ
数字と状況説明を確認
運用者の報告影響・対応・メンテナンス
障害の説明を計測値の代わりにせず、それぞれの情報をあわせて届けます。

アプリ側に問題が起きたときにも状況を確認する場所を残すため、公開ページの配信はアプリの実行基盤と分けています。公開画面へのHTTPチェックに加え、DBではサービス側で操作を実行し、その結果を監視側へ送ります。

FIG. 03監視と公開のシステム構成

構成図の上段は、横にスクロールして確認できます。

監視・集計側
定期実行・
HTTPチェック
応答と内容を確認
結果の保存・集計時刻・成功・失敗
成功率・日別履歴
KamuiDashのサービス側
公開画面・ストレージ
ダッシュボードAPI
機能ごとの動作を確認
DBの操作確認処理データベースへ
接続・保存・取得・削除
公開ページの配信 / アプリの実行基盤と分離
集計結果API表示用のデータを返す
ステータスページ現在状態・SLI・履歴
利用者ブラウザで確認
両矢印はリクエストと応答、片矢印は結果の受け渡しを表します。
役割と通信経路を示した概念図です。機能ごとに異なる実行環境や中継処理は省略しています。公開ページはアプリの実行基盤と分けていますが、すべての依存先から独立しているわけではありません。

計測は閲覧とは独立して定期実行します。アプリのHTTP監視では「監視対象と1分単位の計測枠」で記録を一意にし、処理が再実行されても二重に数えないようにしています。

ステータスページで確認してほしいこと

KamuiDashのステータスページでは、次の3つをあわせて確認できます。

  1. 成功率と対象期間

    アプリは直近30日、その他のサービスは本日を含む30暦日の実績です。サービスに複数の操作がある場合は、そのうち最も低い成功率を表示します。

  2. 現在の状態と最終確認時刻

    過去の成功率とは別に、どの時点の結果で現在状態を判断しているかを確認できます。

  3. 日別の履歴と障害報告

    日別の詳細で有効回数と予定回数を確認できます。障害・メンテナンスの報告がある場合は、影響や対応の経過も参照してください。

1分間隔の観測では、チェックの間に起きた短い停止を見逃す場合があります。成功率は定期チェックの実績であり、実際の停止秒数を正確に示す値ではありません。

成功率だけでなく、何を測り、いつまで確認できているか。その条件を含めて、KamuiDashの稼働状況を確認できるページにしています。

KamuiDashのステータスページで実績を確認する →