Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
Die Clientanwendung erhält als Antwort auf API-Aufrufe den HTTP-Statuscode 504 mit der Meldung "Gateway Timeout".
Diese Fehlerantwort zeigt an, dass der Client während der Ausführung eines API-Aufrufs keine rechtzeitige Antwort von Apigee Edge oder dem Back-End-Server erhalten hat.
Fehlermeldung
Die Clientanwendung empfängt den folgenden Antwortcode:
HTTP/1.1 504 Gateway Timeout
Auf diesen Code kann eine Fehlermeldung wie die folgende folgen:
<html> <head><title>504 Gateway Timeout</title></head> <body bgcolor="white"> <center><h1>504 Gateway Timeout</h1></center> </body> </html>
Was führt zu Gateway-Zeitüberschreitungen?
Der typische Pfad für eine API-Anfrage über Apigee Edge ist Client -> Router -> Nachrichtenprozessor -> Back-End-Server, wie in der folgenden Abbildung dargestellt:
Die Clientanwendung, Router und Message Processorn werden mit geeigneten Timeout-Werten konfiguriert. Apigee Edge erwartet für jede API-Anfrage innerhalb eines Zeitraums basierend auf den Zeitlimitwerten eine Antwort. Wenn die Antwort nicht innerhalb des angegebenen Zeitraums empfangen wird, wird die Antwort „504 Gateway Timeout“ zurückgegeben.
Mögliche Ursachen
In Apigee Edge ist die typische Ursache für eine 504-Gateway-Zeitüberschreitungsantwort vom Back-End-Server:
Ursache | Beschreibung | Anleitung zur Fehlerbehebung für |
---|---|---|
Back-End-Server antwortet mit Zeitlimit 504 für Gateway | Der Back-End-Server überschreitet das Zeitlimit und gibt eine 504 Gateway-Zeitüberschreitung an den Message Processor zurück. | Private Edge-Nutzer und Nutzer öffentlicher Clouds |
Back-End-Server antwortet mit Zeitlimit 504 für Gateway
Der Back-End-Server kann den HTTP-Antwortcode „504 Gateway Timeout“ zurückgeben.
Diagnose
In diesem Abschnitt wird erläutert, wie Sie das Zeitlimit eines 504-Gateways korrekt diagnostizieren. Die Verfahren für Nutzer der privaten und öffentlichen Cloud sind aufgeführt.
Prozedur 1: Trace verwenden (Nutzer von privaten und öffentlichen Clouds)
- Aktivieren Sie Trace in der Apigee-UI für die betroffene API.
- Senden Sie eine Anfrage an den Back-End-Server.
- Wenn die fehlgeschlagene API-Anfrage eine 504-Antwort vom Back-End-Server in Trace anzeigt, ist die Ursache für die 504-Gateway-Zeitüberschreitung der Back-End-Server.
- Klicken Sie zum Ermitteln der Antwortzeit in Trace auf die Phase Antwort vom Zielserver erhalten. Im gezeigten Beispiel beträgt die verstrichene Zeit 60.004 ms:
Der Abschnitt Phasendetails enthält zusätzliche Informationen:
- Es hebt die vom Back-End-Server empfangene Antwort 504 Gateway Timeout hervor.
- Der Abschnitt Antwortinhalt zeigt den vollständigen Text der Antwort vom Back-End-Server an. Wie bereits erwähnt, können sich das Format und der Inhalt der Antwortnutzlast je nach Back-End-Serverimplementierung unterscheiden.
- Im Abschnitt Antwortheader > Server kann angegeben werden, woher die Antwort stammt.
- Zum Aufrufen der Analytics-Daten und Bestätigen der Diagnose klicken Sie in Trace auf die Phase Aufgezeichnete Analytics-Daten, wie in der folgenden Abbildung dargestellt:
Im Abschnitt Response Headers der Phasendetails werden die Werte von
X-Apigee-fault-code
undX-Apigee-fault-source
angezeigt, wie in der folgenden Abbildung dargestellt:Wenn diese Felder die in der folgenden Tabelle aufgeführten Werte enthalten, stammt die Fehlerantwort 504 vom Back-End-Server:
Antwortheader Wert X-Apigee-fault-source Ziel X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode -
Prüfen Sie, ob eine
Proxy-Verkettung vorliegt. Führen Sie die folgenden Schritte aus, um festzustellen, ob der Back-End-Server einen anderen Proxy in Apigee aufruft:
- Gehen Sie zurück zur Phase Anfrage an Zielserver gesendet und klicken Sie auf die Schaltfläche Curl anzeigen, um den Host-Alias des Back-End-Servers zu sehen.
- Wenn der Hostalias des Back-End-Servers auf einen virtuellen Hostalias verweist, ist die Proxyverkettung vorhanden. Wiederholen Sie die obigen Schritte für jeden verketteten Proxy, um die Ursache der Fehlerantwort „504 Gateway Timeout“ zu diagnostizieren. 504 Gateway-Zeitüberschreitungen, die in verketteten Proxys in anderen Phasen des Anfrage-/Antwortzyklus auftreten, können mit diesem Playbook diagnostiziert werden.
- Wenn der Hostalias des Back-End-Servers auf den Back-End-Server verweist, fahre mit der Lösung fort.
Verfahren 2: Back-End-Server-API direkt aufrufen (Nutzer von öffentlichen und privaten Clouds)
Rufen Sie den Back-End-Server direkt auf, um dasselbe Antwortverhalten für die Zeitüberschreitung des 504-Gateways zu bestätigen, das bei der Anfrage über Apigee Edge auftritt.
- Prüfen Sie, ob Sie alle erforderlichen Header, Abfrageparameter und Anmeldedaten haben, die als Teil der Anfrage an den Back-End-Server übergeben werden müssen.
- Wenn der Back-End-Dienst öffentlich zugänglich ist, können Sie den Befehl
curl
, Postman oder einen anderen REST-Client verwenden und die Back-End-Server-API direkt aufrufen. - Wenn der Back-End-Server nur von den Message Processorn aus zugänglich ist, verwenden Sie den Befehl
curl
, Postman oder einen anderen REST-Client, um die Back-End-Server-API direkt vom Message Processor aus aufzurufen. - Wenn der Back-End-Dienst eine 504-Gateway-Zeitüberschreitungsantwort zurückgibt, fahren Sie mit Lösung fort.
Verfahren 3: NGINX-Zugriffslogs prüfen (nur Private Cloud-Nutzer)
Mit NGINX-Zugriffslogs können Sie feststellen, ob die Fehlerantwort 504 vom Back-End-Server gesendet wurde. Dies ist besonders nützlich, wenn das Problem in der Vergangenheit aufgetreten ist, zeitweise auftritt oder nicht in Trace erfasst werden kann. So prüfen Sie die NGINX-Zugriffslogs:
- Rufen Sie die NGINX-Zugriffslogs mit dem folgenden Befehl auf:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- Suchen Sie nach 504-Fehlerantworten für den betroffenen API-Proxy. Sie können einen bestimmten Zeitraum prüfen, wenn das Problem in der Vergangenheit aufgetreten ist, oder feststellen, ob bei Anfragen immer noch ein 504-Fehler zurückgegeben wird.
- Wenn es 504-Fehlerantworten gibt, prüfen Sie, ob die Fehlerantwort vom Back-End-Server stammt.
- Überprüfen Sie den betroffenen API-Proxy auf Proxy-Verkettung, d.h., der Back-End-Server/Zielendpunkt ruft einen anderen Proxy in Apigee auf. Wenn der API-Proxy Proxy-Verkettung verwendet, wiederholen Sie die oben genannten Schritte für jeden verketteten Proxy, um die Ursache der Fehlerantwort „504 Gateway-Zeitüberschreitung“ zu diagnostizieren. 504 Gateway-Zeitüberschreitungen, die in verketteten Proxys in anderen Phasen auftreten, können mit diesem Playbook diagnostiziert werden.
- Wenn keine Proxy-Verkettung vorhanden ist und die Fehlerantwort 504 vom Back-End-Server stammt, fahren Sie mit der Lösung fort.
Die folgende Abbildung zeigt ein Beispiel für einen NGINX-Logeintrag, in dem eine vom Zielserver ausgelöste Fehlerantwort 504 angezeigt wird:
Wenn die Felder X-Apigee-fault-source
und X-Apigee-fault-code
die in der folgenden Tabelle aufgeführten Werte enthalten, stammt die 504-Antwort vom Back-End-Server:
Antwortheader | Wert |
---|---|
X-Apigee-fault-source | Ziel |
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
Prozedur 4: API-Monitoring verwenden (nur Public Cloud-Nutzer)
Mit API-Monitoring können Sie Problembereiche schnell isolieren, um Fehler-, Leistungs- und Latenzprobleme und deren Quelle zu diagnostizieren, z. B. Entwickleranwendungen, API-Proxys, Back-End-Ziele oder die API-Plattform.
Gehen Sie ein Beispielszenario durch, in dem gezeigt wird, wie Sie 5xx-Probleme mit Ihren APIs mithilfe von API Monitoring beheben können. Richten Sie beispielsweise eine Benachrichtigung ein, damit Administratoren benachrichtigt werden, wenn die Anzahl der 504-Statuscodes einen bestimmten Grenzwert überschreitet.
Auflösung
Mithilfe der oben beschriebenen Diagnoseverfahren können Sie mit dem Back-End-Serverteam zusammenarbeiten, um das Problem auf dem Back-End-Server zu beheben. Dies kann auch das Anpassen von Zeitüberschreitungen auf den Back-End-Servern oder Zeitüberschreitungen in Load-Balancern vor den Zielservern umfassen.
Diagnosedaten erfassen
Wenn das Problem weiterhin besteht, senden Sie die folgenden Diagnoseinformationen an den Apigee-Support.
Wenn Sie die öffentliche Cloud nutzen, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- API-Proxy-Name
- Vollständiger
curl
-Befehl zum Reproduzieren der Fehlerantwort 504 - Ablaufverfolgungsdatei mit API-Anfragen, die die Fehlermeldung 504 Gateway-Zeitüberschreitung erhalten
Wenn Sie die private Cloud nutzen, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Ablaufverfolgungsdatei mit API-Anfragen, die die Fehlerantwort 504 Gateway Timeout erhalten
- NGINX-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- Message Processor-Logs
/opt/apigee/var/log/edge-message-processor/logs/system.log