504-Fehler – Gateway-Zeitüberschreitung vom Back-End-Server

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Symptom

Die Clientanwendung erhält als Antwort auf API-Aufrufe einen HTTP-Statuscode 504 mit der Meldung "Gateway Timeout".

Diese Fehlerantwort gibt an, dass der Client während der Ausführung eines API-Aufrufs keine zeitnahe Antwort von Apigee Edge oder dem Backend-Server erhalten hat.

Fehlermeldung

Die Clientanwendung erhält den folgenden Antwortcode:

HTTP/1.1 504 Gateway Timeout

Auf diesen Code kann eine Fehlermeldung folgen, die der folgenden ähnelt:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

Was verursacht Gateway-Zeitüberschreitungen?

Der typische Pfad für eine API-Anfrage über Apigee Edge ist Client -> Router -> Message Processor -> Backend-Server, wie in der folgenden Abbildung dargestellt:

API-Anfragepfad

Die Clientanwendung, Router und Message Processors sind mit geeigneten Zeitüberschreitungswerten konfiguriert. Apigee Edge erwartet für jede API-Anfrage innerhalb eines Zeitraums eine Antwort, die auf den Zeitüberschreitungswerten basiert. Wenn die Antwort nicht innerhalb des angegebenen Zeitraums eingeht, wird eine 504 Gateway-Zeitüberschreitungsantwort zurückgegeben.

Mögliche Ursachen

In Apigee Edge ist die typische Ursache für eine 504 Gateway-Zeitüberschreitungsantwort vom Backend-Server folgende:

Ursache Beschreibung Anleitung zur Fehlerbehebung für
Backend-Server antwortet mit 504 Gateway-Zeitüberschreitung Auf dem Backend-Server tritt eine Zeitüberschreitung auf und er gibt eine 504 Gateway-Zeitüberschreitungsantwort an den Message Processor zurück. Edge Private und Public Cloud-Nutzer

Backend-Server antwortet mit 504 Gateway-Zeitüberschreitung

Der Backend-Server antwortet möglicherweise mit dem HTTP-Antwortcode 504 Gateway-Zeitüberschreitung.

Diagnose

In diesem Abschnitt wird erläutert, wie Sie eine 504 Gateway-Zeitüberschreitung richtig diagnostizieren. Es werden Verfahren für Private und Public Cloud-Nutzer aufgeführt.

Verfahren 1: Trace verwenden (Private und Public Cloud-Nutzer)

  1. Aktivieren Sie Trace in der Apigee-UI für die betroffene API.
  2. Senden Sie eine Anfrage an den Backend-Server.
  3. Wenn die fehlerhafte API-Anfrage in Trace eine 504-Antwort vom Backend-Server zeigt, ist der Backend-Server die Ursache für die 504 Gateway-Zeitüberschreitung.
  4. Klicken Sie in Trace auf die Phase Response received from target server (Antwort vom Zielserver erhalten), um die Antwortzeit zu ermitteln. Im gezeigten Beispiel beträgt die verstrichene Zeit 60004 ms:

    Phasendetails über die Benutzeroberfläche

    Der Abschnitt „Phase Details“ (Phasendetails) enthält zusätzliche Informationen:

    • Er hebt die Antwort 504 Gateway Timeout (504 Gateway-Zeitüberschreitung) hervor, die vom Backend-Server empfangen wurde.
    • Im Abschnitt Response Content (Antwortinhalt) wird der vollständige Text der Antwort vom Backend-Server angezeigt. Wie bereits erwähnt, können sich Format und Inhalt der Antwortnutzlast je nach Implementierung des Backend-Servers unterscheiden.
    • Der Abschnitt Response Header > Server (Antwortheader > Server) kann angeben, woher die Antwort stammt.
  5. Klicken Sie in Trace auf die Phase Analytics Data Recorded (Analytics-Daten erfasst), wie in der folgenden Abbildung dargestellt, um Analytics-Daten aufzurufen und die Diagnose zu bestätigen:

    Analysedetails aus dem Trace

    Im Abschnitt Response Headers (Antwortheader) der Phasendetails werden die Werte von X-Apigee-fault-code und X-Apigee-fault-source angezeigt, wie in der folgenden Abbildung dargestellt:

    Details zur Analysephase über die Benutzeroberfläche

    Wenn diese Felder die in der folgenden Tabelle gezeigten Werte enthalten, stammt die 504-Fehlerantwort vom Backend-Server:

    Antwortheader Wert
    X-Apigee-fault-source Ziel
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Prüfen Sie, ob eine Proxy-Verkettung vorliegt. So stellen Sie fest, ob der Backend-Server einen anderen Proxy in Apigee aufruft:
    1. Gehen Sie zurück zur Phase Request sent to target server (Anfrage an Zielserver gesendet) und klicken Sie auf die Schaltfläche Show Curl (Curl anzeigen), um den Hostalias des Backend-Servers aufzurufen.
    2. Wenn der Hostalias des Backend-Servers auf einen Alias des virtuellen Hosts verweist, ist die Proxy-Verkettung aktiv. Wiederholen Sie die oben genannten Schritte für jeden verketteten Proxy, um die Ursache der 504 Gateway Zeitüberschreitungsantwort zu diagnostizieren. 504 Gateway-Zeitüberschreitungen, die in verketteten Proxys in anderen Phasen des Anfrage-/Antwortzyklus auftreten, können mit diesem Playbook diagnostiziert werden.
    3. Wenn der Hostalias des Backend-Servers auf den Backend-Server verweist, fahren Sie mit der Auflösung fort.

Verfahren 2: API des Backend-Servers direkt aufrufen (Public und Private Cloud-Nutzer)

Rufen Sie den Backend-Server direkt auf, um zu bestätigen, dass das gleiche Verhalten bei der 504 Gateway-Zeitüberschreitungsantwort auftritt, wenn die Anfrage über Apigee Edge erfolgt.

  1. Achten Sie darauf, dass Sie alle erforderlichen Header, Abfrageparameter und Anmeldedaten haben, die Sie im Rahmen der Anfrage an den Backend-Server übergeben müssen.
  2. Wenn der Backend-Dienst öffentlich zugänglich ist, können Sie den curl Befehl, Postman oder einen anderen REST-Client verwenden und die API des Backend-Servers direkt aufrufen.
  3. Wenn der Backend-Server nur über die Message Processors zugänglich ist, verwenden Sie den curl Befehl, Postman oder einen anderen REST-Client, um die API des Backend-Servers direkt vom Message Processor aufzurufen.
  4. Wenn der Backend-Dienst eine 504 Gateway-Zeitüberschreitungsantwort zurückgibt, fahren Sie mit der Auflösung fort.

Verfahren 3: NGINX-Zugriffslogs prüfen (nur Private Cloud-Nutzer)

Anhand von NGINX-Zugriffslogs lässt sich feststellen, ob die 504-Fehlerantwort vom Backend-Server gesendet wurde. Dies ist besonders nützlich, wenn das Problem in der Vergangenheit aufgetreten ist, nur zeitweise auftritt oder nicht in Trace erfasst werden kann. So prüfen Sie die NGINX-Zugriffslogs:

  1. Rufen Sie die NGINX-Zugriffslogs mit diesem Befehl auf:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. 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 Anfragen weiterhin mit einer 504-Fehlerantwort fehlschlagen.
  3. Wenn 504-Fehlerantworten vorhanden sind, stellen Sie fest, ob die Fehlerantwort vom Backend-Server stammt.
  4. Die folgende Abbildung zeigt ein Beispiel für einen NGINX-Logeintrag mit einer 504-Fehlerantwort, die vom Zielserver verursacht wurde:

    Beispiel-Nginx-Logs

    Wenn die X-Apigee-fault-source und X-Apigee-fault-code Felder die in der folgenden Tabelle gezeigten Werte enthalten, stammt die 504-Antwort vom Backend-Server:

    Antwortheader Wert
    X-Apigee-fault-source Ziel
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Prüfen Sie den betroffenen API-Proxy auf Proxy-Verkettung Das bedeutet, dass der Backend-Server/Zielendpunkt einen anderen Proxy in Apigee aufruft. Wenn der API-Proxy die Proxy-Verkettung verwendet, wiederholen Sie die oben genannten Schritte für jeden verketteten Proxy, um die Ursache der 504 Gateway-Zeitüberschreitungsantwort zu diagnostizieren. 504 Gateway-Zeitüberschreitungen, die in verketteten Proxys in anderen Phasen auftreten, können mit diesem Playbook diagnostiziert werden. Verwendung von diesem Playbook.
  6. Wenn keine Proxy-Verkettung vorliegt und die 504-Fehlerantwort vom Backend-Server stammt, fahren Sie mit der Auflösung fort.

Verfahren 4: API Monitoring verwenden (nur Public Cloud-Nutzer)

API Monitoring ermöglicht Ihnen, Problembereiche schnell zu isolieren, um Fehler, Leistungs- und Latenzprobleme sowie deren Ursachen wie Entwickler-Apps, API-Proxys, Backend-Ziele oder die API-Plattform zu diagnostizieren.

Sehen Sie sich ein Beispielszenario an in dem gezeigt wird, wie Sie 5xx-Probleme mit Ihren APIs mithilfe von API Monitoring beheben. Sie können beispielsweise eine Benachrichtigung einrichten, um Administratoren zu benachrichtigen, wenn die Anzahl der 504-Statuscodes einen bestimmten Schwellenwert überschreitet.

fest.

Auflösung

Mit den oben beschriebenen Diagnoseverfahren können Sie mit dem Backend-Serverteam zusammenarbeiten, um das Problem auf dem Backend-Server zu beheben. Dazu gehört möglicherweise das Anpassen von Zeitüberschreitungen auf den Backend-Servern oder Zeitüberschreitungen in Load-Balancern vor den Zielservern.

Diagnoseinformationen erfassen

Wenn das Problem weiterhin besteht, geben Sie die folgenden Diagnoseinformationen an den Apigee-Support weiter.

Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Name der Organisation
  • Umgebungsname
  • Name des API-Proxys
  • Vollständiger curl Befehl, der zum Reproduzieren der 504-Fehlerantwort verwendet wurde
  • Trace-Datei mit API-Anfragen, die eine 504 Gateway-Zeitüberschreitungsantwort erhalten

Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
  • Umgebungsname
  • API-Proxy-Bundle
  • Trace-Datei mit API-Anfragen, die eine 504 Gateway-Zeitüberschreitungsantwort 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