Wie bestimme ich die Drosselung in meinen CloudWatch-Protokollen?

Lesedauer: 5 Minute
0

Ich erhalte die Fehlermeldung „RequestLimitExceeded“ oder „ThrottlingException“, wenn ich mit Amazon-CloudWatch-Protokollen arbeite, und mein API-Aufruf wird gedrosselt.

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 Protokollstreams aufzulisten. Diese API-Aufrufe haben ein festes Limit und kommen nicht für eine Limiterhöhung in Frage. Das heißt, wenn Sie die FilterLogEvents-API verwenden, um nach Protokollereignissen aus einer bestimmten Protokollgruppe zu suchen, hat die Standard-QuaAPI ein Standardkontingent. Dieses Angebot umfasst 5 Transaktionen pro Sekunde (TPS) pro Konto oder AWS-Region. Wenn Sie dieses Limit erreichen, erhalten Sie den RateExceeded-Fehler.

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, mit einem DescribeLogStream- oder GetLogEvents-API-Aufruf Daten aus verschiedenen Protokollstreams oder verschiedenen 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. Das bedeutet, dass Sie eine Fehlermeldung 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. Planen Sie Aktionen mit einer gewissen Randomisierung, sodass sie über einen bestimmten Zeitraum verteilt werden.
  • 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 Sie API-Aufrufe schnell hintereinander senden, ist es wahrscheinlicher, dass dies zu Ratenfehlern führt.
  • 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 PutLogEvents-API-Aufruf wird verwendet, um Protokolle in Batches von 1 MB in einen bestimmten Protokollstream hochzuladen. Diese API hat ein Ratenlimit von 800 TPS pro Konto und Region. Dies gilt mit Ausnahme der folgenden Regionen, in denen das Kontingent 1 500 TPS pro Konto und 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.

Verwalten von Ihren CloudWatch-Logs-Servicekontingenten

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 Servicekontingente 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.    Die Liste der Servicekontingente zeigt Ihnen verschiedene Attribute oder Optionen: Den Namen des Servicekontingents, den angewendeten Wert (falls verfügbar), das AWS-Standardkontingent und ob der Kontingentwert anpassbar ist.

5.    Um weitere Informationen zu einem Servicekontingent anzuzeigen, z. B. die Beschreibung, wählen Sie den Kontingentnamen aus.

6.    Nachdem Sie den Kontingentnamen ausgewählt haben, können Sie weitere Informationen zu diesem Kontingent sehen. Wenn Sie beispielsweise das Drossellimit für Transaktionen pro Sekunde von GetLogEvents wählen, werden die folgenden Elemente angezeigt:

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.


Relevante Informationen

Wie vermeide ich eine Einschränkung der maximalen Bandbreite, wenn ich PutMetricData in der CloudWatch-API aufrufe?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr