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

オートスケーラーは、次の指標タイプに基づいてスケーリングを行うように設定できます。

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

始める前に

インスタンスごとの指標

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

個別のインスタンスに固有のものでない他の Stackdriver 指標を使用するスケーリングや、インスタンス グループのインスタンス数をゼロに減らす可能性があるスケーリングが必要な場合は、グループごとの指標を使用してスケーリングするようにインスタンスを構成できます。

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

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

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

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

  • 標準指標がインスタンスの稼働状況を説明するものであり、その値がグループ内の仮想マシン インスタンスの数に比例して増減すること。

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

compute.googleapis.com/instance/cpu/reserved_cores

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

カスタム指標

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

前提条件

カスタム指標を使用するには、以下の作業を行う必要があります。

  • カスタム指標を作成します。カスタム指標の作成方法については、カスタム指標のドキュメントをご覧ください。
  • マネージド インスタンス グループ内のすべてのインスタンスでカスタム指標がエクスポートされるように、マネージド インスタンス グループをセットアップします。

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

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

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

オートスケーラーでカスタム指標を使用できるようにするには、マネージド インスタンス グループ内のすべてのインスタンスから、そのカスタム指標のデータをエクスポートする必要があります。

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

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

標準指標とカスタム指標のどちらを使用する場合でも、オートスケーラーをセットアップする処理は同じです。Stackdriver 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

自動スケーリングの構成手順は、リージョン マネージド インスタンス グループとシングルゾーン マネージド インスタンス グループで異なります。リージョン マネージド インスタンス グループではインスタンスごとの指標のフィルタはサポートされません。

リージョン(複数ゾーン)マネージド インスタンス グループの自動スケーリングを構成するには:

  1. [インスタンス グループ] ページに移動します。
  2. インスタンス グループがない場合は作成します。インスタンス グループがある場合は、リストのいずれかのインスタンス グループの名前をクリックして詳細ページを開きます。グループはリージョン グループでなければなりません。
  3. インスタンス グループの詳細ページで、[グループを編集] ボタンをクリックします。
  4. [自動スケーリング] で [オン] を選択して自動スケーリングを有効にします。
  5. [自動スケーリングの基準] セクションで、[Stackdriver Monitoring の指標] を選択します。
  6. [指標 ID] セクションに、指標名を example.googleapis.com/path/to/metric の形式で入力します。
  7. [ターゲット] セクションで、ターゲット値を指定します。
  8. [ターゲット タイプ] セクションで、指標の測定値の種類と一致するターゲット タイプを指定します。
  9. 完了したら変更内容を保存します。

シングルゾーン マネージド インスタンス グループの自動スケーリングを構成するには:

  1. [インスタンス グループ] ページに移動します。
  2. インスタンス グループがない場合は作成します。インスタンス グループがある場合は、インスタンス グループの名前をクリックして詳細ページを開きます。インスタンス グループはシングルゾーン インスタンス グループでなければなりません。
  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

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

マルチゾーン マネージド インスタンス グループの場合は、--region フラグを使用して、インスタンス グループの場所を指定します。次に例を示します。

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-central1

使用可能な gcloud コマンドとフラグを完全に網羅したリストについては、gcloud リファレンスをご覧ください。

API

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

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

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

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

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

POST https://www.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"
   }          ]
 }
}

インスタンスごとの指標のフィルタリング

インスタンスごとの Stackdriver 指標にフィルタを適用できます。これにより、複数のストリームやラベルを持つ指標の個別の値を使用してシングルゾーン マネージド インスタンス グループをスケーリングできます。

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

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

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

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

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

Console

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

  1. [インスタンス グループ] ページに移動します。
  2. インスタンス グループがない場合は作成します。インスタンス グループがある場合は、インスタンス グループの名前をクリックして詳細ページを開きます。インスタンス グループはシングルゾーン インスタンス グループでなければなりません。
  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

この例では、使用率のターゲットとして 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 は任意のゾーンに置き換えます。リクエスト本文には、nametargetautoscalingPolicy フィールドを含める必要があります。autoscalingPolicy には maxNumReplicascustomMetricUtilizations プロパティを指定します。

POST https://www.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": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

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

グループごとの指標

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

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

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

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

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

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

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

グループごとの Stackdriver 指標にフィルタを適用できます。これにより、複数のストリームやラベルを持つ指標の個別の値を使用してマネージド インスタンス グループをスケーリングできます。

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

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

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

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

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

Console

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

gcloud

マネージド インスタンス グループのオートスケーラーはインスタンスごとのオートスケーラーと同様に作成しますが、--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]

ここで

  • [GROUP_NAME] は、オートスケーラーを追加するマネージド インスタンス グループの名前です。
  • [ZONE] は、マネージド インスタンス グループが存在するゾーンです。グループごとの指標に基づくオートスケーラーではリージョンは指定できません。
  • [MAX_INSTANCES] は、オートスケーラーがマネージド インスタンス グループに追加できるインスタンス数の上限です。
  • [MIN_INSTANCES] は、オートスケーラーがマネージド インスタンス グループ内に確保できるインスタンス数の下限です。
  • [METRIC_URL] は、Google Cloud Monitoring 指標のプロトコルフリーの URL です。
  • [METRIC_FILTER]Stackdriver Monitoring フィルタです。ここには、関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • [INSTANCE_ASSIGNMENT] は、マネージド インスタンス グループ内の各インスタンスに割り当てる作業量です。たとえば、各インスタンスに 2 作業単位を割り当てるには「2」と指定し、1/2 作業単位を割り当てるには「0.5」と指定します。オートスケーラーは、指標が示す量の作業を完了するのに十分なインスタンスを確保するために、適切な数のインスタンスをマネージド インスタンス グループに追加します。指標の値が 10 の場合に各インスタンスに 0.5 作業単位を割り当てると、オートスケーラーはマネージド インスタンス グループに 20 個のインスタンスをプロビジョニングします。

使用率のターゲット:

オートスケーラーが測定する指標の値に基づいてインスタンス数を指定するのではなく、グループごとの指標で使用率のターゲットを使用した方が適切な場合があります。この場合でもオートスケーラーでグループごとの指標を参照できますが、オートスケーラーは指定された使用率のターゲットを維持しようとします。ターゲットとターゲットのタイプは --stackdriver-metric-utilization-target フラグを使用して指定します。--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-utilization-target=[TARGET_VALUE] \
   --stackdriver-metric-utilization-target-type=[TARGET_TYPE]

ここで

  • [GROUP_NAME] は、オートスケーラーを追加するマネージド インスタンス グループの名前です。
  • [ZONE] は、マネージド インスタンス グループが存在するゾーンです。グループごとの指標に基づくオートスケーラーではリージョンは指定できません。
  • [MAX_INSTANCES] は、オートスケーラーがマネージド インスタンス グループに追加できるインスタンス数の上限です。
  • [MIN_INSTANCES] は、オートスケーラーがマネージド インスタンス グループ内に確保できるインスタンス数の下限です。
  • [METRIC_URL] は、Google Cloud Monitoring 指標のプロトコルフリーの URL です。
  • [METRIC_FILTER]Stackdriver Monitoring フィルタです。ここには、関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。resource.type の値を指定する必要がありますが、グループごとの指標を使用してスケーリングする場合は gce_instance を指定できません。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • [TARGET_VALUE] は、オートスケーラーが維持しようとする指標の値です。
  • [TARGET_TYPE] は指標の値のタイプです。オートスケーラーが指標を GAUGE としてモニタリングするように設定できます。または、値の delta-per-minutedelta-per-second のいずれかをモニタリング対象にできます。

グループごとの自動スケーリングに使用できるオートスケーラーの gcloud コマンドとフラグを完全に網羅したリストについては、gcloud ベータ版のリファレンスをご覧ください。

API

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

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

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

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

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

POST https://www.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]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

ここで

  • [PROJECT_ID] はプロジェクト ID です。
  • [ZONE] は、マネージド インスタンス グループが存在するゾーンです。
  • [GROUP_NAME] は、オートスケーラーを追加するマネージド インスタンス グループの名前です。
  • [MAX_INSTANCES] は、オートスケーラーがマネージド インスタンス グループに追加できるインスタンス数の上限です。
  • [MIN_INSTANCES] は、オートスケーラーがマネージド インスタンス グループ内に確保できるインスタンス数の下限です。
  • [METRIC_URL] は、Google Cloud Monitoring 指標のプロトコルフリーの URL です。
  • [METRIC_FILTER]Stackdriver Monitoring フィルタです。ここには、関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。resource.type の値を指定する必要がありますが、グループごとの指標を使用してスケーリングする場合は gce_instance を指定できません。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • [INSTANCE_ASSIGNMENT] は、マネージド インスタンス グループ内の各インスタンスに割り当てる作業量です。たとえば、各インスタンスに 2 作業単位を割り当てるには「2」と指定し、1/2 作業単位を割り当てるには「0.5」と指定します。オートスケーラーは、指標が示す量の作業を完了するのに十分なインスタンスを確保するために、適切な数のインスタンスをマネージド インスタンス グループに追加します。指標の値が 10 の場合に各インスタンスに 0.5 作業単位を割り当てると、オートスケーラーはマネージド インスタンス グループに 20 個のインスタンスをプロビジョニングします。

使用率のターゲット:

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

POST https://www.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]
    }
  ],
 }
}

ここで

  • [GROUP_NAME] は、オートスケーラーを追加するマネージド インスタンス グループの名前です。
  • [ZONE] は、マネージド インスタンス グループが存在するゾーンです。
  • [MAX_INSTANCES] は、オートスケーラーがマネージド インスタンス グループに追加できるインスタンス数の上限です。
  • [MIN_INSTANCES] は、オートスケーラーがマネージド インスタンス グループ内に確保できるインスタンス数の下限です。
  • [METRIC_URL] は、Google Cloud Monitoring 指標のプロトコルフリーの URL です。
  • [METRIC_FILTER]Stackdriver Monitoring フィルタです。ここには、関連する TimeSeriesMonitoredResource を含むモニタリング フィルタを指定します。resource.type の値を指定する必要がありますが、グループごとの指標を使用してスケーリングする場合は gce_instance を指定できません。このフィルタはオートスケーラーのフィルタ要件を満たしている必要があります。
  • [TARGET_VALUE] は、オートスケーラーが維持しようとする指標の値です。
  • [TARGET_TYPE] は指標の値のタイプです。オートスケーラーが指標を GAUGE としてモニタリングするように設定できます。または、値の DELTA_PER_MINUTEDELTA_PER_SECOND のいずれかをモニタリング対象にできます。

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

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

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

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

  • キュー内のすべてのメッセージをできるだけ迅速に処理しようとする場合は、インスタンスの割り当て値として 1 を選択します。これで、キュー内のメッセージごとにインスタンスが 1 つ作成されます(このグループ内のインスタンスの最大数を限度とします)。ただし、これによってオーバープロビジョニングが起こる可能性があります。最悪の場合、作成されたインスタンスが、オートスケーラーによってシャットダウンされるまでの間にメッセージを 1 つしか処理しないという状況も生じます。この場合、リソースの利用時間は実際の作業時間をはるかに超えます。
    • ワーカーが複数のメッセージを並行して処理できる場合、この値を並列プロセスの数に増やすことが適切です。
    • この例の場合、1 つのメッセージを複数のワーカーが処理するのはあり得ないため、この値を 1 より小さい値に設定するのは妥当ではありません。
  • あるいは、処理レイテンシがリソースの使用率やオーバーヘッド コストに比べてそれほど重要でない場合、各インスタンスがその存続期間中にいくつのメッセージを処理すれば利用効率が高いとみなせるかを計算できます。起動とシャットダウンにかかる時間、そして自動スケーリングがインスタンスをすぐに削除するわけではないという点を考慮してください。たとえば、起動とシャットダウンにかかる時間が合計 5 分、自動スケーリングによってインスタンスが削除されるまでの時間が約 10 分とします。オートスケーラーによってシャットダウンされるまでの間に、追加インスタンスが少なくとも 15 件のメッセージを処理できるのであれば、追加インスタンスをグループ内に作成することが効率的であると計算します。結果、インスタンスの作成、起動、シャットダウンにかかる合計時間を考慮すると、オーバーヘッドは最大 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 という名前のマネージド インスタンス グループに特定のタスクの実行が割り当てられています。このグループはゾーン us-central1-a にあります。
  • 特定のレベルに維持する値をエクスポートする Stackdriver Monitoring カスタム指標があります。この例では、この指標がグループに割り当てられたクエリ処理の平均レイテンシを表すと想定します。
    • カスタム指標の名前は custom.googleapis.com/example_average_latency です。
    • カスタム指標のラベルのキーは group_name、値はインスタンス グループの名前 our-instance-group と同じです。
    • カスタム指標は、グローバル モニタリング対象リソース(特定のインスタンスに関連付けられていないリソース)に関するデータをエクスポートします。

指標の値が特定の値を超えたら、負荷に対応するためにグループにインスタンスを追加し、その値を下回ったら一部のリソースを解放することにします。自動スケーリングでは、指標がターゲットをどの程度超えたり下回ったりしたかに比例して、インスタンスを徐々に追加または削除していきます。この例では、計算で得られたターゲット値は 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
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント