サービスレベル指標の作成

カスタム サービスを作成する場合は、サービスレベル目標(SLO)も作成する必要があります。カスタム サービスに事前定義された SLO はありません。

自動検出されたサービスのカスタム SLO を作成することもできますが、あまり一般的ではありません。

SLO は、パフォーマンスを測定する指標を基にして作成され、サービスレベル指標(SLI)として使用されます。カスタム SLO の場合は、SLI で使用する指標を指定する必要があります。

カスタム SLO を作成していない場合は、このページをスキップできます。

適切な指標タイプの特性

サービスには、次の 2 種類の SLO を作成できます。

  • リクエスト ベースの SLO
  • Windows ベースの SLO

SLO は、SLI として選択した指標タイプに基づいています。指標タイプの値は、それらの相互関係によって分類されます。この分類を指標の種類と呼び、GAUGEDELTA,CUMULATIVE の 3 つの有効な値があります。詳細は、MetricKind をご覧ください。

リクエスト ベースの SLO の場合、SLI は合計リクエストに対する有効なリクエストの割合を表します。SLI の指標の種類は DELTACUMULATIVE である必要があります。リクエスト ベースの SLO では GAUGE 指標を使用できません。

Windows ベースの SLO の場合、SLI は任意の期間における有効な結果の数を表します。使用可能な指標の種類は、SLI の構造によって異なります。詳細は、Windows ベースの SLI の構造をご覧ください。

SLO のタイプについての詳細は、サービスのモニタリングにおけるコンセプトをご覧ください。

Cloud Monitoring によって提供された指標タイプと独自に作成したカスタム指標タイプのいずれも使用できます。どちらも作成する SLI に適した値になります。

不適切な指標タイプ

SLI として使用する指標タイプを検討するときは、カーディナリティが高い指標タイプは使用しないでください。カーディナリティは、指標タイプと関連付けることのできる時系列の数を表し、指標ラベルが取ることのできる値の粒度に関連します。カーディナリティの詳細については、カーディナリティ: 時系列とラベルをご覧ください。

タイムスタンプなどの値を取るラベルを使用する指標タイプは、カーディナリティが非常に高く、SLI として使用すべき選択肢としては不適切です。多くの場合、カーディナリティの高い指標は、カーディナリティの問題を回避するように設計されていないユーザー定義の指標です。たとえば、ユーザー定義のログベースの指標カスタム指標などが該当します。

適切な指標タイプを探す

指標の種類を含む、指標タイプについての詳細は、次のさまざまな場所にあります。

  • Metrics Explorer などのツールの指標セレクタには、ハイライト表示された指標タイプのポップアップ カードが表示されます。このツールは、カスタム指標と組み込み指標に使用できます。

    たとえば、次のスクリーンショットは、Metrics Explorer で確認できる指標タイプ loadbalancing.googleapis.com/https/request_count のポップアップ カードを示しています。

    指標の種類を示すポップアップ カードが表示されている Metrics Explorer の負荷分散指標

    Metrics Explorer を使用すると、指標を構成して SLO API の動作を模倣し、その構成の JSON 表現を取得できます。この JSON は SLI を手動で作成する場合に非常に便利です。

  • 指標リストのページには、サービスに関連付けられた指標タイプを詳しく示す各サービスのテーブルが含まれています。これらのテーブルにはすべての組み込み指標タイプが含まれますが、カスタム指標タイプは表示されません。

    たとえば、次のスクリーンショットは、負荷分散指標リストで確認できる指標タイプ loadbalancing.googleapis.com/https/request_count のエントリを示しています。たいていの場合、これらのエントリには、Metrics Explorer のポップアップ カードよりも多くの詳細情報が含まれています。

    リファレンス テーブルの負荷分散指標。

SLI の構築

サービス モニタリングの場合、指標データは Metrics Explorer で複製できる特定の方法で処理されます。このページでは、Metrics Explorer の使用に精通していることを前提とします。さらに詳しい情報が必要な場合は、Metrics Explorer をご覧ください。

時系列の割合に基づいてリクエスト ベースの SLI を作成するには、すべてのリクエストを表す時系列と有効(または無効)なリクエストを表す時系列の 2 つが必要です。このタイプの SLI の構造は次のとおりです。

  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": TO_BE_IDENTIFIED,
      "goodServiceFilter": TO_BE_IDENTIFIED,
    }
  }

goodServiceFilter フィールドの値を取得するには

  1. モニタリング対象リソースタイプと指標タイプを選択します。指標の種類は DELTA または CUMULATIVE である必要があります。結果には、さまざまな時系列が多数含まれることがあります。

    たとえば、http_lb_rule リソースタイプと loadbalancing.googleapis.com/https/request_count 指標タイプを選択します。

  2. [フィルタ] フィールドを使用して、ラベル response_code_class200 に設定します。このフィルタにより、このラベルの他の値を含む時系列がすべて除外されます。まだ一致する時系列が複数存在することもあります。

  3. sum アグリゲータを選択して、単一の時系列を作成します。[Metrics Explorer] ページのグラフに、結果の時系列が表示されます。

  4. グラフの上の その他のオプション をクリックし、メニューから [View as JSON] を選択します。

    取得された JSON は次のようになります。

    "dataSets": [
      {
        "timeSeriesFilter": {
          "filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""
          "perSeriesAligner": "ALIGN_RATE",
          "crossSeriesReducer": "REDUCE_SUM",
          "secondaryCrossSeriesReducer": "REDUCE_NONE",
          "minAlignmentPeriod": "60s",
          "groupByFields": [],
          "unitOverride": "1"
        },
        "targetAxis": "Y1",
        "plotType": "LINE"
      }
    ],
    

必要な箇所は dataSets オブジェクトに埋め込まれた [filter] フィールドの値です。

"filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""

SLI 構造を作成するには:

  1. この値を [goodServiceFilter] フィールドの値として SLI 構造に挿入します。

  2. また、この値を totalServiceFilter の値として SLI 構造に挿入しますが、フィルタのラベル部分である metric.label.\"response_code_class\"=\"200\" を削除します。

結果のサービスレベル指標は次のようになります。

  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule"",
      "goodServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200"",
    }
  }

次に、この SLI を SLO に挿入します。たとえば、次のようになります。

{
   "serviceLevelIndicator": {
      "requestBased": {
        "goodTotalRatio": {
          "totalServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule"",
          "goodServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200"",
        }
     }
   },
   "goal": 0.98,
   "calendarPeriod": "WEEK",
   "displayName": "98% Successful requests in a calendar week"
}

SLO の作成で説明したように、この JSON を使用して SLO を作成できます。