Skalierung anhand von Cloud Monitoring-Messwerten

In diesem Dokument wird beschrieben, wie Sie eine verwaltete Instanzgruppe (managed instance group, MIG) anhand von Monitoringmesswerten skalieren.

Sie können eine MIG auch anhand ihrer CPU-Auslastung oder der Bereitstellungskapazität eines externen HTTP(S)-Load-Balancers skalieren.

Wenn Sie eine MIG basierend auf Monitoringmesswerten skalieren, können Sie auf der Grundlage der folgenden Messwerttypen skalieren:

  • Instanzmesswerte, bei denen der ausgewählte Messwert für jede VM-Instanz in einer MIG Daten zur Ressourcenauslastung bereitstellt.
  • Gruppenmesswerte (Beta), bei denen die Gruppe auf Basis eines Messwerts skaliert wird, der für die gesamte verwaltete Instanzgruppe gilt.

Die Messwerte können entweder Standardmesswerte sein, die vom Cloud Monitoring-Dienst bereitgestellt werden, oder benutzerdefinierte Cloud Monitoring-Messwerte, die Sie erstellen.

Beschränkungen

  • Autoscaling anhand von logbasierten Messwerten von Cloud Monitoring ist nicht möglich.

  • Regional verwaltete Instanzgruppen bieten keine Filterung von Instanzmesswerten.

  • Regional verwaltete Instanzgruppen bieten kein Autoscaling auf Basis von Gruppenmesswerten.

Vorbereitung

Instanzmesswerte

Instanzmesswerte stellen Daten für jede VM in einer MIG separat bereit und geben die Ressourcennutzung für jede Instanz an. Bei Verwendung von Instanzmesswerten kann die MIG nicht unter eine Größe von einer VM skalieren, da das Autoscaling Messwerte zu mindestens einer ausgeführten VM benötigt, um ausgeführt werden zu können.

Wenn Sie mit Cloud Monitoring-Messwerten skalieren müssen, die nicht für einzelne VMs spezifisch sind, oder Sie Ihre MIGs manchmal auf null VMs reduzieren müssen, können Sie die MIGs auch auf Basis von Gruppenmesswerten skalieren.

Standardmesswerte für einzelne Instanzen

Cloud Monitoring bietet eine Reihe von Standardmesswerten, mit denen Sie Ihre VMs überwachen können. Allerdings sind nicht alle davon gültige Auslastungsmesswerte, die das Autoscaling nutzen kann.

Ein gültiger Auslastungsmesswert für die Skalierung muss die folgenden Kriterien erfüllen:

  • Der Standardmesswert muss Daten für eine überwachte gce_instance-Ressource enthalten. Mit dem API-Aufruf timeSeries.list können Sie prüfen, ob ein bestimmter Messwert Daten für diese Ressource exportiert.

  • Der Standardmesswert beschreibt die Auslastung einer Instanz und der Messwert erhöht oder verringert sich im Verhältnis zur Anzahl der VMs in der Gruppe.

Der folgende Messwert ist ungültig, da sich der Wert nicht basierend auf der Auslastung ändert und das Autoscaling den Wert nicht für die proportionale Skalierung verwenden kann:

compute.googleapis.com/instance/cpu/reserved_cores

Nachdem Sie einen Standardmesswert ausgewählt haben, können Sie das Autoscaling auf Basis dieses Messwerts konfigurieren.

Benutzerdefinierte Messwerte

Sie können mit Cloud Monitoring benutzerdefinierte Messwerte erstellen und Ihre eigenen Monitoringdaten in den Monitoringdienst schreiben. So erhalten Sie parallel Zugriff auf gängige Google Cloud-Daten und Ihre eigenen Monitoringdaten mit einer bekannten Datenstruktur und einer einheitlichen Abfragesyntax. Wenn Sie einen benutzerdefinierten Messwert haben, können Sie auswählen, dass die Skalierung basierend auf den Daten dieses Messwerts erfolgt.

Voraussetzungen

Um benutzerdefinierte Messwerte zu verwenden, müssen Sie zuerst Folgendes tun:

  • Erstellen Sie einen benutzerdefinierten Messwert. Informationen zum Erstellen eines benutzerdefinierten Messwerts finden Sie unter Benutzerdefinierte Messwerte verwenden.
  • Richten Sie Ihre MIG so ein, dass der benutzerdefinierte Messwert von allen VMs in der Gruppe exportiert wird.

Gültigen benutzerdefinierten Messwert auswählen

Nicht alle benutzerdefinierten Messwerte können von Autoscaling verwendet werden. Ein gültiger benutzerdefinierter Messwert muss folgende Properties haben:

  • Er ist ein Instanzmesswert. Der Messwert muss Daten, die für jede spezifische Compute Engine-VM-Instanz relevant sind, separat exportieren.
  • Die exportierten Instanzwerte müssen einer überwachten gce_instance-Ressource zugeordnet sein, die die folgenden Labels enthält:
    • zone mit dem Namen der Zone, in der sich die Instanz befindet.
    • instance_id mit dem Wert der eindeutigen numerischen ID, die der VM zugeordnet ist.
  • Der Messwert muss mindestens alle 60 Sekunden Daten exportieren. Wenn Sie Daten häufiger als alle 60 Sekunden exportieren, kann das Autoscaling schneller auf Laständerungen reagieren. Wenn Sie Ihre Daten weniger häufig als alle 60 Sekunden exportieren, reagiert das Autoscaling möglicherweise nicht schnell genug auf Laständerungen.
  • Bei dem Messwert muss es sich um einen gültigen Auslastungsmesswert handeln. Daten des Messwerts müssen also verwendet werden können, um die Anzahl der VMs proportional nach oben oder nach unten zu skalieren.
  • Der Messwert muss int64- oder double-Datenwerte exportieren.

Damit das Autoscaling mit Ihrem benutzerdefinierten Messwert funktioniert, müssen Sie Daten für diesen benutzerdefinierten Messwert aus allen VMs in der MIG exportieren.

Hinweis: Sie können die numerische ID einer VM abrufen. Fordern Sie dazu in der VM das ID-Attribut des Metadatenservers an. Sie können hierfür beispielsweise die Programmiersprache Curl verwenden:
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
Weitere Informationen zur Verwendung des Metadatenservers finden Sie unter Instanzmetadaten speichern und abrufen.

Autoscaling auf Basis instanzspezifischer Monitoringmesswerte konfigurieren

Die Autoscaling-Einrichtung für Standardmesswerte und benutzerdefinierte Messwerte ist identisch. Sie müssen die Messwert-ID, den gewünschten Zielnutzungsgrad und den Nutzungszieltyp angeben, um ein Autoscaling zu erstellen, das Cloud Monitoring-Messwerte verwendet. Jedes dieser Attribute wird im Folgenden beschrieben:

  • Messwert-ID: Der Name des zu verwendenden Messwerts. Wenn Sie einen benutzerdefinierten Messwert verwenden, haben Sie diesen Namen beim Erstellen des Messwerts definiert. Die ID hat folgendes Format:

    custom.googleapis.com/path/to/metric
    

    Weitere Informationen zum Erstellen, Durchsuchen und Lesen von Messwerten finden Sie im Abschnitt Benutzerdefinierte Messwerte verwenden.

  • Zielnutzungsgrad: Der Nutzungsgrad, den das Autoscaling beibehalten soll. Dieser Wert muss eine positive Zahl sein. Sowohl 24.5 als auch 1100 sind beispielsweise gültige Werte. Dies ist anders als bei der CPU-Auslastung und der Auslastung beim Load-Balancing, wo es sich bei dem Wert um eine Gleitkommazahl zwischen 0,0 und 1,0 handeln muss.

  • Zieltyp: Der Zieltyp gibt an, wie das Autoscaling die von den Instanzen erfassten Daten verarbeitet. Mögliche Zieltypen:

    • GAUGE: Das Autoscaling vergleicht den durchschnittlichen Wert der in den letzten Minuten erfassten Daten mit dem Zielauslastungswert des Autoscalings.
    • DELTA_PER_MINUTE: Das Autoscaling berechnet die durchschnittliche Wachstumsrate pro Minute und vergleicht sie mit der Zielauslastung.
    • DELTA_PER_SECOND: Das Autoscaling berechnet die durchschnittliche Wachstumsrate pro Sekunde und vergleicht sie mit der Zielauslastung.

    Wenn Sie die Zielauslastung in Sekunden festgelegt haben, verwenden Sie für genaue Vergleiche DELTA_PER_SECOND als Autoscaling-Zieltyp. Gleichermaßen sollten Sie DELTA_PER_MINUTE für eine Zielauslastung in Minuten verwenden.

Console

Die Anweisungen zur Autoscaling-Konfiguration unterscheiden sich für regional MIGs bzw. MIGs in einer einzelnen Zonen. Regionale MIGs bieten keine Filterung von Instanzmesswerten.

So konfigurieren Sie Autoscaling für eine regionale MIG (mehrere Zonen):

  1. Rufen Sie in der Cloud Console die Seite Instanzgruppen auf.

    Zur Seite Instanzgruppen

  2. Wenn Sie keine verwaltete Instanzgruppe haben, erstellen Sie eine. Klicken Sie andernfalls in der Liste auf den Namen einer regionalen MIG, um die Seite mit den Instanzgruppendetails zu öffnen.
  3. Klicken Sie auf der Detailseite der Instanzgruppe auf Gruppe bearbeiten.
  4. Wählen Sie unter Autoscaling die Option Automatisch skalieren aus, um die Funktion zu aktivieren.
  5. Wählen Sie unter Messwerte für Autoscaling die Option Stackdriver-Monitoringmesswert aus.
  6. Wählen Sie unter Umfang des Messwertexports die Option Zeitachsen pro Instanz aus, um Autoscaling anhand von Gruppenmesswerten zu konfigurieren.
  7. Geben Sie unter Stackdriver Monitoringmesswert den Messwertnamen im folgenden Format ein: example.googleapis.com/path/to/metric.
  8. Geben Sie unter Ziel den Zielwert ein.
  9. Wählen Sie unter Zieltyp den zur Messgenauigkeit des Messwerts passenden Zieltyp aus.
  10. Speichern Sie alle Einstellungen.

So konfigurieren Sie Autoscaling für eine MIG in einer einzelnen Zone:

  1. Rufen Sie in der Cloud Console die Seite Instanzgruppen auf.

    Zur Seite Instanzgruppen

  2. Wenn Sie keine verwaltete Instanzgruppe haben, erstellen Sie eine. Klicken Sie andernfalls auf einen Namen in der Instanzgruppenliste, um die Seite mit den Details zu öffnen. Alle Instanzen in der Instanzgruppe müssen sich in einer einzigen Zone befinden.
  3. Klicken Sie auf der Detailseite der Instanzgruppe auf Gruppe bearbeiten.
  4. Wählen Sie unter Autoscaling die Option Automatisch skalieren aus, um die Funktion zu aktivieren.
  5. Wählen Sie unter Messwerte für Autoscaling die Option Stackdriver-Monitoringmesswert aus.
  6. Wählen Sie unter Umfang des Messwertexports die Option Zeitachsen pro Instanz aus, um Autoscaling auf der Basis von Instanzmesswerten zu konfigurieren.
  7. Geben Sie unter Messwert-ID den Namen des Messwerts im folgenden Format ein: example.googleapis.com/path/to/metric.
  8. Wählen Sie optional unter Zusätzlicher Filterausdruck einen Filter aus, wenn Sie einzelne Werte aus Messwerten mit mehreren Streams oder Labels herausfiltern möchten. Weitere Informationen finden Sie unter Instanzmesswerte filtern.
  9. Geben Sie unter Nutzungsziel den Zielwert ein.
  10. Prüfen Sie unter Nutzungszieltyp, dass der Zieltyp zum Messwerttyp passt.
  11. Speichern Sie alle Einstellungen.

gcloud

Im gcloud-Befehlszeilentool wird beispielsweise mit dem folgenden Befehl ein Autoscaling erstellt, das den Zieltyp GAUGE verwendet. Neben dem Parameter --custom-metric-utilization ist beim Erstellen eines Autoscalings auch der Parameter --max-num-replicas erforderlich:

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

Optional können Sie das Flag --cool-down-period verwenden, das dem Autoscaling mitteilt, wie viele Sekunden nach dem Start einer neuen VM gewartet werden soll, bevor das Autoscaling mit dem Erfassen von Nutzungsinformationen beginnt. Dadurch wird die möglicherweise zur Initialisierung der VM erforderliche Zeit berücksichtigt, während der die gesammelten Auslastungsdaten für das Autoscaling nicht verlässlich sind. Die Standard-Cool-down-Zeit beträgt 60 Sekunden.

Eine vollständige Liste der verfügbaren Befehle und Flags für das gcloud-Tool finden Sie in der gcloud-Referenz.

API

Hinweis: Auch wenn das Autoscaling eine Funktion verwalteter Instanzgruppen ist, handelt es sich doch um eine separate API-Ressource. Beachten Sie dies, wenn Sie API-Anfragen für das Autoscaling erstellen.

Senden Sie in der API eine POST-Anfrage an die folgende URL, wobei myproject durch Ihre eigene Projekt-ID und us-central1-f durch die Zone Ihrer Wahl ersetzt wird:

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

Der Text Ihrer Anfrage muss die Felder name, target und autoscalingPolicy enthalten. Geben Sie in autoscalingPolicy die Attribute maxNumReplicas und customMetricUtilizations an.

Optional können Sie den Parameter coolDownPeriodSec verwenden, der dem Autoscaling mitteilt, wie viele Sekunden nach dem Start einer neuen VM gewartet werden muss, bevor Nutzungsdaten erfasst werden. Nach Ablauf der Wartezeit beginnt das Autoscaling, Nutzungsinformationen von der neuen VM zu erfassen und bestimmt, ob die MIG zusätzliche VMs benötigt. Dies berücksichtigt die Zeit, die für die Initialisierung der VM benötigt wird, während der die erfassten Nutzungsdaten für das Autoscaling nicht zuverlässig sind. Die Standard-Cool-down-Zeit beträgt 60 Sekunden.

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"
   }
  ]
 }
}

Instanzmesswerte filtern (Beta)

Sie können Filter auf Cloud Monitoring-Instanzmesswerte anwenden. So können Sie MIGs für einzelne Zonen anhand einzelner Werte aus Messwerten mit mehreren Streams oder Labels skalieren.

Voraussetzungen für das Filtern von Instanzmesswerten

Die Autoscaling-Filterung ist mit einigen Einschränkungen mit der Filtersyntax von Cloud Monitoring kompatibel. Für das Filtern von Instanzmesswerten gelten folgende Voraussetzungen:

  • Selektoren können nur mit dem Operator AND verknüpft werden.
  • Es kann lediglich der direkte Gleichheitsvergleichsoperator = verwendet werden, aber nur ohne Funktionen. Sie können beispielsweise nicht die Funktion startswith() mit dem Vergleichsoperator = verwenden.
  • Sie müssen den Wert eines Filters in doppelte Anführungszeichen setzen, z. B. metric.labels.state = "used".
  • Sie können keine Platzhalter verwenden.
  • Die Selektoren resource.type oder resource.label.* dürfen nicht festgelegt werden. Bei Instanzmesswerten werden immer alle Instanzressourcen aus der Gruppe verwendet.
  • Die besten Ergebnisse erzielen Sie, wenn Sie einen Filter erstellen, der spezifisch genug ist, um für jede Instanz eine einzelne Zeitachse zurückzugeben. Gibt der Filter mehrere Zeitachsen zurück, werden sie addiert.

Autoscaling für das Filtern von Messwerten konfigurieren

Verwenden Sie die Google Cloud Console, das gcloud-Befehlszeilentool (Beta) oder die Compute Engine Beta API zum Hinzufügen von Messwertfiltern für das Autoscaling einer MIG in einer einzelnen Zone.

Console

Das Erstellen eines Autoscalings, das einen Instanzmesswert filtert, verläuft fast analog zum Erstellen eines normalen instanzspezifischen Autoscalings. Sie geben lediglich noch einen Messwertfilter an. Der Messwert compute.googleapis.com/instance/network/received_bytes_count enthält beispielsweise die Labels instance_name und loadbalanced. So filtern Sie nach dem booleschen Wert loadbalanced:

  1. Rufen Sie in der Cloud Console die Seite Instanzgruppen auf.

    Zur Seite Instanzgruppen

  2. Wenn Sie keine MIG haben, erstellen Sie eine. Klicken Sie andernfalls auf den Namen einer MIG in einer einzelnen Zone, um die Detailseite der Instanzgruppe zu öffnen.
  3. Klicken Sie auf der Detailseite der Instanzgruppe auf Gruppe bearbeiten.
  4. Wählen Sie unter Autoscaling die Option Automatisch skalieren aus, um die Funktion zu aktivieren.
  5. Wählen Sie unter Automatisch skalieren auf der Grundlage von die Option Stackdriver-Monitoringmesswert aus.
  6. Wählen Sie unter Umfang des Messwertexports die Option Zeitachsen pro Instanz aus, um Autoscaling auf der Basis von Instanzmesswerten zu konfigurieren.
  7. Geben Sie unter Messwert-ID den Namen des Messwerts ein. Beispiel: compute.googleapis.com/instance/network/received_bytes_count.
  8. Geben Sie unter Zusätzlicher Filterausdruck einen Filter ein. Beispiel: 'metric.labels.loadbalanced = true'.
  9. Speichern Sie alle Einstellungen.

gcloud

Das Erstellen eines Autoscalings, das einen Instanzmesswert filtert, verläuft fast analog zum Erstellen eines normalen instanzspezifischen Autoscalings. Sie geben lediglich noch einen Messwertfilter und Flags für das Nutzungsziel und den Zieltyp an. Der Messwert compute.googleapis.com/instance/network/received_bytes_count enthält beispielsweise die Labels instance_name und loadbalanced. Um nach dem booleschen Wert loadbalanced zu filtern, geben Sie das Filter-Flag --stackdriver-metric-filter mit dem Wert 'metric.labels.loadbalanced = true' an. Die Flags für das Nutzungsziel und den Zieltyp geben Sie einzeln an.

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.labels.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

In diesem Beispiel wird das Autoscaling so konfiguriert, dass nur die loadbalanced-Traffic-Daten für das Auslastungsziel berücksichtigt werden.

Eine Liste der verfügbaren gcloud-Befehle und Flags finden Sie in der Referenz zum gcloud-Tool (Beta).

API

Hinweis: Auch wenn das Autoscaling eine Funktion verwalteter Instanzgruppen ist, handelt es sich doch um eine separate API-Ressource. Beachten Sie dies, wenn Sie API-Anfragen für das Autoscaling erstellen.

Das Erstellen eines Autoscalings, das einen Instanzmesswert filtert, verläuft fast analog zum Erstellen eines normalen instanzspezifischen Autoscalings. Sie geben lediglich noch einen Messwertfilter und Flags für das Nutzungsziel und den Zieltyp an. Der Messwert compute.googleapis.com/instance/network/received_bytes_count enthält beispielsweise die Labels instance_name und loadbalanced. Um nach dem booleschen Wert loadbalanced zu filtern, geben Sie den Parameter filter mit dem Wert "metric.labels.loadbalanced = true" an.

Senden Sie in der API eine POST-Anfrage an die folgende URL, wobei myproject durch Ihre eigene Projekt-ID und us-central1-f durch die Zone Ihrer Wahl ersetzt wird. Der Anfragetext muss die Felder name, target und autoscalingPolicy enthalten. Geben Sie in autoscalingPolicy die Attribute maxNumReplicas und customMetricUtilizations an.

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.labels.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

In diesem Beispiel wird das Autoscaling so konfiguriert, dass nur die loadbalanced-Traffic-Daten für das Auslastungsziel berücksichtigt werden.

Gruppenmesswerte (Beta)

Gruppenmesswerte ermöglichen Autoscaling auf Basis eines Standard- oder benutzerdefinierten Messwerts, der keine instanzspezifischen Auslastungsdaten exportiert. Stattdessen wird die Gruppe basierend auf einem Wert skaliert, der für die gesamte Gruppe gilt und angibt, wie viel Arbeit für die Gruppe verfügbar und wie hoch die Auslastung der Gruppe ist. Die Gruppe wird basierend auf der Fluktuation dieses Gruppenmesswerts und der von Ihnen definierten Konfiguration skaliert.

Wenn Sie Gruppenmesswerte für das Autoscaling verwenden, müssen Sie festlegen, wie das Autoscaling Instanzen relativ zum Messwert bereitstellen soll:

  • Instanzzuweisung: Mit einer Instanzzuweisung geben Sie an, dass das Autoscaling VMs abhängig davon einfügen oder entfernen soll, wie viel Arbeit für jede VM verfügbar ist. Mit dem Wert für diesen Parameter geben Sie an, wie viel Arbeit jede VM übernehmen soll. Der Wert 2 bedeutet zum Beispiel, dass jeder VM zwei Arbeitseinheiten zugewiesen werden. Bei 0.5 wird jeder VM nur eine halbe Arbeitseinheit zugewiesen. Das Autoscaling skaliert die MIG, um sicherzugehen, dass genügend VMs vorhanden sind, um die verfügbare Arbeit, wie im Messwert angegeben, zu erledigen. Lautet der Messwert 10 und Sie haben jeder VM 0.5 Arbeitseinheiten zugewiesen, erstellt Autoscaling 20 VMs in der MIG. Durch die Skalierung mit Instanzzuweisung kann die Gruppe auf 0 VMs verkleinert werden, wenn der Messwert auf 0 fällt, und wieder hochskaliert werden, wenn der Wert über 0 ansteigt. Das folgende Diagramm zeigt die proportionale Beziehung zwischen dem Messwert und der Anzahl der VMs bei der Skalierung mit einer Instanzzuweisungsrichtlinie. Die proportionale Beziehung zwischen dem Messwert und der Anzahl der Instanzen.
  • Nutzungsziel: Geben Sie ein Nutzungsziel an, wenn Sie möchten, dass Autoscaling einen Messwert durch Hinzufügen oder Entfernen von VMs auf einem bestimmten Wert hält. Liegt der Messwert über dem angegebenen Ziel, fügt Autoscaling schrittweise VMs hinzu, bis der Messwert auf den Zielwert absinkt. Liegt der Messwert unter dem angegebenen Ziel, entfernt Autoscaling schrittweise VMs, bis der Messwert auf den Zielwert ansteigt. Bei der Skalierung mit einem Nutzungsziel kann die Gruppe nicht auf 0 VMs verkleinert werden. Das folgende Diagramm zeigt, wie das Autoscaling VMs als Reaktion auf einen Messwert hinzufügt und entfernt, um das Nutzungsziel aufrechtzuerhalten. Autoscaling behält durch Hinzufügen und Entfernen von VMs eine bestimmte Zielauslastung bei.

Die Anwendungsfälle der jeweiligen Option:

  • Instanzzuweisung: Die Größe der MIGs basierend auf der Anzahl unbestätigter Nachrichten in einem Pub/Sub-Abo oder dem QPS-Gesamtwert (Abfragen pro Sekunde) eines Netzwerkendpunkts skalieren.
  • Nutzungsziel: Die Größe der MIG wird basierend auf einem Nutzungsziel für einen benutzerdefinierten Messwert skaliert, bei dem es sich nicht um einen instanzspezifischen Standardmesswert zur CPU- oder Speicherauslastung handelt. Sie können die Gruppe beispielsweise basierend auf einem benutzerdefinierten Latenzmesswert skalieren.

Wenn Sie Autoscaling mit Gruppenmesswerten konfigurieren und eine Instanzzuweisung angeben, kann Ihre MIG auf 0 VMs skalieren. Wenn Ihr Messwert angibt, dass Ihre Gruppe nichts zu verarbeiten hat, wird die Gruppe auf 0 VMs skaliert, bis anhand des Messwerts erkennbar wird, dass neue Arbeit verfügbar ist. Im Gegensatz zur Skalierung basierend auf Gruppenmesswerten werden für das instanzbasierte Autoscaling von mindestens einer VM Messwerte zur Ressourcenauslastung benötigt, weshalb die Gruppe nicht unter eine Größe von 1 skaliert werden kann.

Gruppenmesswerte filtern

Sie können Filter auf Cloud Monitoring-Gruppenmesswerte anwenden, um MIGs anhand individueller Werte aus Messwerten mit mehreren Streams oder Labels zu skalieren.

Voraussetzungen für das Filtern von Gruppenmesswerten

Die Autoscaling-Filterung ist mit einigen Einschränkungen mit der Filtersyntax von Cloud Monitoring kompatibel. Für das Filtern von Gruppenmesswerten gelten folgende Voraussetzungen:

  • Selektoren können nur mit dem Operator AND verknüpft werden.
  • Sie können den direkten Gleichheitsvergleichsoperator = nicht mit Funktionen für jeden Selektor verwenden. Sie können beispielsweise nicht die Funktion startswith() mit dem Vergleichsoperator = verwenden.
  • Sie können keine Platzhalter verwenden.
  • Sie müssen den Wert eines Filters in doppelte Anführungszeichen setzen, z. B. metric.labels.state = "used".
  • Sie können im Filter den Messwerttyp-Selektor metric.type = "..." angeben und auch das ursprüngliche metric-Feld einschließen. Optional können Sie nur das Feld metric verwenden. Der Messwert muss folgende Voraussetzungen erfüllen:
    • Der Messwert muss an mindestens einer Stelle angegeben werden.
    • Der Messwert kann an beiden Stellen angegeben werden, muss aber gleich sein.
  • Sie müssen den resource.type-Selektor festlegen. Sie können ihn jedoch nicht auf gce_instance festlegen, wenn Sie für die Skalierung Gruppenmesswerte verwenden möchten.
  • Für ein optimales Ergebnis sollte der Filter so spezifisch sein, dass für jede Gruppe eine einzelne Zeitachse zurückgegeben wird. Gibt der Filter mehrere Zeitachsen zurück, werden sie addiert.

Autoscaling für gruppenbasierte Monitoringmesswerte konfigurieren

Verwenden Sie die Google Cloud Console, das gcloud-Befehlszeilentool (Beta) oder die Compute Engine API (Beta) zum Konfigurieren des Autoscalings mit Gruppenmesswerten für eine MIG in einer einzelnen Zone.

Console

  1. Rufen Sie in der Cloud Console die Seite Instanzgruppen auf.

    Zur Seite Instanzgruppen

  2. Wenn Sie keine verwaltete Instanzgruppe haben, erstellen Sie eine. Klicken Sie andernfalls auf den Namen einer MIG in einer einzelnen Zone, um die Detailseite der Instanzgruppe zu öffnen.
  3. Klicken Sie auf der Detailseite der Instanzgruppe auf Gruppe bearbeiten.
  4. Wählen Sie unter Autoscaling die Option Automatisch skalieren aus, um die Funktion zu aktivieren.
  5. Wählen Sie unter Automatisch skalieren auf der Grundlage von die Option Stackdriver-Monitoringmesswert aus.
  6. Wählen Sie unter Umfang des Messwertexports die Option Einzelne Zeitachse pro Gruppe aus.
  7. Geben Sie unter Messwert-ID den Namen des Messwerts im folgenden Format an: example.googleapis.com/path/to/metric.
  8. Geben Sie den Messwertressourcentyp an.
  9. Geben Sie einen zusätzlichen Filterausdruck an, um einzelne Werte aus Messwerten mit mehreren Streams oder Labels zu verwenden. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.
  10. Wählen Sie unter Skalierungsrichtlinie entweder Instanzzuweisung oder Nutzungsziel aus.
    • Wenn Sie eine Instanzzuweisungsrichtlinie auswählen, geben Sie mit einem Wert für Zuweisung einzelner Instanzen an, wie viel Arbeit den VM-Instanzen in der MIG zugewiesen wird. Der Wert 2 bedeutet zum Beispiel, dass jeder VM zwei Arbeitseinheiten zugewiesen werden. Autoscaling hält genügend VMs bereit, um die (laut Messwert) verfügbare Arbeit zu erledigen. Lautet der Messwert 10 und Sie haben jeder VM 2 Arbeitseinheiten zugewiesen, erstellt Autoscaling 5 VMs in der MIG.
    • Wenn Sie eine Nutzungszielrichtlinie auswählen:
      • Geben Sie einen Wert für das Nutzungsziel an, das für den Messwert steht, den Autoscaling versuchen wird einzuhalten.
      • Wählen Sie den Nutzungszieltyp aus, der dem Messwerttyp entspricht.
  11. Speichern Sie alle Einstellungen.

gcloud

Das Erstellen eines Autoscalings für eine MIG verläuft fast analog zum Erstellen eines instanzbasierten Autoscalings. Sie müssen lediglich noch das Flag --update-stackdriver-metric angeben. Mit den folgenden Flags können Sie festlegen, wie Autoscaling Instanzen bereitstellt:

  • Instanzzuweisung: Geben Sie das Flag --stackdriver-metric-single-instance-assignment an.
  • Nutzungsziel: Geben Sie das Flag --stackdriver-metric-utilization-target an.

Instanzzuweisung:

Geben Sie einen Messwert an, den Sie messen möchten, und geben Sie das Flag --stackdriver-metric-single-instance-assignment an, um festzulegen, wie viel Arbeit jede Instanz übernehmen soll. Außerdem müssen Sie mit dem Flag --stackdriver-metric-filter einen Filter für den Messwert angeben.

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

Ersetzen Sie Folgendes:

  • group-name: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • zone: Die Zone, in der sich die MIG befindet. Für Autoscaling mit Gruppenmesswerten kann keine Region angegeben werden.
  • max-instances: Das Limit für die Anzahl der VMs, die das Autoscaling der MIG hinzufügen kann.
  • min-instances: Das Limit für die Mindestanzahl von VMs, die das Autoscaling in der MIG haben kann.
  • metric-url: Eine protokollfreie URL eines Monitoring-Messwerts.
  • metric-filter: Ein Cloud Monitoring-Filter, in dem Sie einen Monitoring-Filter mit einer relevanten TimeSeries und einer MonitoredResource angeben. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.
  • instance-assignment: Die Menge an Arbeit, die jeder Instanz in der MIG zugewiesen wird. Der Wert 2 bedeutet zum Beispiel, dass jeder VM zwei Arbeitseinheiten zugewiesen werden. Bei 0.5 wird jeder VM nur eine halbe Arbeitseinheit zugewiesen. Das Autoscaling skaliert die MIG, damit genügend VMs vorhanden sind, um die verfügbare Arbeit abzuschließen. Dies wird durch den Messwert angegeben. Wenn der Messwert 10 ist und Sie jeder VM 0.5 Arbeitseinheiten zugewiesen haben, stellt das Autoscaling 20 VMs in der MIG bereit.

Nutzungsziel:

Manchmal ist es sinnvoller, Nutzungsziele und Gruppenmesswerte zu kombinieren, anstatt eine Anzahl von VMs relativ zum Wert des von Ihrem Autoscaling gemessenen Messwerts anzugeben. Sie können auch einen Gruppenmesswert für das Autoscaling verwenden, jedoch wird weiterhin versucht, das Nutzungsziel zu erreichen. Geben Sie Ziel und Zieltyp mit dem Flag --stackdriver-metric-utilization-target an. Außerdem müssen Sie mit dem Flag --stackdriver-metric-filter einen Filter für den Messwert angeben.

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

Ersetzen Sie Folgendes:

  • group-name: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • zone: Die Zone, in der sich die MIG befindet. Für Autoscaling mit Gruppenmesswerten kann keine Region angegeben werden.
  • max-instances: Das Limit für die Anzahl der VMs, die das Autoscaling der MIG hinzufügen kann.
  • min-instances: Das Limit für die Mindestanzahl von VMs, die das Autoscaling in der MIG haben kann.
  • metric-url: Eine protokollfreie URL eines Monitoring-Messwerts.
  • metric-filter: Ein Cloud Monitoring-Filter, in dem Sie einen Monitoring-Filter mit einer relevanten TimeSeries und einer MonitoredResource angeben. Sie müssen einen resource.type-Wert angeben. Sie können allerdings nicht gce_instance angeben, wenn Sie anhand von Gruppenmesswerten skalieren möchten. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.
  • target-value: Der Messwert, den Autoscaling aufrechtzuerhalten versucht.
  • target-type: Der Werttyp des Messwerts. Sie können das Autoscaling den Messwert als GAUGE, nach delta-per-minute des Werts oder nach delta-per-second des Werts beobachten lassen.

Eine Liste der verfügbaren Befehle und Flags für das Autoscaling im gcloud-Befehlszeilentool, die mit dem gruppenbasierten Autoscaling verwendet werden können, finden Sie in der Referenz zum gcloud-Befehlszeilentool (Beta).

API

Hinweis: Auch wenn das Autoscaling eine Funktion verwalteter Instanzgruppen ist, handelt es sich bei [autoscalers](/compute/docs/reference/beta/autoscalers) um eine separate API-Ressource. Beachten Sie dies, wenn Sie API-Anfragen für das Autoscaling erstellen.

Erstellen Sie ein Autoscaling für eine MIG. Mit den folgenden Parametern bestimmen Sie, wie das Autoscaling Instanzen bereitstellen soll:

  • Instanzzuweisung: Geben Sie den Parameter singleInstanceAssignment an.
  • Nutzungsziel: Geben Sie den Parameter utilizationTarget an.

Instanzzuweisung:

In der API verwenden Sie eine POST-Anfrage, um ein Autoscaling zu erstellen. Geben Sie im Anfragetext die regulären Parameter an, die Sie auch zum Erstellen eines instanzbasierten Autoscalings verwenden würden, und ergänzen Sie diese noch um den Parameter single-instance-assignment. Der Parameter single-instance-assignment gibt an, wie viel Arbeit eine einzelne VM übernehmen soll.

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>
    }
  ],
 }
}

Dabei gilt:

  • project-id: Ihre Projekt-ID.
  • group-name: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • zone: Die Zone, in der sich die MIG befindet. Für Autoscaling mit Gruppenmesswerten kann keine Region angegeben werden.
  • max-instances: Das Limit für die Anzahl der VMs, die das Autoscaling der MIG hinzufügen kann.
  • min-instances: Das Limit für die Mindestanzahl von VMs, die das Autoscaling in der MIG haben kann.
  • metric-url: Eine protokollfreie URL eines Monitoring-Messwerts.
  • metric-filter: Ein Cloud Monitoring-Filter, in dem Sie einen Monitoring-Filter mit einer relevanten TimeSeries und einer MonitoredResource angeben. Sie müssen einen resource.type-Wert angeben. Sie können allerdings nicht gce_instance angeben, wenn Sie anhand von Gruppenmesswerten skalieren möchten. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.
  • instance-assignment: Die Menge an Arbeit, die jeder Instanz in der MIG zugewiesen wird. Der Wert 2 bedeutet zum Beispiel, dass jeder VM zwei Arbeitseinheiten zugewiesen werden. Bei 0.5 wird jeder VM nur eine halbe Arbeitseinheit zugewiesen. Das Autoscaling skaliert die MIG, damit genügend VMs vorhanden sind, um die verfügbare Arbeit abzuschließen. Dies wird durch den Messwert angegeben. Wenn der Messwert 10 ist und Sie jeder VM 0.5 Arbeitseinheiten zugewiesen haben, stellt das Autoscaling 20 VMs in der MIG bereit.

Nutzungsziel:

Manchmal ist es sinnvoller, Nutzungsziele und Gruppenmesswerte zu kombinieren, anstatt eine Anzahl von VMs relativ zum Wert des von Ihrem Autoscaling gemessenen Messwerts anzugeben. Sie können auch einen Gruppenmesswert für das Autoscaling verwenden, jedoch wird weiterhin versucht, das Nutzungsziel zu erreichen. Diese Ziele werden mit dem Parameter utilizationTarget angegeben. Außerdem müssen Sie mit dem Parameter filter einen Filter für den Messwert angeben.

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
        }
      ],
     }
    }

Dabei gilt:

  • project-id: Ihre Projekt-ID.
  • group-name: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • zone: Die Zone, in der sich die MIG befindet. Für Autoscaling mit Gruppenmesswerten kann keine Region angegeben werden.
  • max-instances: Das Limit für die Anzahl der VMs, die das Autoscaling der MIG hinzufügen kann.
  • min-instances: Das Limit für die Mindestanzahl von VMs, die das Autoscaling in der MIG haben kann.
  • metric-url: Eine protokollfreie URL eines Monitoring-Messwerts.
  • metric-filter: Ein Cloud Monitoring-Filter, in dem Sie einen Monitoring-Filter mit einer relevanten TimeSeries und einer MonitoredResource angeben. Sie müssen einen resource.type-Wert angeben. Sie können allerdings nicht gce_instance angeben, wenn Sie anhand von Gruppenmesswerten skalieren möchten. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.
  • target-value: Der Messwert, den Autoscaling aufrechtzuerhalten versucht.
  • target-type: Der Werttyp des Messwerts. Sie können das Autoscaling den Messwert als GAUGE, nach DELTA_PER_MINUTE des Werts oder nach DELTA_PER_SECOND des Werts überwachen lassen.

Beispiel: Mithilfe einer Instanzzuweisung auf Basis einer Pub/Sub-Warteschlange skalieren

Ausgangssituation:

  • Ein aktives Pub/Sub-Thema empfängt Nachrichten von einer bestimmten Quelle.
  • Ein aktives Pub/Sub-Abo ist in einer Pull-Konfiguration mit dem Thema verbunden. Das Abo heißt our-subscription.
  • Ein Pool von Workern bezieht Nachrichten über das Abo und verarbeitet sie. Der Pool ist eine MIG mit nur einer Zone namens our-instance-group und befindet sich in der Zone us-central1-a. Der Pool darf 100 Worker nicht überschreiten und soll auf 0 Worker verkleinert werden, wenn sich keine Nachrichten in der Warteschlange befinden.
  • Im Schnitt verarbeitet ein Worker eine Nachricht pro Minute.

Betrachten wir verschiedene Ansätze, um den optimalen Wert für die Instanzzuweisung zu bestimmen:

  • Sie können 1 als Instanzzuweisungswert wählen, um alle Nachrichten in der Warteschlange so schnell wie möglich zu verarbeiten. Dies erstellt für jede Nachricht in der Warteschlange eine VM-Instanz (begrenzt auf die maximale Anzahl von VMs in der Gruppe). Dies kann jedoch zu einer Überdimensionierung führen. Im schlimmsten Fall wird eine VM erstellt, um genau eine Nachricht zu verarbeiten, bevor sie durch Autoscaling wieder beendet wird. Dadurch werden Ressourcen wesentlich länger belegt als für die eigentliche Arbeit nötig.
    • Wenn die Worker mehrere Nachrichten gleichzeitig verarbeiten können, ist es sinnvoll, den Wert auf die Anzahl gleichzeitiger Prozesse zu erhöhen.
    • Beachten Sie, dass in diesem Beispiel ein Wert unter 1 nicht sinnvoll ist, da eine Nachricht nicht von mehr als einem Worker verarbeitet werden kann.
  • Wenn es weniger auf die Verarbeitungslatenz als auf die Ressourcenauslastung und die Gesamtkosten ankommt, können Sie alternativ berechnen, wie viele Nachrichten jede VM innerhalb ihrer Lebensdauer verarbeiten muss, um effizient genutzt zu werden. Berücksichtigen Sie die Zeit für das Starten und Herunterfahren sowie die Tatsache, dass Autoscaling VMs nicht sofort löscht. Davon ausgehend, dass für das Starten und Herunterfahren etwa 5 Minuten benötigt werden und das Autoscaling VMs erst nach etwa 10 Minuten löscht, berechnen Sie, dass es effizient ist, eine zusätzliche VM in der Gruppe zu erstellen, solange sie mindestens 15 Nachrichten verarbeiten kann, bevor sie vom Autoscaling wieder beendet wird. Dies führt zu einem Leistungsaufwand von maximal 25 % aufgrund der Zeit, die für das Erstellen, Starten und Herunterfahren der VM aufgewendet werden muss. In diesem Fall können Sie die Instanzzuweisung auf 15 setzen.
  • Beide Ansätze lassen sich ausgleichen, sodass sich ein Wert zwischen 1 und 15 einpendelt, je nachdem, welcher Faktor Priorität hat – die Verarbeitungslatenz oder die Ressourcenauslastung.

Unter den verfügbaren Pub/Sub-Messwerten gibt es einen Messwert, der die Länge der Abo-Warteschlange darstellt: subscription/num_undelivered_messages.

Beachten Sie, dass dieser Messwert die Gesamtzahl der Nachrichten in der Warteschlange exportiert, einschließlich Nachrichten, die gerade verarbeitet werden, aber noch nicht bestätigt wurden. Verwenden Sie keinen Messwert, der die zu verarbeitenden Nachrichten nicht enthält. Er könnte auf 0 fallen, obwohl noch Arbeit zu erledigen ist, wodurch das Autoscaling veranlasst wird, herunter zu skalieren und die eigentliche Arbeit unterbrochen wird.

Sie können jetzt Autoscaling für die Warteschlange konfigurieren:

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

Beispiel: Mithilfe eines Nutzungsziels basierend auf der durchschnittlichen Latenz skalieren

Es kann Situationen geben, in denen der Messwert, der ein bestimmtes Signal liefert, nicht die insgesamt verfügbare Menge an Arbeit bzw. eine andere relevante Ressource darstellt, wie im vorherigen Beispiel, und stattdessen einen Durchschnitt, ein Perzentil oder ein anderes statistisches Attribut repräsentiert. Im folgenden Beispiel wird davon ausgegangen, dass die Skalierung auf Basis der durchschnittlichen Verarbeitungslatenz der Gruppe erfolgt.

Ausgangssituation:

  • Eine MIG mit dem Namen our-instance-group wird für eine bestimmte Aufgabe zugewiesen. Die Gruppe befindet sich in der Zone us-central1-a.
  • Sie haben einen benutzerdefinierten Cloud Monitoring-Messwert, der einen Wert exportiert, der auf einem bestimmten Level gehalten werden soll. In diesem Beispiel wird davon ausgegangen, dass der Messwert die durchschnittliche Latenz von Verarbeitungsabfragen darstellt, die der Gruppe zugewiesen sind.
    • Der benutzerdefinierte Messwert heißt custom.googleapis.com/example_average_latency.
    • Der benutzerdefinierte Messwert hat ein Label mit einem Schlüssel namens group_name und einem Wert, der dem Namen der MIG, our-instance-group, entspricht.
    • Der benutzerdefinierte Messwert exportiert Daten für die globale überwachte Ressource, d. h., sie ist keiner bestimmten VM zugeordnet.

Sie haben festgestellt, dass Sie, wenn der Messwert über einen bestimmten Wert hinausgeht, der Gruppe weitere VMs hinzufügen müssen, um die Auslastung zu bewältigen. Wenn er hingegen sinkt, können Sie einige Ressourcen freigeben. Beim Autoscaling werden VMs in einem Verhältnis hinzugefügt oder entfernt, das proportional zur Differenz des Messwerts zum Zielwert ist. Für dieses Beispiel ist der berechnete Zielwert 100.

Sie können das Autoscaling jetzt für die Gruppe auf Basis eines Gruppennutzungsziels von 100 konfigurieren. Dies ist der Messwert, den Autoscaling versuchen muss aufrechtzuerhalten:

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.labels.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second