Fehlerbehebung bei Kontingenten für gleichzeitige Vorgänge in der Compute Engine

In diesem Dokument wird beschrieben, wie Sie Probleme mit Limits für gleichzeitige Vorgänge in Compute Engine beheben, die durch rateLimitExceeded-Fehler verursacht werden.

So ermitteln Sie die Ursache eines rateLimitExceeded-Fehlers:

  1. Rufen Sie in der Google Cloud Console das Segment und die Seite Log-Explorer auf:

    Zum Log-Explorer

    Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis mit der Zwischenüberschrift Logging aus.

  2. Geben Sie die folgende Logging-Abfrage im Abfrageeditor ein, um die von der Compute Engine API generierten Fehlerlogs zu filtern.

    log_id("cloudaudit.googleapis.com/activity")
    protoPayload.serviceName="compute.googleapis.com"
    protoPayload.response.error.code=403
    protoPayload.status.message="Rate Limit Exceeded"
    

    Die gefilterten Fehlerlogs sollten in etwa so aussehen:

    "protoPayload":{
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Rate Limit Exceeded"
    }
    "serviceName": "compute.googleapis.com",
    "methodName": "METHOD_NAME",
    ...
    ...
    "response": {
      "error": {
        "message": "Rate Limit Exceeded",
        "code": 403,
        "errors": [
          {
            "message": "Rate Limit Exceeded",
            "reason": "rateLimitExceeded",
            "domain": "usageLimits"
          }
        ]
      },
      "@type": "type.googleapis.com/error"
    },
    "resourceLocation": {
      "currentLocations": [
        "LOCATION"
      ]
    },
    ...
    ... 

    Die Fehlerdetails enthalten die folgenden Werte:

    • METHOD_NAME: Der Name der Dienstmethode oder des Vorgangs. Bei API-Aufrufen ist dies der Name der API-Methode.

    • LOCATION: Der Standort der Ressource. Dies kann eine Region, eine Zone oder global sein. Die Einträge currentLocations: "us-central1"(regional) oder currentLocations: "us-central1-a" geben beispielsweise an, dass die Region "us-central1" oder currentLocations: "global" ist.

  3. Ermitteln Sie den zugehörigen methodName-Wert aus dem Fehlerlog. Dieser Name steht für die API-Methode, für die das Ratenlimit überschritten wurde, z. B. v1.compute.instances.stop.

  4. Ermitteln Sie den relevanten Standort in den Audit-Logs.

  5. Prüfen Sie die Kontingente und Limits für Concurrent operations per project.

    Console

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

      Kontingente aufrufen

      Auf der Seite Kontingente sind die Kontingentnutzung und -limits für Ihr Projekt aufgeführt. Standardmäßig werden die am häufigsten verwendeten Kontingente in der Liste sortiert. So können Sie leicht feststellen, bei welchen Limits die Gefahr besteht, dass sie überschritten werden.

    2. Wenn Sie die Liste filtern und die Nutzung und das Limit für ein bestimmtes Kontingent aufrufen möchten, wählen Sie im Feld Filter die Option Kontingent oder Messwert aus.

      Wählen Sie beispielsweise das Kontingent nach dem Namen Concurrent global operations per project operation type aus oder wählen Sie Service: Compute Engine API, type: System Limit und ein Schlüsselwort concurrent aus, um alle Kontingente für gleichzeitige Vorgänge aufzulisten. Durch das Filtern wird eine Liste mit Kontingenten für gleichzeitige Vorgänge erstellt. In dieser Liste können Sie nach dem betroffenen Kontingent suchen. Wenn Sie das Kontingent für einen bestimmten Vorgang filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie den operation_type aus (in den Audit-Logs als methodName angezeigt).

      Wählen Sie beispielsweise instances_stop aus, um die Kontingentnutzung und das Limit für den Vorgang instances.stop aufzurufen.

      Wenn Sie das Kontingent für eine bestimmte Region filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie die Region aus (in den Audit-Logs als currentLocations angezeigt).

      Wählen Sie beispielsweise us-central1 aus, um die Kontingentnutzung und das Limit für die Region us-central1 aufzurufen.

      Die Filter Region und operation_type können zusammen verwendet werden, um die Kontingentnutzung und das Limit für einen bestimmten Vorgang in einer bestimmten Region aufzurufen.

    gcloud

    Mit der Google Cloud CLI können Sie die Nutzung und das Limit von Kontingenten für gleichzeitige Vorgänge aufrufen.

    Für diesen Ansatz müssen Sie die Alphabefehle installiert haben. Wenn Sie Cloud Shell für die Interaktion mit Google Cloudverwenden, wird das Google Cloud CLI für Sie installiert.

    Verwenden Sie den folgenden Befehl, um ein Vorgangskontingent aufzurufen:

    gcloud alpha services quota list \
      --service=compute.googleapis.com \
      --consumer=projects/PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID des Projekts, für das Sie das Kontingent aufrufen möchten.

    Diese Kontingente werden in der Regel in zwei Kategorien gruppiert:

    • Global oder regional
    • Pro Projekt oder pro Projekt und Vorgangstyp

    Weitere Informationen finden Sie unter Kontingentgruppen für gleichzeitige Vorgänge.

  6. Prüfen Sie das Nutzungsdiagramm für das Kontingent. Wenn die Nutzung während des Zeitraums der Fehlerlogs nahe am oder über dem Kontingentlimit liegt, bedeutet das, dass das Kontingent oder das Systemlimit überschritten wurde.

    Wenn Sie Diagramme mit der aktuellen und der Spitzennutzung aufrufen möchten, rufen Sie das Kontingent auf und klicken Sie dann auf Monitoring. Möglicherweise müssen Sie ganz nach rechts zum Ende der Tabelle scrollen.

    Das Monitoring-Diagramm bestätigt die Ursache des rateLimitExceeded-Fehlers mit dem spezifischen Kontingent/Limit. Wenn die aktuellen Werte über den Grenzwerten liegen, bedeutet das, dass das Systemlimit überschritten wurde. Da Systemlimits nicht geändert werden können, empfehlen wir die folgenden Best Practices, um die Anzahl der gleichzeitigen Vorgänge zu reduzieren.

    Einige Best Practices: