Wie bestimme ich die Drosselung in meinen CloudWatch-Protokollen?

Letzte Aktualisierung: 06.04.2022

Ich habe bei der Arbeit mit Amazon-CloudWatch-Protokollen einen requestLimitExceded- oder ThrottlingException-Fehler erhalten und mein API-Aufruf wurde gedrosselt. Wie kann ich eine Drosselung in meinen CloudWatch-Protokollen verhindern?

Kurzbeschreibung

Wenn Sie mit CloudWatch-Protokollen arbeiten, überschreiten Sie möglicherweise das API-Ratenlimit. In diesem Fall erhalten Sie einen requestLimitExceeded- oder ThrottlingException-Fehler und Ihr API-Aufruf wird gedrosselt. Sie müssen ermitteln, wo und wann die Drosselung stattfindet, damit Sie diese Fehler beheben und sachkundige Anträge auf Erhöhung der Ratenbegrenzung stellen können.

Auflösung

Zeitweilige Drosselung von CloudWatch-Protokollen beim Zugriff auf Protokolle

Sie können die API-Aufrufe FilterLogEvents oder GetLogEvents verwenden, um Ihre Protokollereignisse oder Protokoll-Streams aufzulisten. Diese API-Aufrufe haben ein festes Limit und qualifizieren sich nicht für eine Limiterhöhung. Das heißt, wenn Sie die FilterLogEvents-API verwenden, um nach Protokollereignissen aus einer bestimmten Protokollgruppe zu suchen, hat die Standard-QuaAPI ein Standardkontingent von 5 Transaktionen pro Sekunde (TPS) pro Konto/Region. Wenn Sie dieses Limit erreichen, wird der Fehler rateExceeded angezeigt.

Verwenden Sie diese bewährten Methoden, um Drosselungsfehler in diesem Anwendungsfall zu vermeiden:

ThrottlingException-Fehler bei der Verwendung einer Anwendung/eines Skripts zum Abrufen von CloudWatch-Protokolldaten

Um CloudWatch-Protokolle zu sammeln, können Sie ein Collector-Skript entwickeln. Dieses Skript versucht, einen DescribeLogStream- oder GetLogEvents-API-Aufruf durchzuführen, um Daten aus verschiedenen Protokollstreams oder unterschiedlichen Zeitrahmen in derselben Protokollgruppe abzurufen. API-Aufrufe wie FilterLogEvents, GetLogEvents und DescribeLogStreams sind für die menschliche Interaktion und nicht für die Automatisierung konzipiert, sodass Sie einen Fehler erhalten und der API-Aufruf gedrosselt wird.

Verwenden Sie diese bewährten Methoden, um eine Drosselung in diesem Anwendungsfall zu vermeiden:

  • Verwenden Sie ein exponentielles Backoff und Wiederholungen, wenn Sie einen API-Aufruf tätigen. Weitere Informationen finden Sie unter Exponentielles Backoff und Jitter sowie Fehlerwiederholungen und exponentielles Backoff in AWS.
  • Verteilen Sie Ihre API-Aufrufe im Zeitverlauf. Versuchen Sie, Aktionen mit einer gewissen Randomisierung so zu planen, dass sie über einen bestimmten Zeitraum verteilt sind.
  • Fügen Sie Ruheintervalle zwischen aufeinanderfolgenden API-Aufrufen hinzu. Fügen Sie eine gewisse Verzögerung zwischen API-Aufrufen hinzu, die von demselben Skript oder derselben Anwendung gesendet werden. Wenn API-Aufrufe alle schnell hintereinander gesendet werden, führt dies eher zu Ratenfehlern.
  • In einigen Fällen können Sie eine SIEM-Lösung wie Splunk verwenden, um Protokolle von CloudWatch abzurufen. SIEM-Lösungen werden verwendet, um Daten aus mehreren Systemen zu sammeln und diese Daten zu analysieren, um ungewöhnliches Verhalten zu erkennen. Wenn Sie das Splunk-Plug-In verwenden, kann es zu einer API-Drosselung kommen. Um dieses Problem zu vermeiden, erstellen Sie mit Amazon Kinesis Data Firehose einen Abonnementfilter für CloudWatch-Protokolle und liefern Sie die Protokolldaten an Splunk. Weitere Informationen finden Sie in der Splunk-Dokumentation unter Konfigurieren von Kinesis-Eingaben für das Splunk-Add-on für AWS.

Drosselungsfehler bei der Integration von PutLogEvents-API-Aufrufen mit der Lambda-Funktion

Der API-Aufruf PutLogEvents wird verwendet, um Protokolle in Batches von 1 MB in einen angegebenen Protokollstream hochzuladen. Diese API hat zwei Tarifbegrenzungen:

  • 5 Anforderungen pro Sekunde pro Protokollstream. Zusätzliche Anfragen werden gedrosselt. Dieses Kontingent kann nicht geändert werden.
  • 800 Transaktionen pro Sekunde, pro Konto, pro Region. Dies gilt mit Ausnahme der folgenden Regionen, in denen das Kontingent 1 500 Transaktionen pro Sekunde pro Konto pro Region beträgt: USA Ost (Nord-Virginia), USA West (Oregon) und Europa (Irland). Sie können eine Kontingenterhöhung beantragen.

Weitere Informationen dazu und um eine Kontingenterhöhung zu beantragen, finden Sie unter CloudWatch-Logs-Kontingente.

Um Protokolle in den angegebenen Protokollstream zu schreiben, müssen Sie das Sequenz-Token in die Anforderung aufnehmen. Dies wurde zuletzt aus der Antwort auf den vorherigen Aufruf extrahiert. In einigen Fällen können Sie die DescribeLogStreams-API verwenden, um das nächste Sequenz-Token für den Protokollstream abzurufen, bevor Sie PutLogEvent aufrufen. Die PutLogEvent-API hat ein viel höheres Limit als DescribeLogsStream, was zu einer Drosselung führt. Um dies zu verhindern, verwenden Sie die PutLogEvents-API, um die Sequenz anstelle von DescribeLogStreams abzurufen. Sie erhalten einen 400-Statuscode, wenn Sie die PutLogEvents-API ohne Sequenz-Token verwenden, aber mit dieser Fehlermeldung erhalten Sie das nächste Sequenz-Token. Sie können dieses Sequenz-Token erneut mit der PutLogEvents-API verwenden.

Verwenden Sie diese Tipps, um in diesem Anwendungsfall eine Drosselung zu vermeiden:

  • Versuchen Sie, mehrere Protokollereignisse in demselben API-Aufruf zu kombinieren.
  • Verteilen Sie API-Aufrufe über mehrere Protokollstreams.
  • Wenden Sie die Wiederholungslogik mit exponentiellem Backoff und Jitter an. Weitere Informationen finden Sie unter Verwalten und Überwachen der API-Drosselung in Ihren Workloads.
  • Verteilen Sie Ihre API-Aufrufe gleichmäßig im Zeitverlauf.

Verwalten Sie Ihre CloudWatch-Logs-Service-Quotas

AWS definiert Kontingente für Services, um die Leistung zu schützen und die Verfügbarkeit zu gewährleisten. CloudWatch verfügt über Kontingente für Metriken, Alarme, API-Anfragen und Alarm-E-Mail-Benachrichtigungen. Gehen Sie wie folgt vor, um Ihre Service Quotas zu visualisieren und Alarme festzulegen, wenn Sie den Schwellenwert erreichen:

  1. Öffnen Sie die Service-Quotas-Konsole.
  2. Wählen Sie im Navigationsbereich AWS-Services.
  3. Suchen Sie in der Liste von AWS-Services nach Amazon CloudWatch Logs.
  4. In der Liste der Service Quotas sehen Sie den Namen des Service Quotas, den angewendeten Wert (falls verfügbar), das AWS-Standardkontingent und ob der Kontingentwert anpassbar ist.
  5. Um weitere Informationen zu einem Service Quota anzuzeigen, wie die Beschreibung, wählen Sie den Kontingentnamen.
  6. Nachdem Sie den Kontingentnamen ausgewählt haben, können Sie weitere Informationen zu diesem Kontingent sehen. Wenn Sie beispielsweise GetLogEvents-Drosselungslimit für Transaktionen pro Sekunde auswählen, sehen Sie Folgendes:
    • Beschreibung
    • Kontingent-Code
    • Kontingent-ARN
    • Nutzung: %
    • Angewendeter Kontingentwert
    • AWS-Standardkontingentwert
    • Einstellbar: J/N
  7. Wählen Sie im Abschnitt Amazon-CloudWatch-Alarme die Option Create alarm (Alarm erstellen) aus und geben Sie einen Alarm threshold (Alarmschwellenwert) und einen Alarm name (Alarmnamen) ein.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?