504 Gateway-Zeitüberschreitung – Ziellesezeitüberschreitung

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptom

Dieses Problem wird als Gateway Timeout-Fehler mit dem HTTP-Status 504 angezeigt.

Fehlermeldung

Dieser Fehler kann in API-Monitoring, Debugging oder anderen Tools angezeigt werden. Der Grund TARGET_READ_TIMEOUT gibt an, dass die Apigee-Laufzeit während der Ausführung einer Anfrage keine zeitnahe Antwort vom Ziel erhalten hat.

Der Standardwert für das Zeitlimit für Lesevorgänge (io.timeout.millis) beträgt 55 Sekunden. Wenn also das Ziel nach 55 Sekunden nicht antwortet, gibt Apigee diesen Fehler aus:

{"fault":{"faultstring":"Gateway Timeout",
  "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
  "reason":"TARGET_READ_TIMEOUT"}}}

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Langsames Ziel Das Ziel reagiert nicht rechtzeitig. Apigee X und Apigee Hybrid
TargetServer-Verbindungsproblem Es gibt ein allgemeines Verbindungsproblem mit dem Ziel, wenn <LoadBalancer> auf dem TargetEndpoint konfiguriert ist. Apigee X und Apigee Hybrid

Ursache: Langsames Ziel

Diagnose

Sie können ein langsames Zielproblem mit dem Debug-Tool von Apigee diagnostizieren:

  1. Erstellen Sie eine Fehlerbehebungssitzung für Ihren API-Proxy.
  2. Senden Sie in der Debugging-Sitzung eine Anfrage und prüfen Sie die Debugging-Ausgabe.

Wie Sie im obigen Beispiel sehen, hat die Zielanfrage 55 Sekunden überschritten. Dies ist das standardmäßige Zielzeitlimit. Das Zeitlimit kann konfiguriert werden. Wenn Sie das Zeitlimit geändert haben, entspricht die Dauer der Zielanfrage dem von Ihnen festgelegten Zeitlimit. Wenn Ihr Zeitlimit beispielsweise 10 Sekunden beträgt, wird in diesem Szenario eine Zielanfrage nach 10 Sekunden überschritten. Ein solches "langsames Ziel"-Verhalten ist ein klarer Hinweis darauf, dass das Ziel auf eine Anfrage nicht rechtzeitig reagiert.

Lösung

Apigee empfiehlt, langsame Ziele zu vermeiden. Wenn die normale Ziellatenz beispielsweise 50 ms beträgt und eine Latenz von 55.000 ms auftritt, müssen Sie möglicherweise untersuchen, ob ein Problem mit dem Ziel vorliegt.

Wenn Sie das Zeitlimit erhöhen müssen, gehen Sie so vor:

  1. Wählen Sie im Proxy-Editor den Tab Entwickeln.
  2. Wählen Sie im Navigationsbereich den betroffenen Zielendpunkt aus.
  3. Suchen Sie im XML-Editor nach dem XML-Element HTTPTargetConnection:

  4. Fügen Sie das Attribut io.timeout.millis unter dem Element <HTTPTargetConnection> hinzu und geben Sie das neue Zeitlimit in Millisekunden an. Beispiel:
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    Im obigen Beispiel wird das Zeitlimit auf 120 Sekunden erhöht. Beachten Sie, dass das Höchstlimit 300 Sekunden ist. Weitere Informationen finden Sie in der Referenz zu Endpunktattributen.

  5. Speichern Sie die neue Überarbeitung und stellen Sie den Proxy bereit.

Wenn das Problem weiterhin besteht, lesen Sie unten den Abschnitt Erfassen von Diagnoseinformationen erforderlich.

Ursache: TargetServer-Verbindungsproblem

Diagnose

Apigee zeigt die genaue Ursache eines Konnektivitätsproblems nicht an, wenn Sie das Endpunktattribut <LoadBalancer> konfigurieren. Möglicherweise können Sie die Ursache eines Konnektivitätsproblems jedoch anhand der verstrichenen Zeit der Zielanfrage ableiten. Als Debugging-Methode können Sie versuchen, das Element <LoadBalancer> vollständig zu entfernen und das Ziel direkt im Proxy zu erreichen.

Verwenden Sie das Debug-Tool, um das Problem zu diagnostizieren.

  1. Erstellen Sie eine Fehlerbehebungssitzung für Ihren API-Proxy.
  2. Senden Sie in der Debugging-Sitzung eine Anfrage und prüfen Sie die Debugging-Ausgabe.

Im obigen Beispiel hat es neun Sekunden gedauert, bis eine Zeitüberschreitung aufgetreten ist. Da es nicht 55 Sekunden beträgt, wissen Sie, dass die Ursache des Fehlers nicht darin besteht, dass das Zeitlimit aufgrund eines langsamen Ziels überschritten wurde. Standardmäßig wiederholt Apigee eine Verbindung zweimal zusätzlich, wenn das Element <LoadBalancer> auf dem TargetEndpoint verwendet wird. Da Sie wissen, dass die Verbindung insgesamt dreimal versucht wurde und das Standardzeitlimit für einen Verbindungsfehler drei Sekunden beträgt (connect.timeout.millis), können Sie annehmen, dass es sich um ein Konnektivitätsproblem handelt.

Lösung

Wenn das Problem eine Zeitüberschreitung bei der Verbindung ist, lesen Sie den Abschnitt Fehler „VPC-Peering 503-Dienst nicht verfügbar mit TARGET_CONNECT_TIMEOUT”.

Entfernen Sie bei anderen Problemen das Element <LoadBalancer>, um Fehler zu beheben und den genauen Fehlercode anzuzeigen, und suchen Sie im Fehlerkatalog nach dem Code.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Google Cloud-Support:

  1. Projekt-ID und Name der Apigee-Organisation
  2. Proxyname(n) und die Umgebung.
  3. Zeitraum des Problems.
  4. Häufigkeit des Problems
  5. Ziel-Hostname
  6. Fehlerbehebungssitzung mit dem Problem.