Cloud Monitoring の指標に基づくスケーリング

このドキュメントでは、Monitoring の指標に基づいてマネージド インスタンス グループ(MIG)をスケーリングする方法を説明します。

CPU 使用率外部 HTTP(S) ロードバランサの処理能力に基づいて MIG をスケーリングすることもできます。

Monitoring の指標に基づいて MIG をスケーリングする場合、次の指標タイプに基づいてスケーリングできます。

指標には、Cloud Monitoring サービスで提供されている標準指標とユーザーが作成するカスタムの Cloud Monitoring 指標があります。

制限事項

  • Cloud Monitoring のログベースの指標に基づいて自動スケーリングを行うことはできません。

  • リージョン マネージド インスタンス グループは、インスタンスごとの指標のフィルタをサポートしていません。

  • リージョン マネージド インスタンス グループは、グループごとの指標を使用する自動スケーリングをサポートしていません。

始める前に

インスタンスごとの指標

インスタンスごとの指標は、MIG 内の各 VM に関するリソース使用率データを示します。インスタンスごとの指標では、MIG のサイズが 1 VM を下回ることはできません。オートスケーラーが動作するには、少なくとも 1 つの実行中 VM に関する指標が必要です。

個々の VM に固有ではない Cloud Monitoring 指標を使用してスケーリングする必要がある場合や、MIG をゼロにスケールダウンする必要がある場合は、グループごとの指標を使用してスケーリングするように MIG を構成できます。

インスタンスごとの標準指標

Cloud Monitoring には、VM のモニタリングに使用できる一連の標準指標があります。ただし、オートスケーラーがスケーリングのために使用できる有効な使用率指標は標準指標の一部だけです。

スケーリングに有効な使用率指標は以下の条件を満たすものです。

  • 標準指標に gce_instance モニタリング対象リソースのデータが含まれていること。timeSeries.list API を使用して、特定の指標がこのリソースのデータをエクスポートするかどうかを確認できます。

  • 標準指標はインスタンスの稼働状況を表し、その値はグループ内の VM 数に比例して増減します。

次の指標はスケーリングには有効ではありません。この指標の値は使用率に基づいて変化せず、オートスケーラーがその値に比例してスケーリングを行うことができないためです。

compute.googleapis.com/instance/cpu/reserved_cores

オートスケーラーに使用する標準指標を選択したら、その指標を使用する自動スケーリングを構成できます。

カスタム指標

Cloud Monitoring を使用してカスタム指標を作成し、独自のモニタリング データを Monitoring サービスに書き込むことができます。これにより、使い慣れたデータ構造と一貫したクエリ構文を使用して、Google Cloud の標準データと独自のカスタム モニタリング データに並列にアクセスできるようになります。カスタム指標がある場合は、それらの指標のデータに基づいたスケーリングを選択できます。

前提条件

カスタム指標を使用するには、まず次の手順を行います。

  • カスタム指標を作成する。カスタム指標の作成方法については、カスタム指標の使用をご覧ください。
  • グループ内のすべての VM からカスタム指標をエクスポートするように MIG を設定します。

有効なカスタム指標の選択

すべてのカスタム指標をオートスケーラーで使用できるとは限りません。有効なカスタム指標を選択するには、指標が以下の条件を満たしている必要があります。

  • インスタンスごとの指標である。特定の Compute Engine VM インスタンスごとに関連するデータをエクスポートする指標でなければなりません。
  • インスタンスごとにエクスポートされた値が gce_instance モニタリング対象リソースに関連付けられていること。このような指標には、次のラベルが含まれています。
    • zone。インスタンスが存在するゾーンの名前が設定されます。
    • instance_id。VM に割り当てられた固有の数値 ID が設定されます。
  • データのエクスポート間隔が 60 秒以内の指標であること。60 秒よりも短い間隔でデータをエクスポートすると、オートスケーラーがより迅速に負荷の変化に対応できます。60 秒よりも長い間隔でデータをエクスポートすると、オートスケーラーが負荷の変化に迅速に対応しきれない場合があります。
  • 指標は有効な使用率指標である必要があります。そうすることで、指標のデータを使用して VM の数を比例的にスケールアウトまたはスケールインできます。
  • int64 または double のデータ値をエクスポートする指標であること。

オートスケーラーでカスタム指標を使用できるようにするには、MIG 内のすべての VM から、そのカスタム指標のデータをエクスポートする必要があります。

注: VM インスタンスの数値 ID は、その VM 内でメタデータ サーバーの ID プロパティをリクエストすることによって取得できます。たとえば、「curl」で次のようにします。
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
メタデータ サーバーの使用の詳細については、インスタンス メタデータの格納と取得を参照してください。

インスタンスごとのモニタリング指標を使用する自動スケーリングの構成

標準指標とカスタム指標のどちらを使用する場合でも、オートスケーラーをセットアップする処理は同じです。Cloud Monitoring の指標を使用するオートスケーラーを作成するには、指標 ID、ターゲット使用率レベル、使用率のターゲット タイプを指定する必要があります。これらの各プロパティについて、以下で説明します。

  • 指標 ID: 使用する指標の名前。カスタム指標を使用する場合は、指標を作成したときにこの名前を定義しています。指標 ID は次の形式になります。

    custom.googleapis.com/path/to/metric
    

    指標の作成、参照、および読み込みの詳細については、カスタム指標の使用をご覧ください。

  • 目標使用率レベル: オートスケーラーが維持するレベル。この値は正の数値でなければなりません。たとえば、24.51100 とはどちらも許容される値です。この値は、0.0~1.0 の範囲の浮動小数点値である CPU や負荷分散とは異なることに注意してください。

  • ターゲット タイプ: インスタンスから収集したデータをオートスケーラーがどのように計算するか。使用可能なターゲット タイプ:

    • GAUGE。オートスケーラーが直近数分間に収集したデータの平均値を計算して、それをオートスケーラーのターゲット使用率と比較します。
    • DELTA_PER_MINUTE。オートスケーラーは 1 分あたりの平均増加率を計算して、それをターゲット使用率と比較します。
    • DELTA_PER_SECOND。オートスケーラーは 1 秒あたりの平均増加率を計算して、それをターゲット使用率と比較します。

    正確な比較のために、ターゲット使用率を秒単位で設定する場合は、オートスケーラーのターゲット タイプとして DELTA_PER_SECOND を使用します。同様に、分単位でのターゲット使用率には DELTA_PER_MINUTE を使用します。

Console

自動スケーリングの構成手順は、リージョン MIG とシングルゾーン MIG で異なります。リージョン MIG はインスタンスごとの指標のフィルタをサポートしていません。

リージョン(マルチゾーン)MIG の自動スケーリングを構成するには、次のようにします。

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. MIG がない場合は作成します。MIG がある場合は、リストにあるリージョン MIG の名前をクリックして、インスタンス グループの詳細ページを開きます。
  3. インスタンス グループの詳細ページで、[グループを編集] ボタンをクリックします。
  4. [自動スケーリング] で [自動スケーリング] を選択して自動スケーリングを有効にします。
  5. [自動スケーリング指標] セクションで、[Stackdriver Monitoring の指標] を選択します。
  6. [指標のエクスポート スコープ] セクションで、[インスタンスあたりの時系列] を選択して、グループごとの指標を使用する自動スケーリングを構成します。
  7. [Stackdriver Monitoring の指標] セクションで、指標名を example.googleapis.com/path/to/metric の形式で入力します。
  8. [ターゲット] セクションで、ターゲット値を指定します。
  9. [ターゲット タイプ] セクションで、指標の測定値の粒度と一致するターゲット タイプを指定します。
  10. 完了したら変更内容を保存します。

シングルゾーン MIG の自動スケーリングを構成するには、次のようにします。

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. MIG がない場合は作成します。インスタンス グループがある場合は、インスタンス グループの名前をクリックして詳細ページを開きます。インスタンス グループ内のインスタンスは、すべて 1 つのゾーン内になければなりません。
  3. インスタンス グループの詳細ページで、[グループを編集] ボタンをクリックします。
  4. [自動スケーリング] で [自動スケーリング] を選択して自動スケーリングを有効にします。
  5. [自動スケーリング指標] セクションで、[Stackdriver Monitoring の指標] を選択します。
  6. [指標のエクスポート スコープ] セクションで、[インスタンスあたりの時系列] を選択して、インスタンスごとの指標を使用する自動スケーリングを構成します。
  7. [指標 ID] セクションで、指標名を example.googleapis.com/path/to/metric の形式で入力します。
  8. [その他のフィルタ式] セクションに、複数のストリームやラベルを持つ指標の個別の値を使用するためのフィルタを入力します(任意)。詳細については、インスタンスごとの指標のフィルタリングをご覧ください。
  9. [使用率のターゲット] セクションで、ターゲット値を指定します。
  10. [使用率のターゲットのタイプ] セクションで、ターゲット タイプが指標の測定値の種類と一致することを確認します。
  11. 完了したら変更内容を保存します。

gcloud

たとえば、gcloud コマンドライン ツールで、次のコマンドでは、GAUGE ターゲット タイプを使用するオートスケーラーを作成します。オートスケーラーを作成する場合は、--custom-metric-utilization パラメータだけではなく、--max-num-replicas パラメータも必要です。

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

必要に応じて --cool-down-period フラグを使用できます。これは、新しい VM が開始された後、オートスケーラーがその VM の使用率に関する情報収集を開始するまでの秒数を指定します。VM の初期化中に収集された使用率情報は自動スケーリングでの使用には適さないため、この期間を設定することによって仮想マシンの初期化の時間を確保できます。クールダウン期間のデフォルト値は 60 秒です。

gcloud ツールの使用可能なコマンドとフラグの全一覧については、gcloud リファレンスをご覧ください。

API

注: 自動スケーリングはマネージド インスタンス グループの機能ですが、個別の API リソースです。自動スケーリング用の API リクエストを作成する際には、その点に注意してください。

API で、次の URL への POST リクエストを作成します。myproject は自分のプロジェクト ID に置き換え、us-central1-f は任意のゾーンに置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

リクエスト本文には name フィールド、target フィールド、autoscalingPolicy フィールドを含める必要があります。autoscalingPolicy には、maxNumReplicascustomMetricUtilizations プロパティを指定します。

必要に応じて、coolDownPeriodSec パラメータを使用できます。これは、新しい VM が開始された後、オートスケーラーが使用状況データの収集を開始するまでの秒数を指定します。クールダウン期間が経過すると、オートスケーラーは新しい VM から使用状況に関する情報収集を開始し、MIG に追加の VM が必要かどうかを判断します。VM 初期化中に収集された使用率情報は信頼性が低く、自動スケーリングには不適切であるため、この期間を設定することによって VM の初期化の時間を確保できます。クールダウン期間のデフォルト値は 60 秒です。

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }
  ]
 }
}

インスタンスごとの指標のフィルタリング(ベータ版)

インスタンスごとの Cloud Monitoring 指標にフィルタを適用すると、ストリームまたはラベルを複数持つ指標の個別の値を使用して、シングルゾーン MIG をスケーリングできます。

インスタンスごとの指標のフィルタ要件

オートスケーラーのフィルタは Cloud Monitoring のフィルタ構文に対応していますが、いくつかの制限があります。インスタンスごとの指標のフィルタは次の要件を満たしている必要があります。

  • 結合セレクタに使用できるのは AND 演算子だけです。
  • = 直接等価性比較演算子だけが使用可能ですが、この演算子は関数では使用できません。たとえば、startswith() 関数で = 比較演算子は使用できません。
  • ワイルドカードは使用できません。
  • resource.typeresource.label.* セレクタは設定できません。インスタンスごとの指標では、常にグループのすべてのインスタンス リソースが使用されます。
  • 最適な結果を得るために、インスタンスごとに 1 つの時系列だけを返すフィルタを作成します。フィルタによって複数の時系列が返される場合、時系列はまとめられます。

指標をフィルタするためのオートスケーラーの構成

Google Cloud Console、gcloud コマンドライン ツール(ベータ版)、または Compute Engine ベータ版 API を使用して、シングルゾーン MIG の自動スケーリングに使用する指標のフィルタを追加できます。

Console

インスタンスごとの指標をフィルタリングするオートスケーラーの作成方法は通常のインスタンスごとのオートスケーラーの作成方法と同様ですが、指標フィルタも指定する必要があります。たとえば、compute.googleapis.com/instance/network/received_bytes_count 指標にラベル instance_nameloadbalanced が含まれているとします。loadbalanced ブール値に基づいてフィルタするには、次のようにします。

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. MIG がない場合は作成します。MIG がある場合は、シングルゾーン MIG の名前をクリックしてインスタンス グループの詳細ページを開きます。
  3. インスタンス グループの詳細ページで、[グループを編集] ボタンをクリックします。
  4. [自動スケーリング] で [自動スケーリング] を選択して自動スケーリングを有効にします。
  5. [自動スケーリングの基準] セクションで、[Stackdriver Monitoring の指標] を選択します。
  6. [指標のエクスポート スコープ] セクションで、[インスタンスあたりの時系列] を選択して、インスタンスごとの指標を使用する自動スケーリングを構成します。
  7. [指標 ID] セクションに指標名を入力します。例: compute.googleapis.com/instance/network/received_bytes_count
  8. [その他のフィルタ式] セクションにフィルタを入力します。例: 'metric.label.loadbalanced = true'
  9. 完了したら変更内容を保存します。

gcloud

インスタンスごとの指標をフィルタするオートスケーラーの作成方法は通常のインスタンスごとのオートスケーラーの作成方法と同様ですが、指標フィルタを指定し、使用率のターゲットとターゲット タイプのフラグを個別に指定する必要があります。たとえば、compute.googleapis.com/instance/network/received_bytes_count 指標にラベル instance_nameloadbalanced が含まれているとします。loadbalanced ブール値に基づいてフィルタするには、--stackdriver-metric-filter フィルタフラグに 'metric.label.loadbalanced = true' 値を指定します。使用率のターゲットとターゲット タイプのフラグを個別に含めます。

gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

この例では、使用率のターゲットとして loadbalanced トラフィック データのみを使用するように自動スケーリングを構成しています。

使用可能な gcloud コマンドとフラグの全一覧については、gcloud ツール リファレンス(ベータ版)をご覧ください。

API

注: 自動スケーリングはマネージド インスタンス グループの機能ですが、個別の API リソースです。自動スケーリング用の API リクエストを作成する際には、その点に注意してください。

インスタンスごとの指標をフィルタするオートスケーラーの作成方法は通常のインスタンスごとのオートスケーラーの作成方法と同様ですが、指標フィルタを指定し、使用率のターゲットとターゲット タイプのフラグを個別に指定する必要があります。たとえば、compute.googleapis.com/instance/network/received_bytes_count 指標にラベル instance_nameloadbalanced が含まれているとします。loadbalanced ブール値に基づいてフィルタするには、filter パラメータに "metric.label.loadbalanced = true" 値を指定します。

API では、次の URL への POST リクエストを作成します。myproject は自分のプロジェクト ID に置き換え、us-central1-f は任意のゾーンに置き換えます。リクエスト本文には name フィールド、target フィールド、autoscalingPolicy フィールドを含める必要があります。autoscalingPolicy には、maxNumReplicascustomMetricUtilizations プロパティを指定します。

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

この例では、使用率のターゲットとして loadbalanced トラフィック データのみを使用するように自動スケーリングを構成しています。

グループごとの指標(ベータ版)

グループごとの指標では、インスタンスごとの使用率データをエクスポートしない標準指標やカスタム指標による自動スケーリングが可能になります。グループはグループ全体に適用される値に基づいてスケーリングされ、グループで処理可能な作業量やグループの稼働状況に応じたサイズになります。グループは、そのグループの指標の値とユーザーが定義した構成の変動に基づいてスケーリングされます。

グループごとの指標に基づいて自動スケーリングを構成する場合は、指標に対してどのようにオートスケーラーがインスタンスをプロビジョニングするかを示す必要があります。

  • インスタンスの割り当て: 各 VM に割り当て可能な作業量に応じて VM を追加または削除するよう、オートスケーラーに指示するには、インスタンスの割り当てを指定します。このパラメータには、各 VM が処理できる想定作業量を表す値を指定します。たとえば、各 VM に 2 作業単位を割り当てるには「2」と指定し、1/2 作業単位を割り当てるには「0.5」と指定します。オートスケーラーは MIG をスケーリングして、指標が示す作業量を完了するために十分な VM を確保します。指標の値が 10 の場合に各 VM に 0.5 作業単位を割り当てると、オートスケーラーは MIG に 20 個の VM を作成します。インスタンスの割り当てによるスケーリングでは、指標の値が 0 に減るとインスタンス グループの VM 数が 0 に縮小されます。指標の値が 0 を超えると、VM 数が元に戻ります。次の図は、インスタンスの割り当てポリシーによってスケーリングを行う場合の指標の値と VM 数の比例関係を示しています。 指標の値とインスタンス数の比例関係。
  • 使用率のターゲット: VM を追加または削除して指定された指標の値を維持するよう、オートスケーラーに指示するには、使用率のターゲットを指定します。指標が指定されたターゲットを超えると、オートスケーラーは指標がターゲット値に下がるまで VM を追加していきます。指標が指定されたターゲット値を下回ると、指標がターゲット値に上がるまでオートスケーラーは VM を削除していきます。使用率のターゲットによるスケーリングでは、グループの VM 数を 0 まで縮小できません。次の図は、使用率のターゲットを維持するためにオートスケーラーが指標の値に応じて VM を追加、削除する様子を示しています。 ターゲット使用率を維持するために VM を追加、削除するオートスケーラー

各オプションのユースケースを以下に示します。

  • インスタンスの割り当て: Pub/Sub サブスクリプション内の未確認メッセージ数、またはネットワーク エンドポイントの合計 QPS レートに基づいて、MIG のサイズをスケールします。
  • 使用率のターゲット: MIG のサイズを、カスタム指標(標準のインスタンスごとの CPU 使用量やメモリ使用量の指標ではない)の使用率のターゲットに基づいてスケールします。たとえば、レイテンシのカスタム指標に基づいてグループをスケールします。

グループごとの指標に基づいて自動スケーリングを構成し、インスタンスの割り当てを指定する場合、MIG の VM 数は 0 までスケールインできます。インスタンス グループが行う作業がないことを指標が示した場合、新しい作業が用意されたことを指標が検出するまで、そのグループの VM 数は 0 にスケールインされます。グループごとの指標に基づくスケーリングとは対照的に、インスタンスごとの自動スケーリングでは少なくとも 1 つの VM からリソース使用率の指標を取得する必要があるため、グループのサイズが 1 を下回ることはできません。

グループごとの指標のフィルタ

グループごとの Cloud Monitoring 指標にフィルタを適用すると、ストリームまたはラベルを複数持つ指標の個別の値を使用して MIG をスケーリングできます。

グループごとの指標のフィルタ要件

オートスケーラーのフィルタは Cloud Monitoring のフィルタ構文に対応していますが、いくつかの制限があります。グループごとの指標のフィルタは次の要件を満たしている必要があります。

  • 結合セレクタに使用できるのは AND 演算子だけです。
  • = 直接等価性比較演算子は、各セレクタのどの関数にも使用できません。
  • ワイルドカードは使用できません。
  • フィルタには指標タイプセレクタ metric.type = "..." を指定でき、元の metric フィールドも含めることができます。必要に応じて、metric フィールドだけを使用することも可能です。この指標の要件は次のとおりです。
    • 少なくとも 1 つの場所に指標を指定する必要があります。
    • 両方の場所に指標を指定できますが、同じ指標を指定する必要があります。
  • resource.type セレクタを指定する必要がありますが、グループごとの指標を使用してスケーリングを行う場合は gce_instance に設定できません。
  • 最適な結果を得るために、具体的なフィルタを使用して、グループに対して 1 つの時系列だけが返されるようにします。フィルタによって複数の時系列が返される場合、時系列はまとめられます。

グループごとのモニタリング指標を使用した自動スケーリングの構成

Google Cloud Console、gcloud コマンドライン ツール(ベータ版)、または Compute Engine API(ベータ版)を使用して、シングルゾーン MIG に対するグループごとの指標による自動スケーリングを構成します。

Console

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. MIG がない場合は作成します。MIG がある場合は、シングルゾーン MIG の名前をクリックしてインスタンス グループの詳細ページを開きます。
  3. インスタンス グループの詳細ページで、[グループを編集] ボタンをクリックします。
  4. [自動スケーリング] で [自動スケーリング] を選択して自動スケーリングを有効にします。
  5. [自動スケーリングの基準] セクションで、[Stackdriver Monitoring の指標] を選択します。
  6. [指標のエクスポート スコープ] セクションで、[グループあたりの単一時系列] を選択します。
  7. [指標 ID] セクションで、指標名を example.googleapis.com/path/to/metric の形式で指定します。
  8. 指標のリソースタイプを指定します。
  9. 複数のストリームやラベルを持つ指標の個別の値を使用するための追加のフィルタ式を指定します。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  10. [スケーリング ポリシー] セクションで、[インスタンスの割り当て] か [使用率のターゲット] を選択します。
    • インスタンスの割り当てポリシーを選択した場合、MIG 内の各 VM に割り当てる作業量を表す値を [単一インスタンスの割り当て] に指定します。たとえば、各 VM に 2 作業単位を割り当てるには「2」と指定します。オートスケーラーは(指標が示した)作業量を完了するために十分な VM を維持します。指標の値が 10 の場合に各 VM に 2 作業単位を割り当てると、オートスケーラーは MIG に 5 個の VM を作成します。
    • 使用率のターゲット ポリシーを選択した場合は、次のようにします。
      • オートスケーラーが維持する指標の値を表す値を [使用率のターゲット] に指定します。
      • 指標の値のタイプを表す [使用率のターゲットのタイプ] を選択します。
  11. 完了したら変更内容を保存します。

gcloud

MIG のオートスケーラーはインスタンスごとのオートスケーラーと同様に作成しますが、--update-stackdriver-metric フラグを指定します。次のいずれかのフラグを含めることで、オートスケーラーがどのようにインスタンスをプロビジョニングするかを指定できます。

  • インスタンスの割り当て: --stackdriver-metric-single-instance-assignment フラグを指定します。
  • 使用率のターゲット: --stackdriver-metric-utilization-target フラグを指定します。

インスタンスの割り当て:

測定する指標を指定し、--stackdriver-metric-single-instance-assignment フラグを指定して各インスタンスが処理する想定作業量を示します。--stackdriver-metric-filter フラグを使用して指標のフィルタを指定する必要もあります。

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --max-num-replicas=max-instances \
    --min-num-replicas=min-instances \
    --update-stackdriver-metric='metric-url' \
    --stackdriver-metric-filter='metric-filter' \
    --stackdriver-metric-single-instance-assignment=instance-assignment

Replace the following:

- group-name: The name of the MIG where you want
  to add an autoscaler.
- zone: The zone where the MIG is located. You
  cannot specify a region for autoscalers on per-group metrics.
- max-instances: The limit on the number of VMs that
  the autoscaler can add to the MIG.
- min-instances: The limit on the minimum number of
  VMs that the autoscaler can have in the MIG.
- metric-url: A protocol-free URL of a
  Monitoring metric.
- metric-filter: A
  [Cloud Monitoring filter](/monitoring/api/v3/filters) where you
  specify a [monitoring filter](/monitoring/api/v3/filters) with a relevant
  [`TimeSeries`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TimeSeries)
  and a
  [`MonitoredResource`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/MonitoredResource).
  The filter must meet the
  [autoscaler filtering requirements](#per_group_filter_requirements).
- instance-assignment: The amount of work to
  assign to each VM instance in the MIG. For example, specify `2` to assign
  two units of work to each VM, or specify `0.5` to assign half a unit
  of work to each VM. The autoscaler scales the MIG to ensure that there are
  enough VMs to complete the available work, which is indicated by the
  metric. If the
  metric value is `10` and you've assigned `0.5` units of work to each
  VM, the autoscaler provisions `20` VMs in the MIG.

**Utilization target:**

In some situations, you might want to use utilization targets with
per-group metrics rather than specify a number of VMs relative
to the value of the metric that your autoscaler measures. You can
still point the autoscaler to a per-group metric, but the autoscaler
attempts to maintain the specified utilization target. Specify the target
and target type with the `--stackdriver-metric-utilization-target` flag.
You must also specify a filter for the metric using the
`--stackdriver-metric-filter` flag.

 
gcloud beta compute instance-groups managed set-autoscaling group-name \
       --zone=zone \
       --max-num-replicas=max-instances \
       --min-num-replicas=min-instances \
       --update-stackdriver-metric='metric-url' \
       --stackdriver-metric-filter='metric-filter' \
       --stackdriver-metric-utilization-target=target-value \
       --stackdriver-metric-utilization-target-type=target-type

Replace the following:

  • group-name: The name of the MIG where you want to add an autoscaler.
  • zone: The zone where the MIG is located. You cannot specify a region for autoscalers on per-group metrics.
  • max-instances: The limit on the number of VMs that the autoscaler can add to the MIG.
  • min-instances: The limit on the minimum number of VMs that the autoscaler can have in the MIG.
  • metric-url: A protocol-free URL of a Monitoring metric.
  • metric-filter: A Cloud Monitoring filter where you specify a monitoring filter with a relevant TimeSeries and a MonitoredResource. You must specify a resource.type value, but you cannot specify gce_instance if you want to scale using per-group metrics. The filter must meet the autoscaler filtering requirements.
  • target-value: The metric value that the autoscaler attempts to maintain.
  • target-type. The value type for the metric. You can set the autoscaler to monitor the metric as a GAUGE, by the delta-per-minute of the value, or by the delta-per-second of the value.

To see a list of available autoscaler gcloud command-line tool commands and flags that work with per-group autoscaling, see the gcloud command-line tool reference (beta).

API

注: 自動スケーリングはマネージド インスタンス グループの機能ですが、[autoscalers](/compute/docs/reference/beta/autoscalers)は個別の API リソースです。自動スケーリング用の API リクエストを作成する際には、その点に注意してください。

1 つの MIG に対して 1 つのオートスケーラーを作成します。次のいずれかのパラメータを含めることで、オートスケーラーがどのようにインスタンスをプロビジョニングするかを指定できます。

  • インスタンスの割り当て: singleInstanceAssignment パラメータを指定します。
  • 使用ターゲット: utilizationTarget パラメータを指定します。

インスタンスの割り当て:

API で、POST リクエストを実行してオートスケーラーを作成します。そのリクエスト本文に、インスタンスごとのオートスケーラーの作成に使用する通常のパラメータを含めます。ただし、single-instance-assignment パラメータを指定します。この single-instance-assignment パラメータは各 VM が処理する想定作業量を指定します。

POST https://compute.googleapis.com/compute/beta/projects/<var>project-id</var>/zones/<var>zone</var>/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/<var>zone</var>/instanceGroupManagers/<var>group-name</var>",
 "autoscalingPolicy": {
  "maxNumReplicas": <var>max-instances</var>,
  "minNumReplicas": <var>min-instances</var>,
  "customMetricUtilizations": [
    {
      "metric": "<var>metric-url</var>",
      "filter": "<var>metric-filter</var>",
      "singleInstanceAssignment": <var>instance-assignment</var>
    }
  ],
 }
}

以下を置き換えます。

  • project-id: 実際のプロジェクト ID。
  • group-name: オートスケーラーを追加する MIG の名前。
  • zone: MIG が配置されているゾーン。グループごとの指標に基づくオートスケーラーではリージョンは指定できません。
  • max-instances: オートスケーラーが MIG に追加できる VM 数の上限。
  • min-instances: オートスケーラーが MIG 内に確保できる VM 数の下限。
  • metric-url: Monitoring 指標のプロトコルフリーの URL。
  • metric-filter: Cloud Monitoring フィルタ。関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。resource.type 値を指定する必要がありますが、グループごとの指標を使用してスケーリングを行う場合は gce_instance を指定できません。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • instance-assignment: MIG 内の各 VM インスタンスに割り当てる作業量。たとえば、各 VM に 2 作業単位を割り当てるには「2」と指定し、1/2 作業単位を割り当てるには「0.5」と指定します。オートスケーラーは MIG をスケーリングして、指標が示す作業量の完了に必要な VM を確保します。指標の値が 10 の場合に各 VM に 0.5 作業単位を割り当てると、オートスケーラーは MIG に 20 個の VM をプロビジョニングします。

使用率のターゲット:

オートスケーラーが測定する指標の値に基づいてインスタンス数を指定するのではなく、グループごとの指標で使用率のターゲットを使用した方が適切な場合があります。この場合でもオートスケーラーでグループごとの指標を参照できますが、オートスケーラーは指定された使用率のターゲットを維持しようとします。このターゲットは utilizationTarget パラメータで指定します。filter パラメータを使用して指標のフィルタを指定する必要もあります。

POST https://compute.googleapis.com/compute/beta/projects/project-id/zones/zone/autoscalers

    {
     "name": "example-autoscaler",
     "target": "zones/zone/instanceGroupManagers/group-name",
     "autoscalingPolicy": {
      "maxNumReplicas": max-instances,
      "minNumReplicas": min-instances,
      "customMetricUtilizations": [
        {
          "metric": "metric-url",
          "filter": "metric-filter",
          "utilizationTarget": target-value,
          "utilizationTargetType": target-type
        }
      ],
     }
    }

以下を置き換えます。

  • project-id: 実際のプロジェクト ID。
  • group-name: オートスケーラーを追加する MIG の名前。
  • zone: MIG が配置されているゾーン。グループごとの指標に基づくオートスケーラーではリージョンは指定できません。
  • max-instances: オートスケーラーが MIG に追加できる VM 数の上限。
  • min-instances: オートスケーラーが MIG 内に確保できる VM 数の下限。
  • metric-url: Monitoring 指標のプロトコルフリーの URL。
  • metric-filter: Cloud Monitoring フィルタ。関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。resource.type 値を指定する必要がありますが、グループごとの指標を使用してスケーリングを行う場合は gce_instance を指定できません。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • target-value: オートスケーラーが維持しようとする指標の値。
  • target-type: 指標の値のタイプ。オートスケーラーが指標を GAUGE としてモニターすることを設定できます。または、値の DELTA_PER_MINUTEDELTA_PER_SECOND のいずれかをモニタリング対象にできます。

例: インスタンスの割り当てを使用して Pub/Sub キューに基づいてスケーリングする

次のように設定されているものとします。

  • アクティブな Pub/Sub トピックは、一部のソースからメッセージを受信します。
  • アクティブな Pub/Sub サブスクリプションが pull 構成内でそのトピックに接続されています。サブスクリプションの名前は our-subscription です。
  • ワーカーの集合(プール)がそのサブスクリプションからメッセージを pull して処理します。そのプールは our-instance-group という名前のシングルゾーン MIG であり、ゾーン us-central1-a にあります。このプールに含まれるワーカー数は 100 を超えることはできません。キューにメッセージがない場合はワーカー数を 0 にスケールインする必要があります。
  • 平均して、1 ワーカーが 1 分間に処理するメッセージは 1 つです。

インスタンスの割り当てに最適な値を判断するために、いくつかの方法を検討します。

  • キュー内のすべてのメッセージをできるだけ迅速に処理しようとする場合は、インスタンスの割り当て値として 1 を選択します。これで、キュー内のメッセージごとに VM が 1 つ作成されます(このグループ内の VM の最大数を限度とします)。ただし、これによってオーバープロビジョニングが起こる可能性があります。最悪の場合、作成された VM が、オートスケーラーによってシャットダウンされるまでの間にメッセージを 1 つしか処理しないという状況も生じます。この場合、リソースの利用時間は実際の作業時間をはるかに超えます。
    • ワーカーが複数のメッセージを並行して処理できる場合、この値を並列プロセスの数に増やすことが適切です。
    • この例の場合、1 つのメッセージを複数のワーカーが処理するのはあり得ないため、この値を 1 より小さい値に設定するのは妥当ではありません。
  • あるいは、処理レイテンシがリソースの使用率やオーバーヘッド コストに比べてそれほど重要でない場合、各 VM がその存続期間中にいくつのメッセージを処理すれば利用効率が高いとみなせるかを計算できます。起動とシャットダウンにかかる時間、そして自動スケーリングが VM をすぐに削除するわけではないという点を考慮してください。たとえば、スタートアップとシャットダウンにかかる時間が合計 5 分、自動スケーリングによって VM が削除されるまでの時間が約 10 分とします。オートスケーラーによってシャットダウンされるまでの間に、追加 VM が少なくとも 15 件のメッセージを処理できるのであれば、追加 VM をグループ内に作成することが効率的であると計算します。結果、VM の作成、スタートアップ、シャットダウンにかかる合計時間を考慮すると、オーバーヘッドは最大 25% です。この場合、インスタンスの割り当ての値として 15 を選択できます。
  • どちらの方法も、処理レイテンシとリソース使用率のどちらを優先するかに応じてバランスを取ることができ、最終的に 1 から 15 の間の数値になります。

使用可能な Pub/Sub 指標を調べると、サブスクリプション キューの長さを表す指標 subscription/num_undelivered_messages が見つかります。

この指標は、キュー内のすべてのメッセージ(現在処理中で、まだ確認応答が行われていないメッセージを含む)をエクスポートします。処理中のメッセージを含まない指標の使用はおすすめできません。こうした指標は作業が残っている場合でも 0 に下がる場合があるため、自動スケーリングによって縮小が行われ、実際の作業が中断されるおそれがあります。

これで、キューに応じた自動スケーリングを構成できます。

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
    --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" \
    --stackdriver-metric-single-instance-assignment=15

例: 使用率のターゲットを使用して平均レイテンシに基づいてスケーリングする

関連する徴候を示す指標が、前の例のような、処理可能な作業量の合計やグループに適用可能な別のリソースを表さず、代わりに、平均やパーセンタイルなどの統計プロパティを表す場合があります。この例では、グループの平均処理レイテンシに基づいてスケーリングすることを想定しています。

次のように設定されているものとします。

  • our-instance-group という名前の MIG に特定のタスクの実行が割り当てられています。このグループはゾーン us-central1-a にあります。
  • 特定のレベルに維持する値をエクスポートする Cloud Monitoring カスタム指標があります。この例では、この指標がグループに割り当てられたクエリ処理の平均レイテンシを表すと想定します。
    • カスタム指標の名前は custom.googleapis.com/example_average_latency です。
    • カスタム指標のラベルのキーは group_name、値は MIG の名前 our-instance-group と同じです。
    • カスタム指標は、グローバル モニタリング対象リソース(特定の VM に関連付けられていないリソース)に関するデータをエクスポートします。

指標の値が特定の値を超えたら、負荷に対応するためにグループに VM を追加し、その値を下回ったら一部のリソースを解放することにします。自動スケーリングでは、指標がターゲットをどの程度超えたか、あるいは下回ったかに比例して、VM を徐々に追加または削除していきます。この例では、計算で得られたターゲット値は 100 と想定しています。

これで、グループごとの使用率のターゲット 100 を使用してグループの自動スケーリングを構成できます。この数値は、オートスケーラーが維持しなければならない指標の値を表します。

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=custom.googleapis.com/example_average_latency \
    --stackdriver-metric-filter "resource.type = global AND metric.label.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second