Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
Die Clientanwendung erhält einen Zeitüberschreitungsfehler für API-Anfragen oder die Anfrage wird abrupt beendet, während die API-Anfrage noch auf Apigee ausgeführt wird.
Für solche API-Anfragen im API-Monitoring und in NGINX-Zugriffslogs wird der Statuscode 499
angezeigt. Manchmal werden in API Analytics unterschiedliche Statuscodes angezeigt, weil sie den vom Message Processor zurückgegebenen Statuscode enthält.
Fehlermeldung
In Client-Anwendungen können folgende Fehler angezeigt werden:
curl: (28) Operation timed out after 6001 milliseconds with 0 out of -1 bytes received
Wodurch kommt es zu Zeitüberschreitungen bei Clients?
Der typische Pfad für eine API-Anfrage auf der Edge-Plattform lautet Client > Router > Message Processor > Back-End-Server, wie in der folgenden Abbildung dargestellt:
Die Router und Nachrichtenprozessoren auf der Apigee Edge-Plattform werden mit geeigneten Standardzeitlimitwerten eingerichtet, damit die Ausführung der API-Anfragen nicht zu lange dauert.
Zeitüberschreitung auf Client
Clientanwendungen können je nach Ihren Anforderungen mit einem geeigneten Zeitüberschreitungswert konfiguriert werden.
Bei Clients wie Webbrowsern und mobilen Apps werden vom Betriebssystem vorgegebene Zeitlimits festgelegt.
Zeitüberschreitung auf dem Router
Das für Router konfigurierte Standardzeitlimit beträgt 57 Sekunden. Dies ist die maximale Zeitspanne, die ein API-Proxy von dem Zeitpunkt, an dem die API-Anforderung bei Edge empfangen wird, bis zur Rücksendung der Antwort ausgeführt werden kann, einschließlich der Backend-Antwort und aller ausgeführten Richtlinien. Das Standardzeitlimit kann auf den Routern und virtuellen Hosts überschrieben werden, wie unter E/A-Zeitlimit bei Routern konfigurieren erläutert.
Zeitüberschreitung bei Nachrichtenprozessoren
Das auf Message Processors konfigurierte Standardzeitlimit beträgt 55 Sekunden. Dies ist die maximale Zeit, die der Back-End-Server benötigen kann, um die Anfrage zu verarbeiten und dem Message Processor zu antworten. Das Standardzeitlimit kann auf den Message Processorn oder im API-Proxy überschrieben werden, wie unter E/A-Zeitlimit für Message Processors konfigurieren erläutert.
Wenn der Client die Verbindung mit dem Router schließt, bevor das Zeitlimit für den API-Proxy überschritten wurde, wird der Zeitüberschreitungsfehler für die jeweilige API-Anfrage angezeigt. Für solche Anfragen wird der Statuscode 499 Client
Closed Connection
im Router protokolliert. Dies kann in API-Monitoring und NGINX-Zugriffslogs beobachtet werden.
Mögliche Ursachen
In Edge sind die typischen Ursachen für den Fehler 499 Client Closed Connection
:
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Client hat die Verbindung abrupt geschlossen | Dies geschieht, wenn der Client die Verbindung schließt, weil der Endnutzer die Anfrage abgebrochen hat, bevor sie abgeschlossen ist. | Nutzer öffentlicher und privater Clouds |
Zeitüberschreitung bei Clientanwendung | Dies geschieht, wenn für die Clientanwendung eine Zeitüberschreitung auftritt, bevor der API-Proxy Zeit hat, die Antwort zu verarbeiten und zu senden. In der Regel geschieht dies, wenn das Zeitlimit des Clients unter dem Zeitlimit des Routers liegt. | Nutzer öffentlicher und privater Clouds |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Methoden, um diesen Fehler zu diagnostizieren:
- API-Monitoring
- NGINX-Zugriffslogs
API-Monitoring
So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:
- Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
- Filtern Sie nach
4xx
Fehlern und wählen Sie den Zeitraum aus. - Vergleiche den Statuscode mit der Zeit.
- Wählen Sie eine Zelle aus, die
499
Fehler enthält: - Daraufhin werden im rechten Bereich die Informationen zum Fehler
499
wie unten dargestellt angezeigt: - Klicken Sie im rechten Bereich auf Logs ansehen.
Notieren Sie sich im Fenster Traffic-Logs die folgenden Details für einige
499
-Fehler:- Anfrage:Gibt die Anfragemethode und den URI an, die für die Aufrufe verwendet wurden.
- Response Time (Antwortzeit): Gibt die Gesamtzeit an, die für die Anfrage verstrichen ist.
Sie können alle Logs auch mit der GET-Logs-API von API Monitoring abrufen. Durch die Abfrage von Logs für
org
,env
,timeRange
undstatus
könnten Sie beispielsweise alle Logs für Transaktionen herunterladen, bei denen das Zeitlimit des Clients überschritten wurde.Da API-Monitoring den Proxy für HTTP-
499
-Fehler auf-
festlegt, können Sie mit der API (Logs API) den zugehörigen Proxy für den virtuellen Host und den Pfad abrufen.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https://VIRTUAL_HOST/BASEBATH" -H "Authorization: Bearer $TOKEN"
- Prüfen Sie die Reaktionszeit auf zusätzliche
499
-Fehler und prüfen Sie, ob die Reaktionszeit für alle499
-Fehler konsistent ist (z. B. 30 Sekunden).
NGINX-Zugriffslogs
So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie die Private Cloud nutzen, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-
499
-Fehlern ermitteln. - Prüfen Sie die NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Suchen Sie nach
499
-Fehlern innerhalb eines bestimmten Zeitraums (ob das Problem in der Vergangenheit aufgetreten ist) oder ob es immer noch Anfragen mit499
gibt, die fehlschlagen. - Beachten Sie die folgenden Informationen für einige
499
-Fehler:- Gesamtantwortzeit
- Anfrage-URI
- User-Agent
Beispiel für einen 499-Fehler aus dem NGINX-Zugriffslog:
2019-08-23T06:50:07+00:00 rrt-03f69eb1091c4a886-c-sy 50.112.119.65:47756 10.10.53.154:8443 10.001 - - 499 - 422 0 GET /v1/products HTTP/1.1 - okhttp/3.9.1 api.acme.org rrt-03f69eb1091c4a886-c-sy-13001-6496714-1 50.112.119.65 - - - - - - - -1 - - dc-1 router-pod-1 rt-214-190301-0020137-latest-7d 36 TLSv1.2 gateway-1 dc-1 acme prod https -
Für dieses Beispiel sehen wir die folgenden Informationen:
- Gesamtantwortzeit:
10.001
Sekunden. Das bedeutet, dass für den Client nach 10,001 Sekunden eine Zeitüberschreitung aufgetreten ist. - Anfrage:
GET /v1/products
- Host:
api.acme.org
- User-Agent:
okhttp/3.9.1
- Prüfen Sie, ob die Gesamtantwortzeit und der User-Agent bei allen
499
-Fehlern konsistent sind.
Ursache: Client hat die Verbindung abrupt geschlossen
Diagnose
- Wenn eine API von einer Single-Page-App aufgerufen wird, die in einem Browser oder in einer mobilen App ausgeführt wird, bricht der Browser die Anfrage ab, wenn der Endnutzer plötzlich den Browser schließt, zu einer anderen Webseite im selben Tab wechselt oder das Laden der Seite durch Klicken oder Tippen auf Laden beenden anhält.
- In diesem Fall variieren die Transaktionen mit dem HTTP-Status
499
normalerweise für jede Anfrage in der Verarbeitungszeit der Anfrage (Reaktionszeit). -
Sie können feststellen, ob dies die Ursache ist. Vergleichen Sie dazu die Reaktionszeit und prüfen Sie, ob sie für jeden der
499
-Fehler unterschiedlich ist. Verwenden Sie dazu API-Monitoring- oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte beschrieben.
Auflösung
- Das ist normal und hat in der Regel keinen Grund zur Sorge, wenn die HTTP-
499
-Fehler nur in kleinen Mengen auftreten. -
Tritt das Problem häufig für denselben URL-Pfad auf, ist der jeweilige Proxy, der mit diesem Pfad verknüpft ist, sehr langsam und Nutzer sind nicht zu warten bereit.
Sobald Sie wissen, welcher Proxy betroffen sein könnte, verwenden Sie das Dashboard für die Latenzanalyse, um die Ursache der Proxy-Latenz genauer zu untersuchen.
- Ermitteln Sie in diesem Fall anhand der Schritte unter Allgemeine Diagnoseschritte den betroffenen Proxy.
- Verwenden Sie das Dashboard für die Latenzanalyse, um die Ursache der Proxy-Latenz weiter zu untersuchen und das Problem zu beheben.
- Wenn Sie feststellen, dass die Latenz für den spezifischen Proxy erwartet wird, müssen Sie Ihre Nutzer möglicherweise darüber informieren, dass die Antwort dieses Proxys einige Zeit in Anspruch nimmt.
Ursache: Zeitüberschreitung bei Clientanwendung
Dies kann in verschiedenen Szenarien vorkommen.
-
Unter normalen Betriebsbedingungen wird erwartet, dass die Anfrage eine bestimmte Zeit (z. B. 10 Sekunden) dauert. Die Clientanwendung ist jedoch auf einen falschen Zeitüberschreitungswert (z. B. 5 Sekunden) eingestellt. Dies führt dazu, dass vor Abschluss der API-Anfrage eine Zeitüberschreitung auftritt, was zu
499
führt. In diesem Fall müssen wir das Zeitlimit des Clients auf einen geeigneten Wert festlegen. - Ein Zielserver oder ein Callout dauert länger als erwartet. In diesem Fall müssen Sie die entsprechende Komponente korrigieren und die Zeitüberschreitungswerte entsprechend anpassen.
- Der Client benötigte die Antwort nicht mehr und wurde daher abgebrochen. Dies kann bei APIs mit hoher Häufigkeit wie Auto-Vervollständigung oder kurzem Polling der Fall sein.
Diagnose
API-Monitoring oder NGINX-Zugriffslogs
Diagnostizieren Sie den Fehler mithilfe von API-Monitoring oder NGINX-Zugriffslogs:
- Prüfen Sie die API-Monitoringlogs oder NGINX-Zugriffslogs für die HTTP-
499
-Transaktionen, wie unter Allgemeine Diagnoseschritte erläutert. - Prüfen Sie, ob die Antwortzeit für alle
499
-Fehler konsistent ist. - Wenn ja, hat möglicherweise eine bestimmte Clientanwendung ein festes Zeitlimit auf ihrer Seite konfiguriert. Wenn ein API-Proxy- oder Zielserver langsam reagiert, kommt es beim Client vor einer Zeitüberschreitung des Proxys zu einer Zeitüberschreitung, was zu großen Mengen von HTTP-
499s
für denselben URI-Pfad führt. Bestimmen Sie in diesem Fall den User-Agent aus den NGINX-Zugriffslogs. Damit lässt sich die spezifische Clientanwendung ermitteln. - Es kann auch sein, dass vor Apigee ein Load-Balancer wie Akamai, F5, AWS ELB usw. steht. Wenn Apigee hinter einem benutzerdefinierten Load-Balancer ausgeführt wird, muss das Anfragezeitlimit des Load-Balancers so konfiguriert werden, dass es höher als das Apigee API-Zeitlimit ist. Standardmäßig läuft beim Apigee-Router nach 57 Sekunden eine Zeitüberschreitung ab. Daher empfiehlt es sich, ein Anfragezeitlimit von 60 Sekunden auf dem Load-Balancer zu konfigurieren.
Trace
Fehler mit Trace diagnostizieren
Wenn das Problem immer noch aktiv ist (499
Fehler treten immer noch auf), führen Sie die folgenden Schritte aus:
- Aktivieren Sie die Trace-Sitzung für die betroffene API in der Edge-Benutzeroberfläche.
- Warten Sie entweder, bis der Fehler auftritt, oder führen Sie nach dem API-Aufruf einige API-Aufrufe aus und reproduzieren Sie den Fehler.
- Prüfen Sie in jeder Phase die verstrichene Zeit und notieren Sie sich die Phase, in der Sie die meiste Zeit aufgewendet haben.
- Wenn direkt nach einer der folgenden Phasen der Fehler mit der längsten verstrichenen Zeit auftritt, weist dies darauf hin, dass der Back-End-Server langsam ist oder lange für die Verarbeitung der Anfrage benötigt wird:
- Anfrage an Zielserver gesendet
- ServiceCallout policy
Hier ist ein Beispiel für einen UI-Trace, der eine Gateway-Zeitüberschreitung zeigt, nachdem die Request an den Zielserver gesendet wurde:
Auflösung
- Unter Best Practices zum Konfigurieren des E/A-Zeitlimits finden Sie Informationen dazu, welche Zeitlimitwerte für die verschiedenen Komponenten des API-Anfrageflusses über Apigee Edge festgelegt werden sollten.
- Legen Sie in der Clientanwendung ein geeignetes Zeitlimit gemäß den Best Practices fest.
Wenn das Problem weiterhin besteht, lesen Sie den Abschnitt Diagnoseinformationen müssen erfasst werden .
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem weiterhin besteht, stellen Sie die folgenden Diagnoseinformationen zusammen und wenden Sie sich an den Apigee Edge-Support.
Wenn Sie ein Nutzer der öffentlichen Cloud sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- API-Proxy-Name
- Schließen Sie den Befehl
curl
ab, um den Zeitüberschreitungsfehler zu reproduzieren. - Ablaufverfolgungsdatei für die API-Anfragen, bei denen Client-Zeitüberschreitungsfehler auftreten
Wenn Sie ein Nutzer der Private Cloud sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Ablaufverfolgungsdatei für die API-Anfragen, bei denen Client-Zeitüberschreitungsfehler auftreten
- NGINX-Zugriffslogs (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - Systemprotokolle von Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log
)