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 der Compute Engine beheben, die durch rateLimitExceeded-Fehler verursacht werden.

Mit den folgenden Schritten zur Fehlerbehebung kannst du die Ursache eines rateLimitExceeded-Fehlers ermitteln:

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

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

  2. Wenn Sie die von der Compute Engine API generierten Fehlerprotokolle filtern möchten, geben Sie die folgende Logging-Abfrage in den Abfrageeditor ein.

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

    Die gefilterten Fehlerprotokolle 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 Speicherort der Ressource. Dies kann eine Region, 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 Fehlerprotokoll. Dieser Name steht für die API-Methode, für die das Ratenlimit überschritten wurde, z. B. v1.compute.instances.stop.

  4. Suchen Sie in den Audit-Logs nach dem entsprechenden Standort.

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

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Kontingente.

      Kontingente aufrufen

      Auf der Seite Kontingente sind die Kontingentnutzung und die Kontingentlimits 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.

      Sie können beispielsweise das Kontingent nach dem Namen Concurrent global operations per project operation type auswählen oder Service: Compute Engine API, type: System Limit und ein Schlüsselwort concurrent, um alle Kontingente für parallele Vorgänge aufzulisten. Durch Filtern wird eine Liste der gleichzeitigen Kontingente angezeigt. 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 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 nach einer bestimmten Region filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie die Region aus (in den Prüfprotokollen als currentLocations angezeigt).

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

      Mit den Filtern region und operation_type können Sie die Kontingentnutzung und das Limit für einen bestimmten Vorgang in einer bestimmten Region aufrufen.

    gcloud

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

    Für diesen Ansatz müssen Sie die Komponente 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 unterteilt:

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

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

  6. Sehen Sie sich das Nutzungsdiagramm für das Kontingent an. Wenn die Nutzung während des Zeitraums der Fehlerprotokolle dem Kontingentlimit nahekommt oder es überschreitet, wird das Kontingent- oder Systemlimit überschritten.

    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 nach rechts zum Ende der Tabelle scrollen.

    In der Überwachungsgrafik wird die Ursache des rateLimitExceeded-Fehlers mit dem jeweiligen Kontingent/Limit bestätigt. Wenn die aktuellen Werte über den Grenzwerten liegen, wird das Systemlimit überschritten. 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: