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

Die Skalierung anhand von Cloud Monitoring-Messwerten unterliegt den Beschränkungen für alle Autoscalings und folgenden Einschränkungen:

  • Autoscaling anhand von logbasierten Messwerten von Cloud Monitoring ist nicht möglich.
  • Sie können Ressourcenmetadatenlabels nicht verwenden, um Messwerte für das Autoscaling zu filtern. Sie können dafür nur die Labels verwenden, die für die Messwert- und überwachten Ressourcentypen definiert sind.

Hinweis

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.

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, Suchen 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

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

    Zu den Instanzgruppen

  2. Wenn Sie keine verwaltete Instanzgruppe haben, erstellen Sie eine. Klicken Sie andernfalls auf den Namen einer MIG in der Liste, um die Übersichtsseite der Instanzgruppe zu öffnen.

  3. Klicken Sie auf der Übersichtsseite der Instanzgruppe auf Bearbeiten.

  4. Wenn keine Autoscaling-Konfiguration vorhanden ist, klicken Sie unter Autoscaling auf Autoscaling konfigurieren.

  5. Wählen Sie unter Autoscaling-Modus die Option Ein: Der Gruppe Instanzen hinzufügen und daraus entfernen aus, um Autoscaling zu aktivieren.

  6. Ist ein Messwert vorhanden, klicken Sie im Abschnitt Messwerte für Autoscaling darauf, um ihn zu bearbeiten. Mit Messwert hinzufügen können Sie einen weiteren Messwert hinzufügen.

  7. Legen Sie als Messwerttyp den Cloud Monitoring-Messwert fest.

  8. Wählen Sie unter Umfang des Messwertexports die Option Zeitachsen pro Instanz aus, um Autoscaling auf der Basis von Instanzmesswerten zu konfigurieren.

  9. Geben Sie unter Messwert-ID den Namen des Messwerts im folgenden Format ein: example.googleapis.com/path/to/metric.

  10. Im Abschnitt Zusätzlicher Filterausdruck:

    • Geben Sie für eine zonale MIG optional einen Filter ein, um einzelne Messwerte mit mehreren Streams oder Labels zu verwenden. Weitere Informationen finden Sie unter Instanzmesswerte filtern.
    • Für eine regionale MIG lassen Sie diesen Abschnitt leer.
  11. Geben Sie unter Nutzungsziel den Zielwert ein.

  12. Prüfen Sie unter Nutzungszieltyp, dass der Zieltyp zum Messwerttyp passt.

  13. Speichern Sie alle Einstellungen.

gcloud

In der Google Cloud CLI 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

Mit dem Flag --cool-down-period können Sie für das Autoscaling angeben, wie lange die Initialisierung Ihrer Anwendung dauert. Wenn Sie eine genaue Wartezeit festlegen, verbessern Sie die Autoscaling-Entscheidungen. Beim horizontalen Skalieren ignoriert beispielsweise das Autoscaling Daten von VMs, die noch initialisiert werden, da diese VMs möglicherweise noch nicht die normale Nutzung Ihrer Anwendung darstellen. Die Standard-Wartezeit beträgt 60 Sekunden.

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

API

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.

Mit dem Feld coolDownPeriodSec können Sie für das Autoscaling angeben, wie lange die Initialisierung Ihrer Anwendung dauert. Wenn Sie eine genaue Wartezeit festlegen, verbessern Sie die Autoscaling-Entscheidungen. Beim horizontalen Skalieren ignoriert beispielsweise das Autoscaling Daten von VMs, die noch initialisiert werden, da diese VMs möglicherweise noch nicht die normale Nutzung Ihrer Anwendung darstellen. Die Standard-Wartezeit 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

Sie können Filter auf Cloud Monitoring-Instanzmesswerte anwenden. So können Sie MIGs 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.labels.* 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, die Google Cloud CLI oder die Compute Engine API, um Messwertfilter für das Autoscaling einer MIG hinzuzufügen.

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.

    Zu den Instanzgruppen

  2. Wenn Sie keine MIG haben, erstellen Sie eine. Klicken Sie andernfalls auf den Namen einer MIG, um die Übersichtsseite der Instanzgruppe zu öffnen.

  3. Klicken Sie auf der Übersichtsseite der Instanzgruppe auf Bearbeiten.

  4. Wenn keine Autoscaling-Konfiguration vorhanden ist, klicken Sie unter Autoscaling auf Autoscaling konfigurieren.

  5. Wählen Sie unter Autoscaling-Modus die Option Ein: Der Gruppe Instanzen hinzufügen und daraus entfernen aus, um Autoscaling zu aktivieren.

  6. Ist ein Messwert vorhanden, klicken Sie im Abschnitt Messwerte für Autoscaling darauf, um ihn zu bearbeiten. Mit Messwert hinzufügen können Sie einen weiteren Messwert hinzufügen.

  7. Wählen Sie unter Messwerttyp die Option Cloud Monitoringmesswert aus.

  8. Wählen Sie unter Umfang des Messwertexports die Option Zeitachsen pro Instanz aus, um Autoscaling auf der Basis von Instanzmesswerten zu konfigurieren.

  9. Geben Sie unter Messwert-ID den Namen des Messwerts ein. Beispiel: compute.googleapis.com/instance/network/received_bytes_count

  10. Geben Sie unter Zusätzlicher Filterausdruck einen Filter ein. Beispiel: 'metric.labels.loadbalanced = true'

  11. 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 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=10 \
    --stackdriver-metric-utilization-target-type=delta-per-second \
    --stackdriver-metric-filter='metric.labels.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --zone us-central1-f

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 gcloud CLI-Referenz.

API

Verwenden Sie zum Hinzufügen von Messwertfiltern für eine zonale MIG die Ressource autoscalers oder für eine regionale MIG die Betaversion von regionAutoscalers als Ressource.

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

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

Gruppenmesswerte

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, damit genügend VMs vorhanden sind, um die verfügbare Arbeit abzuschließen. Dies wird durch den Messwert angegeben. 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, die Google Cloud CLI oder die Compute Engine API, um Autoscaling mit Gruppenmesswerten zu konfigurieren.

Console

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

    Zu den Instanzgruppen

  2. Wenn Sie keine verwaltete Instanzgruppe haben, erstellen Sie eine. Klicken Sie andernfalls auf den Namen einer MIG, um die Übersichtsseite der Instanzgruppe zu öffnen.

  3. Klicken Sie auf der Übersichtsseite der Instanzgruppe auf Bearbeiten.

  4. Wenn keine Autoscaling-Konfiguration vorhanden ist, klicken Sie unter Autoscaling auf Autoscaling konfigurieren.

  5. Wählen Sie unter Autoscaling-Modus die Option Ein: Der Gruppe Instanzen hinzufügen und daraus entfernen aus, um Autoscaling zu aktivieren.

  6. Ist ein Messwert vorhanden, klicken Sie im Abschnitt Messwerte für Autoscaling darauf, um ihn zu bearbeiten. Mit Messwert hinzufügen können Sie einen weiteren Messwert hinzufügen.

  7. Legen Sie als Messwerttyp den Cloud Monitoring-Messwert fest.

  8. Wählen Sie unter Umfang des Messwertexports die Option Einzelne Zeitachse pro Gruppe aus.

  9. Geben Sie unter Messwert-ID den Namen des Messwerts im folgenden Format an: example.googleapis.com/path/to/metric.

  10. Geben Sie den Typ der überwachten Ressource an.

  11. Wenn Sie einzelne Messwerte mit mehreren Streams oder Labels verwenden möchten, geben Sie einen zusätzlichen Filterausdruck an. Der Filter muss die Voraussetzungen für die Autoscaling-Filterung erfüllen.

  12. Wählen Sie unter Skalierungsrichtlinie entweder Zuweisung einzelner Instanzen 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.
  13. Speichern Sie alle Einstellungen.

gcloud

Das Erstellen eines Autoscalings auf Basis von Gruppenmesswerten ähnelt dem Erstellen eines Autoscalings, das auf Instanzmesswerten skaliert, mit der Ausnahme, dass Sie unterschiedliche Flags angeben. Geben Sie im Befehl das Flag --update-stackdriver-metric an, um die URL des Monitoring-Messwerts anzugeben. Sie müssen mit einem der folgenden Flags auch angeben, 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.

Mit dem folgenden Befehl wird das Autoscaling anhand eines Gruppenmesswerts mit dem Flag --stackdriver-metric-single-instance-assignment erstellt.

gcloud compute instance-groups managed set-autoscaling GROUP_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 \
    [--zone=ZONE | --region=REGION]

Dabei gilt:

  • GROUP_NAME: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • MAX_INSTANCES: Die maximale Anzahl von VMs, die von der MIG verwendet werden können.
  • MIN_INSTANCES: Die minimale Anzahl von VMs, die von der MIG verwendet werden können.
  • 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.
  • ZONE: Bei zonalen MIGs die Zone, in der sich die MIG befindet.
  • REGION: Bei regionalen MIGs die Region, in der sich die MIG befindet.

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.

Mit dem folgenden Befehl wird das Autoscaling anhand eines Gruppenmesswerts mit dem Flag --stackdriver-metric-utilization-target erstellt.

gcloud compute instance-groups managed set-autoscaling GROUP_NAME \
    --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 \
    [--zone=ZONE | --region=REGION]

Dabei gilt:

  • GROUP_NAME: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • MAX_INSTANCES: Die maximale Anzahl von VMs, die von der MIG verwendet werden können.
  • MIN_INSTANCES: Die minimale Anzahl von VMs, die von der MIG verwendet werden können.
  • 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.
  • ZONE: Bei zonalen MIGs die Zone, in der sich die MIG befindet.
  • REGION: Bei regionalen MIGs die Region, in der sich die MIG befindet.

Eine Liste der verfügbaren Befehle und Flags für das Autoscaling in Google Cloud, die mit dem gruppenbasierten Autoscaling verwendet werden, finden Sie in der Referenz zur Google Cloud CLI.

API

Verwenden Sie zum Konfigurieren von Autoscaling mit Gruppenmesswerten für eine zonale MIG die Ressourceautoscalers oder bei einer regionalen MIG die Betaversion von regionAutoscalers als Ressource.

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:

Der Parameter singleInstanceAssignment gibt an, wie viel Arbeit eine einzelne VM übernehmen soll.

Mit dem folgenden Aufruf können Sie beispielsweise ein Autoscaling erstellen, das eine zonale MIG anhand der Instanzzuweisung eines Gruppenmesswerts skaliert.

POST https://compute.googleapis.com/compute/v1/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
    }
  ],
 }
}

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: Die Zone, in der sich die MIG befindet.
  • GROUP_NAME: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • MAX_INSTANCES: Die maximale Anzahl von VMs, die von der MIG verwendet werden können.
  • MIN_INSTANCES: Die minimale Anzahl von VMs, die von der MIG verwendet werden können.
  • 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.

Mit dem folgenden Aufruf können Sie beispielsweise ein Autoscaling erstellen, das eine zonale MIG anhand des Nutzungsziels eines Gruppenmesswerts skaliert.

POST https://compute.googleapis.com/compute/v1/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.
  • ZONE: Die Zone, in der sich die MIG befindet.
  • GROUP_NAME: Der Name der MIG, der Sie Autoscaling hinzufügen möchten.
  • MAX_INSTANCES: Die maximale Anzahl von VMs, die von der MIG verwendet werden können.
  • MIN_INSTANCES: Die minimale Anzahl von VMs, die von der MIG verwendet werden können.
  • 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.

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 zonale MIG mit dem Namen our-instance-group und befindet sich in 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 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.labels.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 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

Nächste Schritte