Monitoring 指標に基づいてスケーリングする


Cloud Monitoring の指標に基づく自動スケーリングを使用すると、アプリの測定結果に応じて必要な容量を調整できます。指標に基づいて MIG を自動スケーリングする場合、オートスケーラーは指標の値が増加すると VM を作成し、値が減少すると VM を削除します。

たとえば、ユーザーあたりに必要な VM の数、レイテンシ、Pub/Sub サブスクリプション内のメッセージ数を定義できます。Monitoring サービスに用意されている組み込み指標、またはアプリケーションからエクスポートしたカスタム指標を使用できます。

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

CPU 使用率ロード バランシング処理能力スケジュールに基づいて MIG を自動スケーリングすることもできます。

始める前に

  • オートスケーラーの基礎知識を確認します。
  • 自動スケーリング構成で使用される モニタリング指標のコンセプトについてお読みください。
  • Ops エージェントの指標に基づいて自動スケーリングを行うには、Ops エージェントをインストールします。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

制限事項

Monitoring の指標に基づくスケーリングには、すべてのオートスケーラーの制限事項と以下の制限事項が適用されます。

  • 自動スケーリングは、MIG ごとに最大 5 つの Monitoring の指標に基づいて構成できます。
  • 値の型が INT64 または DOUBLE の指標のみに基づいて自動スケーリングできます。他の値の型はサポートされていません。
  • 1 つの自動スケーリング ポリシーの中に同じ指標を複数回構成することはできません。

Monitoring 指標に基づいて自動スケーリングを構成する

自動スケーリングでは、2 つの異なる方法で Monitoring の指標の値を使用できます。

  • 使用率のターゲット: オートスケーラーで指標を特定の値に維持したい場合は、使用率のターゲットを構成します。オートスケーラーは、指標の値が目標を上回った場合に VM を作成し、指標の値が目標を下回った場合に VM を削除します。これは、ネットワーク トラフィック、メモリ / ディスクの使用率、アプリケーションの平均レイテンシなどの指標に対して便利です。次の図は、使用率のターゲットを維持するためにオートスケーラーが指標の値に応じて VM を追加、削除する様子を示しています。

    使用率のターゲットを維持するために VM を追加、削除するオートスケーラー。

  • 単一インスタンスの割り当て: 各 VM に割り当てできる作業量に基づいて自動スケーリングする場合は、単一インスタンスの割り当てを構成します。指定した単一インスタンスの割り当ては、各 VM が処理できる想定作業量を表します。オートスケーラーは、指標の値を単一インスタンスの割り当て値で割って、必要な VM の数を計算します。たとえば、指標が 100 であり、単一インスタンスの割り当てが 5 の場合、オートスケーラーは MIG に 20 個の VM を作成します。これは、Pub/Sub キュー長やバッチジョブ数など、作業量を反映する指標に対して役立ちます。単一インスタンスの割り当ては、各 VM から提供される指標には適用されません。次の図は、単一インスタンスの割り当てによってスケーリングを行う場合の指標の値と VM 数の比例関係を示しています。

    指標の値とインスタンス数の比例関係。

自動スケーリングにより指標を目標値で維持する

指標を目標値で維持する場合は、使用率の目標を指定します。オートスケーラーは、指標の値が目標を上回った場合に VM を作成し、指標の値が目標を下回った場合に VM を削除します。

  • MIG の各 VM から指標が得られる場合、オートスケーラーは MIG 内のすべての VM の指標値の平均を使用し、それを使用率の目標と比較します。たとえば、VM あたりの TCP 接続数を示す tcp_connections 指標を使用して自動スケーリングする場合、オートスケーラーは MIG 内のすべての VM の TCP 接続の平均数を取得し、それを目標と比較します。VM から取得するこのような指標を使用する場合、オートスケーラーが指標の値を発表するためには少なくとも 1 つの VM が必要であるため、MIG は 0 にスケールインできません。

  • 指標が MIG 全体についてのもので、MIG 内の VM から取得するものでない場合、オートスケーラーはその指標の値を使用率のターゲットと比較します。たとえば、アプリケーションのレイテンシを測定するカスタム指標を使用できます。

指標に複数の値がある場合は、指標の個々の値を使用して自動スケーリングするようにフィルタを適用します。お使いの構成で使用できる指標フィルタとその他のフィールドの詳細については、モニタリング指標のコンセプトをご覧ください。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. マネージド インスタンス グループがない場合は作成します。存在している場合は、リストにある MIG の名前をクリックして、そのインスタンス グループ ページを開きます。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、Cloud Monitoring 指標のシグナルが存在する場合はクリックして編集し、存在しない場合は [シグナルを追加] をクリックして新しいシグナルを追加します。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。次のように操作します。

    1. [指標を選択] をクリックします。
      1. 自動スケーリングに使用する指標を選択します。任意のキーワード(メモリ、バイト、ディスクなど)に基づいて指標をフィルタリングできます。
      2. [適用] をクリックします。ペインには、選択した指標のデータを示すグラフが表示されます。
    2. 指標の特定のデータを使用する場合は、次のようにラベルに基づいてフィルタを追加します。

      1. [フィルタ] セクションで [フィルタを追加] をクリックします。
      2. [ラベル] を選択し、を入力します。
      3. [完了] をクリックします。グラフが更新され、フィルタリングされた指標の値が表示されます。
    3. MIG を自動スケーリングするために使用される指標の集計値を表示するには、[グラフで集計を表示する] ボタンをオンにします。グラフが更新され、集計値が表示されます。

    4. [自動スケーリングの指標ターゲット オプション] セクションで、[使用率のターゲット] を選択します。

    5. 次のフィールドを入力します。

      1. 使用率のターゲット: オートスケーラーが維持する値を指定します。この値は正の数値である必要があります。たとえば、24.5 と 100 はどちらも許容される値です。
      2. 使用率のターゲットのタイプ: 指標の測定値の種類に対応するターゲット タイプを選択します。正確な比較のために、使用率のターゲットが秒単位で測定される場合は、ターゲット タイプとして [デルタ / 秒] を使用します。同様に、分単位で測定される使用率のターゲットには [デルタ / 分] を使用します。
        • ゲージ: オートスケーラーは直近の数分間に収集されたデータの平均値を計算し、計算した値を使用率のターゲットと比較します。
        • デルタ / 分: オートスケーラーは 1 分あたりの平均増加率を計算して、使用率のターゲットと比較します。
        • デルタ / 秒: オートスケーラーは 1 秒あたりの平均増加率を計算して、使用率のターゲットと比較します。
    6. 指標の構成が完了したら、[選択] をクリックします。

  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 構成を完了するには、[保存] をクリックします。

gcloud

Monitoring 指標に基づいて自動スケーリングを構成するには、set-autoscaling コマンドを使用します。

次のコマンドを使用して、Monitoring 指標に基づいて使用率のターゲットに対する自動スケーリングを行います。

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=METRIC_URL \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

指標に複数の値があり、自動スケーリングに個別の値を使用する場合は、次のコマンドで指定しているように --stackdriver-metric-filter フラグを使用します。

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=METRIC_URL \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE \
  --stackdriver-metric-filter="METRIC_FILTER"

次のように置き換えます。

  • MIG_NAME: オートスケーラーを追加する MIG。
  • MAX_INSTANCES: MIG に含まれる VM の最大数。
  • MIN_INSTANCES: MIG に含まれる VM の最大数。
  • METRIC_URL: Monitoring 指標のプロトコルフリーの URL。例: compute.googleapis.com/instance/uptime。カスタム指標を使用する場合は、指標がカスタム指標の要件を満たしている必要があります。
  • TARGET_VALUE: オートスケーラーが維持しようとする指標の値。
  • TARGET_TYPE: 指標の値のタイプ。
    • gauge: オートスケーラーは直近の数分間に収集されたデータの平均値を計算し、それを使用率のターゲットと比較します。
    • delta-per-minute: オートスケーラーは 1 分あたりの平均増加率を計算し、それを使用率のターゲットと比較します。
    • delta-per-second: オートスケーラーは 1 秒あたりの平均増加率を計算し、それを使用率のターゲットと比較します。正確な比較のために、使用率のターゲットを秒単位で設定する場合は、ターゲット タイプとして delta-per-second を使用します。同様に、分単位の使用率のターゲットには delta-per-minute を使用します。
  • METRIC_FILTER: 複数の値を持つ指標の個別の値を使用するためにフィルタを適用し、モニタリング対象のリソースタイプを指定します。各 VM から得た指標を使用する場合は、gce_instance がデフォルトで使用されるため、モニタリング対象のリソースタイプを指定する必要はありません。その他の指標の場合は、フィルタ式で resource.type を使用してモニタリング対象リソースを指定します。指標フィルタの詳細については、モニタリング指標のコンセプトをご覧ください。

gcloud CLI で使用可能なコマンドとフラグの全一覧を確認するには、gcloud リファレンスをご覧ください。

REST

ゾーン MIG の Monitoring 指標に基づいて自動スケーリングを構成するには、autoscalers リソースを使用します。また、リージョン MIG の場合は、regionAutoscalers リソースを使用します。

次の呼び出しを行い、Monitoring 指標に基づいてゾーン MIG を使用率のターゲットに対して自動スケーリングします。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "utilizationTarget": TARGET_VALUE,
      "utilizationTargetType": TARGET_TYPE
    }
  ],
 }
}

指標に複数の値があり、自動スケーリングに個別の値を使用する場合は、次の API 呼び出しで指定しているように filter パラメータを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "utilizationTarget": TARGET_VALUE,
      "utilizationTargetType": TARGET_TYPE,
      "filter": "METRIC_FILTER"
    }
  ],
 }
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: オートスケーラーの名前。
  • MIG_NAME: オートスケーラーを追加する MIG。
  • MAX_INSTANCES: MIG に含まれる VM の最大数。
  • MIN_INSTANCES: MIG に含まれる VM の最大数。
  • METRIC_URL: Monitoring 指標のプロトコルフリーの URL。例: compute.googleapis.com/instance/uptime。カスタム指標を使用する場合は、指標がカスタム指標の要件を満たしている必要があります。
  • TARGET_VALUE: オートスケーラーが維持しようとする指標の値。
  • TARGET_TYPE: 指標の値のタイプ。
    • GAUGE: オートスケーラーは直近の数分間に収集されたデータの平均値を計算し、それを使用率のターゲットと比較します。
    • DELTA_PER_MINUTE: オートスケーラーは 1 分あたりの平均増加率を計算し、それを使用率のターゲットと比較します。
    • DELTA_PER_SECOND: オートスケーラーは 1 秒あたりの平均増加率を計算し、それを使用率のターゲットと比較します。正確な比較のために、使用率のターゲットを秒単位で設定する場合は、ターゲット タイプとして DELTA_PER_SECOND を使用します。同様に、分単位の使用率のターゲットには DELTA_PER_MINUTE を使用します。
  • METRIC_FILTER: 複数の値を持つ指標の個別の値を使用するためにフィルタを適用し、モニタリング対象のリソースタイプを指定します。各 VM から得た指標を使用する場合は、gce_instance がデフォルトで使用されるため、モニタリング対象のリソースタイプを指定する必要はありません。その他の指標については、resource.type セレクタを使用してモニタリング対象リソースを指定する必要があります。指標フィルタの詳細については、モニタリング指標のコンセプトをご覧ください。

MIG 内の各 VM で使用可能な作業量に応じて自動スケーリングする

MIG 内の各 VM で使用できる作業量に基づいて自動スケーリングするには、単一インスタンスの割り当てを指定します。設定した単一インスタンスの割り当ての値は、各 VM が処理できる想定作業量を示します。オートスケーラーは、指標の値を単一インスタンスの割り当て値で割って、必要な VM の数を計算します。

指標値 0 は、MIG が完了すべき作業がないことを示します。MIG のインスタンスの最小数が 0 に設定され、指標値が 0 まで下がると、MIG は指標値が増加するまで 0 に向かってスケールインします。

指標に複数の値がある場合は、指標の個々の値を使用して自動スケーリングするようにフィルタを適用します。お使いの構成で使用できる指標フィルタとその他のフィールドの詳細については、モニタリング指標のコンセプトをご覧ください。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. マネージド インスタンス グループがない場合は作成します。存在している場合は、リストにある MIG の名前をクリックして、そのインスタンス グループ ページを開きます。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、Monitoring 指標のシグナルが存在する場合はクリックして編集し、存在しない場合は [シグナルを追加] をクリックして新しい指標を追加します。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。次のように操作します。

    1. [指標を選択] をクリックします。
      1. 自動スケーリングに使用する指標を選択します。任意のキーワード(メモリ、バイト、ディスクなど)に基づいて指標をフィルタリングできます。
      2. [適用] をクリックします。ペインには、選択した指標のデータを示すグラフが表示されます。
    2. 指標の特定のデータを使用する場合は、次のようにラベルに基づいてフィルタを追加します。

      1. [フィルタ] セクションで [フィルタを追加] をクリックします。
      2. [ラベル] を選択し、を入力します。
      3. [完了] をクリックします。グラフが更新され、フィルタリングされた指標値が表示されます。
    3. MIG を自動スケーリングするために使用される指標の集計値を表示するには、[グラフで集計を表示する] ボタンをオンにします。グラフが更新され、集計値が表示されます。

    4. [自動スケーリングの指標ターゲット オプション] セクションで、[単一の VM インスタンスの割り当て] を選択します。

    5. MIG 内の各 VM に割り当てる作業量を表す [単一インスタンスの割り当て] 値を指定します。

    6. 指標の構成が完了したら、[選択] をクリックします。

  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 構成を完了するには、[保存] をクリックします。

gcloud

Monitoring 指標に基づいて自動スケーリングを構成するには、set-autoscaling コマンドを使用します。

このコマンドで --stackdriver-metric-single-instance-assignment フラグを指定し、グループ内の各 VM が処理する想定作業量を示します。

次のコマンドは、各 VM の作業割り当てに基づいてオートスケーラーを作成します。

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
    --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

次のように置き換えます。

  • MIG_NAME: オートスケーラーを追加する MIG の名前。
  • MAX_INSTANCES: MIG に含まれる VM の最大数。
  • MIN_INSTANCES: MIG に含まれる VM の最大数。
  • METRIC_URL: Monitoring 指標のプロトコルフリーの URL。例: compute.googleapis.com/instance_group/size。カスタム指標を使用する場合は、指標がカスタム指標の要件を満たしている必要があります。
  • METRIC_FILTER: 複数の値を持つ指標の個別の値を使用するためにフィルタを適用し、モニタリング対象のリソースタイプを指定します。指標フィルタの詳細については、モニタリング指標のコンセプトをご覧ください。
  • INSTANCE_ASSIGNMENT: MIG 内の各 VM インスタンスに割り当てる作業量。

REST

ゾーン MIG の Monitoring 指標に基づいて自動スケーリングを構成するには、autoscalers リソースを使用します。また、リージョン MIG の場合は、regionAutoscalers リソースを使用します。

singleInstanceAssignment パラメータを使用して、各 VM で処理する想定作業量を指定します。

たとえば、次の呼び出しを行い、インスタンスの割り当てに基づいてゾーン MIG をスケーリングするオートスケーラーを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers

{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "filter": "METRIC_FILTER",
      "singleInstanceAssignment": INSTANCE_ASSIGNMENT
    }
  ],
 }
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: オートスケーラーの名前。
  • MIG_NAME: オートスケーラーを追加する MIG の名前。
  • MAX_INSTANCES: MIG に含まれる VM の最大数。
  • MIN_INSTANCES: MIG に含まれる VM の最大数。
  • METRIC_URL: Monitoring 指標のプロトコルフリーの URL。例: compute.googleapis.com/instance_group/size。カスタム指標を使用する場合は、指標がカスタム指標の要件を満たしている必要があります。
  • METRIC_FILTER: 複数の値を持つ指標の個別の値を使用するためにフィルタを適用し、モニタリング対象のリソースタイプを指定します。指標フィルタの詳細については、モニタリング指標のコンセプトをご覧ください。
  • INSTANCE_ASSIGNMENT: MIG 内の各 VM インスタンスに割り当てる作業量。

指標に基づく自動スケーリングの例

このセクションでは、自動スケーリングに使用される指標の例をいくつか示します。指標の一覧については、Google Cloud の指標をご覧ください。

カスタム指標に基づいて自動スケーリングする

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

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

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

指標の値が特定の値を超えたら、負荷に対応するためにグループに VM を追加し、その値を下回ったら一部のリソースを解放することにします。指標がターゲットをどの程度超えたか、または下回ったかに比例して、オートスケーラーが徐々に VM を追加または削除するようにしたいとします。この例では、ターゲット値を 250 delta/sec に設定したと想定します。

使用率のターゲットである 250 を使用してグループの自動スケーリングを構成できます。これは、オートスケーラーが維持しようとする指標値の変化率を表します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。

    1. [指標を選択] をクリックします。
      1. [グローバル] > [カスタム指標] から指標を選択します。
      2. [適用] をクリックします。
    2. [フィルタ] セクションで、次の操作を行います。
      1. [フィルタを追加] をクリックします。
      2. [ラベル] プルダウンから [group_name] を選択します。
      3. [] フィールドに「our-instance-group」と入力します。
      4. [完了] をクリックします。グラフが更新され、フィルタリングされた指標の値が表示されます。
    3. [自動スケーリングの指標ターゲット オプション] セクションで、次の操作を行います。
      1. [使用率のターゲット] を選択します。
      2. 使用率のターゲット値として 250 を入力します。
      3. 使用率のターゲット タイプを [デルタ / 秒] に設定します。
    4. 指標を構成したら、[選択] をクリックします。
  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 終わったら [保存] をクリックします。

gcloud

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

REST

POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/autoscalers
{
"name": "our-instance-group-autoscaler",
"target": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instanceGroupManagers/our-instance-group",
"autoscalingPolicy": {
  "maxNumReplicas": 50,
  "minNumReplicas": 0,
  "customMetricUtilizations": [
    {
      "filter": "metric.labels.group_name=\"our-instance-group\" AND resource.type = \"global\"",
      "utilizationTargetType": "delta-per-second",
      "utilizationTarget": 250.0,
      "metric": "custom.googleapis.com/example_average_latency"
    }
  ]
}
}

Pub/Sub の未確認メッセージに基づいて自動スケーリングする

Pub/Sub サブスクリプションの未確認メッセージに基づいて自動スケーリングを構成するには、pubsub によって提供される subscription/num_undelivered_messages 指標を使用し、subscription ID でフィルタリングします。

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

サブスクリプションがない場合は、自動スケーリングを構成する前に pullpush、または BigQuery のサブスクリプションを作成できます。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Pub/Sub キュー] に設定します。

  7. トピックを選択します。新しいトピックが必要な場合は、[トピックを作成] をクリックして作成します。

  8. MIG を自動スケーリングする基準に基づいてサブスクリプションを選択します。新しいサブスクリプションが必要な場合は、[サブスクリプションの作成] をクリックして作成します。

  9. [各 VM に割り当てるメッセージ数] フィールドに、各 VM が処理する未確認メッセージの想定数を指定します。

  10. [完了] をクリックします。

  11. 終わったら [保存] をクリックします。

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
  --stackdriver-metric-filter="resource.type=\"pubsub_subscription\" AND resource.labels.subscription_id=\"SUBSCRIPTION_ID\"" \
  --stackdriver-metric-single-instance-assignment=NUMBER_OF_MESSAGES_TO_ASSIGN_TO_EACH_VM

REST

ゾーン MIG の自動スケーリングを構成するには、autoscalers リソースを使用します。リージョン MIG の場合は、regionAutoscalers リソースを使用します。

たとえば、ゾーン MIG のオートスケーラーを作成するには、次の呼び出しを行います。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "singleInstanceAssignment": NUMBER_OF_MESSAGES_TO_ASSIGN_TO_EACH_VM,
      "filter": "resource.type = \"pubsub_subscription\" AND resource.labels.subscription_id=\"SUBSCRIPTION_ID\"",
      "metric": "pubsub.googleapis.com/subscription/num_undelivered_messages"
    }
  ]
}
}

受信ネットワーク トラフィックに基づいて自動スケーリングする

MIG 内の VM への受信ネットワーク トラフィックに基づいて自動スケーリングを構成するには、compute が提供する instance/network/received_bytes_count 指標を使用します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。

    1. [指標を選択] をクリックします。
      1. [VM インスタンス] > [インスタンス] > [受信バイト数]compute.googleapis.com/instance/network/received_bytes_count)を選択します。
      2. [適用] をクリックします。
    2. [自動スケーリングの指標ターゲット オプション] セクションで、次の操作を行います。
      1. [使用率のターゲット] が選択されていることを確認します。
      2. 使用率のターゲット値を入力します。
      3. 使用率のターゲットのタイプを設定します。
    3. 指標を構成したら、[選択] をクリックします。
  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 終わったら [保存] をクリックします。

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "utilizationTargetType": "TARGET_TYPE",
      "utilizationTarget": TARGET_VALUE,
      "metric": "compute.googleapis.com/instance/network/received_bytes_count"
    }
  ]
}
}

メモリ使用量に基づいて自動スケーリングする

使用メモリの割合に基づいて自動スケーリングを構成するには、メモリの Ops エージェントの指標によって提供される percent_used 指標を指定します。used のメモリ状態のみを使用するには、指標を state でフィルタする必要があります。フィルタを指定しない場合、オートスケーラーは bufferedcachedfreeslabused とラベル付けされたすべての状態のメモリ使用量の合計を取得します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. インスタンス グループの概要ページで [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。

    1. [指標を選択] をクリックします。
      1. [VM インスタンス] > [メモリ] > [メモリ使用率]compute.googleapis.com/instance/memory/percent_used)を選択します。
      2. [適用] をクリックします。
    2. [フィルタ] セクションで、次の操作を行います。
      1. [フィルタを追加] をクリックします。
      2. [ラベル] プルダウンから、[状態] 指標ラベルを選択します。
      3. [] フィールドに「used」と入力します。
      4. [完了] をクリックします。
    3. [自動スケーリングの指標ターゲット オプション] セクションで、次の操作を行います。
      1. [使用率のターゲット] が選択されていることを確認します。
      2. 使用率のターゲット値を入力します。
      3. 使用率のターゲット タイプを ゲージ に設定します。
    4. 指標を構成したら、[選択] をクリックします。
  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 終わったら [保存] をクリックします。

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=agent.googleapis.com/memory/percent_used \
  --stackdriver-metric-filter="metric.labels.state = \"used\""
  --stackdriver-metric-utilization-target-type=gauge \
  --stackdriver-metric-utilization-target=TARGET_VALUE  \

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "filter": "metric.labels.state=\"used\"",
    "utilizationTargetType": "GAUGE",
    "utilizationTarget": TARGET_VALUE,
    "metric": "agent.googleapis.com/memory/percent_used"
  }
  ]
}
}

ディスク I/O に基づいて自動スケーリングする

ディスク I/O オペレーションの合計数に基づいて自動スケーリングを構成するには、ディスクの Ops エージェント指標によって提供される operation_count 指標を使用します。読み取りオペレーションまたは書き込みオペレーションに基づいてスケーリングする場合は、direction ラベルを使用して指標をフィルタします。同様に、特定のデバイスでのディスク オペレーションに基づいてスケーリングするには、指標フィルタの device ラベルを使用します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. インスタンス グループの概要ページで [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。

    1. [指標を選択] をクリックします。
      1. [VM インスタンス] > [ディスク] > [ディスク オペレーション]agent.googleapis.com/disk/operation_count)を選択します。
      2. [適用] をクリックします。
    2. [自動スケーリングの指標ターゲット オプション] セクションで、次の操作を行います。
      1. [使用率のターゲット] が選択されていることを確認します。
      2. 使用率のターゲット値を入力します。
      3. 使用率のターゲットのタイプを設定します。
    3. 指標を構成したら、[選択] をクリックします。
  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 終わったら [保存] をクリックします。

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES  \
  --min-num-replicas=MIN_INSTANCES  \
  --update-stackdriver-metric=agent.googleapis.com/disk/operation_count \
  --stackdriver-metric-utilization-target=TARGET_VALUE  \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "utilizationTargetType": "TARGET_TYPE",
    "utilizationTarget": TARGET_VALUE,
    "metric": "agent.googleapis.com/disk/operation_count"
  }
  ]
}
}

別の MIG のサイズに基づいて自動スケーリングする

同じプロジェクト内の別の MIG のサイズに基づいて MIG を自動スケーリングできます。たとえば、ロードバランサに基づいて自動スケーリングするフロントエンド MIG と、そのフロントエンドに比例して自動スケーリングするバックエンド MIG を備える多層アプリケーションが考えられます。単一インスタンスの割り当てを使用して、フロントエンド VM あたりの必要なバックエンド VM の数を定義します。4 つのフロントエンド VM ごとにバックエンド VM が 1 つ必要な場合は、バックエンド MIG で単一インスタンスの割り当てを 4 に設定します。

別の MIG(MIG_2)のサイズに基づいて MIG(MIG_1)を自動スケーリングするには、compute によって提供される instance_group/size 指標を使用します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストから MIG の名前をクリックして、インスタンス グループの概要ページを開きます。

  3. インスタンス グループの概要ページで [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。
  5. [自動スケーリング] の [自動スケーリング シグナル] セクションで、[シグナルを追加] をクリックします。

  6. [シグナルタイプ] を [Cloud Monitoring の指標] に設定します。

  7. [構成] をクリックします。[リソースと指標] ペインが開きます。

    1. [指標を選択] をクリックします。
      1. [インスタンス グループ] > [Instance_group] > [インスタンス グループのサイズ]compute.googleapis.com/instance_group/size)を選択します。
      2. [適用] をクリックします。
    2. [フィルタ] セクションで、次の操作を行います。
      1. [フィルタを追加] をクリックします。
      2. [ラベル] プルダウンで、instance_group_name リソースラベルを選択します。
      3. [] フィールドに、MIG を自動スケーリングする基準となる MIG の名前(MIG_2)を入力します。
      4. [完了] をクリックします。
    3. [自動スケーリングの指標ターゲット オプション] セクションで、次の操作を行います。
      1. [単一 VM インスタンスの割り当て] を選択します。
      2. MIG_2 の 4 つの VM ごとに 1 つの VM を現在の MIG(MIG_1)に保持する場合は、[単一 VM インスタンスの割り当て] フィールドに「4」と入力します。
    4. 指標を構成したら、[選択] をクリックします。
  8. 指標の詳細を確認し、[完了] をクリックします。

  9. 終わったら [保存] をクリックします。

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_1 \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=compute.googleapis.com/instance_group/size \
  --stackdriver-metric-filter="resource.type = \"instance_group\" AND resource.labels.location = \"ZONE|REGION\" AND resource.labels.instance_group_name = \"MIG_2\"" \
  --stackdriver-metric-single-instance-assignment=4

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_1",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "singleInstanceAssignment": 4,
    "filter": "resource.type = \"instance_group\" and resource.labels.location = \"ZONE|REGION\" AND resource.labels.instance_group_name = \"MIG_2\"",
    "metric": "compute.googleapis.com/instance_group/size"
  }
  ]
}
}

モニタリング指標のコンセプト

このセクションでは、Monitoring 指標に基づいて自動スケーリングを構成する際に知っておく必要がある Monitoring 指標のコンセプトの概要を簡単に説明します。

  • 指標 ID または指標 URL: プロトコルフリーの URL の形式の指標名。組み込み指標の URL は、指標リストで確認できます。

    たとえば、未確認メッセージの数を示す Pub/Sub 指標の URL は pubsub.googleapis.com/subscription/num_undelivered_messages です。

  • モニタリング対象リソースタイプ: 指標値のソース。指標のモニタリング対象リソースタイプは、指標リストで確認できます。

    たとえば、pubsub.googleapis.com/subscription/num_undelivered_messages 指標のモニタリング対象リソースタイプは pubsub_subscription です。各モニタリング対象リソースタイプの詳細については、モニタリング対象リソースタイプをご覧ください。

  • 指標フィルタ: 指標に複数の値がある場合、オートスケーラーはフィルタによって、取りうる指標値一式から特定の指標値を識別できます。指標モニタリング対象リソースタイプで定義されたラベルを使用して、値をフィルタリングします。さまざまなフィルタを使用して指標値を調べる場合は、Metrics Explorer で試すことができます。

    たとえば、次のスクリーンショットは、使用可能なすべてのサブスクリプションの未確認メッセージ数を表す pubsub.googleapis.com/subscription/num_undelivered_messages 指標を示しています。グラフの各線はサブスクリプションを示しています。

    Metrics Explorer でのフィルタなしの指標値の表示。

    フィルタがない場合、オートスケーラーはすべてのサブスクリプションの指標値の合計を取得します。単一サブスクリプションに基づいて自動スケーリングするには、pubsub_subscription に定義された subscription_id ラベルにフィルタを適用します。次のスクリーンショットは、フィルタを適用した後の単一サブスクリプションを示しています。

    Metrics Explorer でのフィルタリングされた指標値の表示。

指標フィルタリングの要件

複数の値(ラベルを使用して分類)を持つ指標を使用する場合は、指標の特定の値に基づいてフィルタを自動スケーリングに適用できます。フィルタが複数の値を返す場合、値は一緒に加算されます。最適な結果を得るためには、単一の値を返すような特定性の高いフィルタを作成します。

指標に対するオートスケーラーのフィルタリングは、Monitoring のフィルタ構文と互換性があります。フィルタは次の要件を満たす必要があります。

  • フィルタの値は二重引用符で囲む必要があります。
  • 直接等価比較演算子(=)を使用する必要があります。
  • 異なるフィルタ条件を結合するには、AND 演算子を使用する必要があります。

    例: --stackdriver-metric-filter="resource.type=\"pubsub_subscription\" AND resource.labels.subscription_id=\"our-subscription\""

  • 直接値を使用する必要があります。フィルタではワイルドカードや関数を使用できません。

    たとえば、resource.labels.zone = starts_with("us-") は使用できません。

  • モニタリング対象リソースに関するメタデータを格納するリソース メタデータ ラベルは使用できません。

フィルタできる指標ラベルとモニタリング対象リソースラベルの完全な参照情報については、指標リストモニタリング対象リソースのリストをご覧ください。

カスタム指標の要件

カスタム指標を使用するには、まず、モニタリング対象リソースタイプのいずれかに関連付けられたカスタム指標を作成する必要があります。

自動スケーリングに使用するカスタム指標には、次のプロパティを設定する必要があります。

  • 自動スケーリング構成がグループ内の各 VM のデータを使用する場合は、各 VM がカスタム指標をエクスポートするように MIG にインスタンスを構成します。各 VM からエクスポートされた値は、次のラベルを含む gce_instance モニタリング対象リソースに関連付ける必要があります。
    • zone。インスタンスが存在するゾーンの名前が設定されます。
    • instance_id。VM に割り当てられた固有の数値 ID が設定されます。
  • データのエクスポート間隔が 60 秒以内の指標であること。60 秒よりも短い間隔でデータをエクスポートすると、オートスケーラーがより迅速に負荷の変化に対応できます。60 秒よりも長い間隔でデータをエクスポートすると、オートスケーラーが負荷の変化に迅速に対応しきれない場合があります。
  • 指標が INT64 または DOUBLE の値のタイプのデータをエクスポートする必要があります。

カスタム指標の作成方法については、カスタム指標の使用をご覧ください。

次のステップ