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:
-
Rufen Sie in der Google Cloud Console das Segment und die Seite Log-Explorer auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis mit der Zwischenüberschrift Logging aus.
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ägecurrentLocations: "us-central1"(regional) odercurrentLocations: "us-central1-a"geben beispielsweise an, dass die Region"us-central1"odercurrentLocations: "global"ist.
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.Ermitteln Sie den relevanten Standort in den Audit-Logs.
Prüfen Sie die Kontingente und Limits für
Concurrent operations per project.Console
Rufen Sie in der Google Cloud Console die Seite Kontingente auf.
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.
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 typeaus oder wählen SieService: Compute Engine API,type: System Limitund ein Schlüsselwortconcurrentaus, 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_stopaus, um die Kontingentnutzung und das Limit für den Vorganginstances.stopaufzurufen.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-central1aus, um die Kontingentnutzung und das Limit für die Regionus-central1aufzurufen.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_IDdurch 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.
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:
- Auf Fertigstellung von Vorgängen warten
- Fehlercodes nutzen, keine Fehlermeldungen
Clientseitige Wiederholungsversuche minimieren, um API-Ratenbegrenzungen einzuhalten
Mit einer der folgenden Methoden können Sie die Anzahl der Wiederholungsversuche minimieren: