<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Symptom
Die Clientanwendung erhält den HTTP-Antwortstatus 503
mit der Nachricht
Service Unavailable
nach einem API-Proxy-Aufruf.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 503 Service Unavailable
Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable" } } }
Mögliche Ursachen
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Zielserver trennt die Verbindung vorzeitig | Der Zielserver beendet die Verbindung vorzeitig, während der Message Processor noch aktiv ist. das Senden der Anfragenutzlast. | Edge-Nutzer von öffentlichen und privaten Clouds |
Allgemeine Diagnoseschritte
Nachrichten-ID der fehlgeschlagenen Anfrage ermitteln
Trace-Tool
So ermitteln Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mithilfe des Trace-Tools:
- Wenn das Problem weiterhin besteht, aktivieren Sie die Option Trace-Sitzung für die betroffene API.
- API-Aufruf ausführen und Problem reproduzieren –
503 Service Unavailable
mit Fehlercodemessaging.adaptors.http.flow.ServiceUnavailable.
- Wählen Sie eine der fehlgeschlagenen Anfragen aus.
- Wechseln Sie zur AX-Phase und bestimmen Sie die Nachrichten-ID.
(
X-Apigee.Message-ID
) der Anfrage hinzu, indem Sie in der Phase Details (Phasendetails), wie in der folgenden Abbildung dargestellt.
NGINX-Zugriffslogs
So ermitteln Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mithilfe der NGINX-Zugriffslogs:
Sie können auch in NGINX-Zugriffslogs die Nachrichten-ID für die 503
-Fehler ermitteln.
Dies ist besonders nützlich, wenn das Problem in der Vergangenheit aufgetreten ist oder zeitweise auftritt.
und Sie können den Trace
nicht in der Benutzeroberfläche erfassen. Führen Sie die folgenden Schritte aus, um diese Informationen aus den NGINX-Zugriffslogs zu ermitteln:
- Prüfen Sie die NGINX-Zugriffslogs: (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - Suchen Sie nach
503
-Fehlern für den spezifischen API-Proxy während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) oder wenn immer noch Anfragen mit503
fehlschlagen. - Wenn
503
-Fehler mit X-Apigee-fail-code Messaging.adaptors.http.flow.ServiceUnavailable vorliegen, Notieren Sie sich die Nachrichten-ID für eine oder mehrere Anfragen, wie im folgenden Beispiel gezeigt:Beispieleintrag mit dem Fehler
503
Ursache: Zielserver trennt die Verbindung vorzeitig
Diagnose
- Wenn Sie ein Public Cloud- oder Private Cloud-Nutzer sind:
<ph type="x-smartling-placeholder">
- </ph>
- Das Trace-Tool verwenden (wie unter Allgemeine Diagnoseschritte erläutert)
Prüfen Sie, ob im Bereich Aufgezeichnete Analytics-Daten die beiden folgenden Einstellungen festgelegt sind:
<ph type="x-smartling-placeholder">
- </ph>
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable
- X-Apigee.fault-source:
target
- X-Apigee.fault-code:
- Das Trace-Tool verwenden (wie unter Allgemeine Diagnoseschritte erläutert)
und prüfen Sie, ob die beiden folgenden Einstellungen direkt nach dem Erstellen im Bereich Fehler
die
TARGET_REQ_FLOW
-Property state:- .
- error.class::
com.apigee.errors.http.server.ServiceUnavailableException
- error.cause:
Broken pipe
- error.class::
- Weitere Informationen finden Sie unter tcpdump verwenden.
- Das Trace-Tool verwenden (wie unter Allgemeine Diagnoseschritte erläutert)
Prüfen Sie, ob im Bereich Aufgezeichnete Analytics-Daten die beiden folgenden Einstellungen festgelegt sind:
<ph type="x-smartling-placeholder">
- Wenn Sie ein Private Cloud-Nutzer sind:
<ph type="x-smartling-placeholder">
- </ph>
- <ph type="x-smartling-placeholder"></ph> Ermitteln Sie die Nachrichten-ID der fehlgeschlagenen Anfrage.
- Suchen Sie im Message Processor-Protokoll nach der Nachrichten-ID.
(
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - Es wird eine der folgenden Ausnahmen angezeigt:
Ausnahme 1: java.io.IOException: Eine fehlerhafte Pipe ist beim Schreiben in den Kanal „ClientOutputChannel“ aufgetreten
2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy rev:1 messageid:myorg-opdk-test-1-30312-13747-1 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1 bytesRead=0 bytesWritten=76295 age=2012ms lastIO=2ms isOpen=false)
oder
Ausnahme 2: onExceptionWrite-Ausnahme: {}
java.io.IOException: Fehlerhafte Pipe2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() : ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms lastIO=2 ms isOpen=false.onExceptionWrite exception: {} java.io.IOException: Broken pipe
- Beide Ausnahmen zeigen an, dass während der Message Processor
an den Back-End-Server sendet, wurde die Verbindung vom
Back-End-Server. Daher löst der Message Processor die Ausnahme
java.io.IOException: Broken pipe
aus. Remote:IP:PORT
gibt den aufgelösten Backend-Server an. IP-Adresse und Portnummer.- Das Attribut
bytesWritten=76295
in der obigen Fehlermeldung gibt an, dass der Message Processor eine Nutzlast von76295
Byte an das Back-End gesendet hat wenn die Verbindung vorzeitig beendet wurde. - Das Attribut
bytesRead=0
gibt an, dass der Message Processor hat Daten (Antwort) vom Back-End-Server empfangen. - Um dieses Problem weiter zu untersuchen, erfassen Sie ein
tcpdump
im Back-End. Message Processor und analysiert sie wie unten beschrieben.
„tcpdump“ verwenden
-
Erfasse ein
tcpdump
auf dem Backend-Server oder dem Message Processor mit die folgenden Befehle:Befehl zum Abrufen von
tcpdump
auf dem Back-End-Server:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Befehl zum Erfassen von
tcpdump
im Message Processor:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Analysieren Sie die erfassten
tcpdump
:tcpdump-Beispielausgabe (im Message Processor erfasst):
In der
tcpdump
oben sehen Sie Folgendes:- Im Paket
4
hat der Message Processor einePOST
-Anfrage an auf dem Back-End-Server. - Im Paket
5
,8
,9
,10
11
, hat der Message Processor die Nutzlast der Anfrage weiterhin an die Back-End-Server. - In den Paketen
6
und7
hat der Backend-Server geantwortet mitACK
für einen Teil der vom Message Processor empfangenen Anfragenutzlast. - Im Paket
12
antworten Sie jedoch nicht mit einemACK
. für die empfangenen Anwendungsdatenpakete und antwortet mit der Antwort verwendet, antwortet der Back-End-Server mit einemFIN ACK
, wodurch Schließung der Verbindung. - Dies zeigt deutlich, dass der Backend-Server die Verbindung vorzeitig beendet. während der Message Processor noch die Nutzlast der Anfrage sendete.
- Dies führt dazu, dass der Message Processor ein
IOException: Broken Pipe
aufzeichnet. Fehler und gibt503
an den Client zurück
- Im Paket
Auflösung
- Analysieren und korrigieren Sie gemeinsam mit Ihrem Anwendungs- oder Ihrem Netzwerkteam die vorzeitige Verbindungstrennung aufseiten des Back-End-Servers verursacht.
- Achten Sie darauf, dass die Backend-Serveranwendung keine Zeitüberschreitung auslöst oder die Verbindung zurücksetzt bevor die gesamte Nutzlast der Anfrage empfangen wird.
- Wenn zwischen Apigee und Back-End-Server ein Netzwerkgerät oder eine Netzwerkschicht zwischengeschaltet ist, und stellen Sie sicher, dass keine Zeitüberschreitung auftritt, bevor die gesamte Nutzlast der Anfrage empfangen wurde.
Wenn das Problem weiterhin besteht, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:
Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- API-Proxy-Name
- Führen Sie den
curl
-Befehl aus, um den503
-Fehler zu reproduzieren - Ablaufverfolgungsdatei mit der Anfrage mit dem Fehler
503 Service Unavailable
- Falls die
503
Fehler derzeit nicht auftreten, geben Sie den Zeitraum mit Die Zeitzoneninformationen, wenn503
Fehler in der Vergangenheit aufgetreten sind.
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für fehlgeschlagene Anfragen
- Organisation, Umgebungsname und API-Proxy-Name, den Sie beobachten
503
Fehler - API-Proxy-Bundle
- Ablaufdatei mit den Anfragen mit dem Fehler
503 Service Unavailable
- 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
- Der Zeitraum mit den Zeitzoneninformationen, in dem die
503
-Fehler aufgetreten sind Tcpdumps
wurde auf den Message Processors und dem Backend-Server erfasst, wenn der Fehler aufgetreten