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

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:

API-Anfragepfad

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)

  1. Aktivieren Sie Trace in der Apigee-UI für die betroffene API.
  2. Senden Sie eine Anfrage an den Back-End-Server.
  3. 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.
  4. 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:

    Phasendetails aus der Benutzeroberfläche

    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.
  5. 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:

    Analysedetails aus Trace

    Im Abschnitt Response Headers 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 aus der Benutzeroberfläche

    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
  6. 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:
    1. 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.
    2. 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.
    3. 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. Rufen Sie die NGINX-Zugriffslogs mit dem folgenden 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 bei Anfragen immer noch ein 504-Fehler zurückgegeben wird.
  3. Wenn es 504-Fehlerantworten gibt, prüfen Sie, ob die Fehlerantwort vom Back-End-Server stammt.
  4. Die folgende Abbildung zeigt ein Beispiel für einen NGINX-Logeintrag, in dem eine vom Zielserver ausgelöste Fehlerantwort 504 angezeigt wird:

    Nginx-Beispiellogs

    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
  5. Ü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.
  6. Wenn keine Proxy-Verkettung vorhanden ist und die Fehlerantwort 504 vom Back-End-Server stammt, fahren Sie mit der Lösung fort.

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