Sie lesen gerade die Apigee Edge -Dokumentation.
Zur
Apigee X -Dokumentation. info
Symptom
Die Clientanwendung erhält als Antwort auf API-Aufrufe den HTTP-Statuscode 502 mit der Meldung "Fehlerhaftes Gateway".
Der HTTP-Statuscode 502 bedeutet, dass der Client keine gültige Antwort von den Backend-Servern erhält, die die Anfrage eigentlich ausführen sollten.
Fehlermeldungen
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 502 Bad Gateway
Außerdem können die folgenden Fehlermeldungen angezeigt werden:
<html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Wenn der Fehler vom Backend-Server stammt, sehen Sie möglicherweise Folgendes. Die Fehlermeldung vom Backend hängt vollständig von der Implementierung ab.
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
Mögliche Ursachen
Hier sind einige mögliche Ursachen für den Fehler 502 (Fehlerhaftes Gateway) bei APIs, die über Apigee Edge laufen:
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
| Keine Message Processors im Pool verfügbar | Dieser Fehler tritt auf, wenn alle Message Processors im Pool nicht verfügbar sind, d. h. sie sind entweder ausgefallen oder beschäftigt und antworten daher nicht. | Edge Private Cloud-Nutzer |
| Falsche SSL-Konfiguration zwischen Routern und Message Processors | Dieser Fehler tritt auf, wenn das vom Client von der Zertifizierungsstelle signierte Root-Zertifikat im Truststore des Edge-Routers fehlt. | Edge Private Cloud-Nutzer |
| Fehler vom Backend-Server | Dieser Fehler tritt auf, wenn der Backend-Server ausfällt und diese Antwort sendet. | Edge Public und Private Cloud-Nutzer |
Ursache: Keine Message Processors im Pool verfügbar
Dieser Fehler tritt auf, wenn der Router feststellt, dass alle Message Processors in einer bestimmten Region/einem bestimmten Rechenzentrum nicht verfügbar sind (z. B. wenn sie alle ausgefallen sind).
Apigee Edge ist so konfiguriert, dass der eingehende API-Traffic (Anfragen) in einer bestimmten Region/einem bestimmten Rechenzentrum immer von den Routern zu den Message Processors in derselben Region/demselben Rechenzentrum weitergeleitet wird. In einigen Fällen werden Apigee Edge-Komponenten nur in einer Region/einem Rechenzentrum eingerichtet, in anderen Fällen in mehreren Regionen/Rechenzentren. In jeder Region/jedem Rechenzentrum werden zwei oder mehr Router und Message Processors konfiguriert.
Diagnose
- Bestimmen Sie die Region(en)/das Rechenzentrum (die Rechenzentren), in denen die API-Anfragen mit dem Fehler 502 (Fehlerhaftes Gateway) fehlschlagen, wenn es mehr als eine Region/ein Rechenzentrum gibt. Sie können dies entweder ermitteln, indem Sie die Region identifizieren, in der die Nutzer 502-Fehler beobachten, oder indem Sie die NGINX-Zugriffsprotokolle im Verzeichnis
/opt/apigee/var/log/edge-router/nginx/auf jedem der Router überprüfen, die zu verschiedenen Regionen gehören. - In den NGINX-Fehlerprotokollen (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_error_log
wird der folgende Fehler angezeigt:2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
Szenario 1: Alle Message Processors sind ausgefallen
- Prüfen Sie, ob die Message Processors in der jeweiligen Region/im jeweiligen Rechenzentrum ausgeführt werden.
- Wenn alle Message Processors ausgefallen sind, starten Sie sie neu.
Auflösung
Starten Sie alle Message Processors mit dem folgenden Befehl neu:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Szenario 2: Alle Message Processors sind mit der Verarbeitung laufender Anfragen beschäftigt
Dieser Fehler tritt auf, wenn die Router feststellen, dass alle Message Processors in einer bestimmten Region/einem bestimmten Rechenzentrum nicht verfügbar sind, da sie alle mit der Verarbeitung laufender Anfragen beschäftigt sind.
- Prüfen Sie, ob die Message Processors in der jeweiligen Region/im jeweiligen Rechenzentrum ausgeführt werden.
- Wenn alle Message Processors ausgeführt werden und aktiv sind, prüfen Sie, ob die CPU-Auslastung der Message Processors hoch ist. Generieren Sie dann alle 30 Sekunden drei Thread-Dumps mit dem folgenden Befehl:
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- Wenn die Arbeitsspeichernutzung der Message Processor hoch ist, generieren Sie mit dem folgenden Befehl einen Heap-Dump:
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - Starten Sie den Message Processor mit dem folgenden Befehl neu. Dadurch sollte die CPU- und Speicherauslastung sinken:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Beobachten Sie die API-Aufrufe, um zu prüfen, ob das Problem weiterhin besteht.
- Wenden Sie sich an den Apigee-Support und senden Sie die Thread-Dumps, den Heap-Dump und die Message Processor-Logs (
/opt/apigee/var/log/edge-message-processor/logs/system.log), um die Ursache für die hohe CPU-/Speicherauslastung zu untersuchen.
Ursache: Falsche SSL-Konfiguration zwischen Routern und Message Processors
Diagnose
- Prüfen Sie die NGINX-Zugriffsprotokolle (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). Die Antwort 502 wird wie unten dargestellt angezeigt:_access_log
2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
- Prüfen Sie die NGINX-Fehlerprotokolle (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). Es werden Fehler wie die folgenden angezeigt:_error_log
2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
- Dies zeigt, dass der SSL-Handshake zwischen Router und Message Processor fehlschlägt.
- Wenn Sie die Fehlermeldung in Schritt 1 und 2 genau betrachten, sehen Sie, dass der Port 8998 für die Kommunikation mit dem Message Processor verwendet wird. Dies ist ein nicht sicherer Port, aber das Protokoll ist SSL (https). Normalerweise wird der sichere Port 8443 verwendet. Da ein nicht sicherer Port für die sichere Kommunikation verwendet wird, schlägt der SSL-Handshake fehl.
- Dies kann in der Regel passieren, wenn Sie bei der Konfiguration von SSL zwischen Router und Message Processor Schritte ausgelassen oder falsche Werte festgelegt haben. Beachten Sie die hier beschriebenen Schritte.
Dieser Fehler kann beispielsweise auftreten, wenn
- der Port in
/opt/apigee/customer/application/message-processor.properties as shown below
als 8998 anstelle von 8443 angegeben istconf/message-processor-communication.properties+local.http.port=8998
- die Router-Konfigurationsdateien im Verzeichnis
/opt/nginx/conf.d/*nicht gelöscht wurden und der Router bei der SSL-Konfiguration nicht neu gestartet wurde. In diesem Fall bleibt der Port der Message Processors in den Konfigurationsdateien 8998.
- der Port in
Auflösung
- Achten Sie darauf, dass alle Schritte unter TLS zwischen einem Router und einem Message Processor konfigurieren richtig ausgeführt werden.
- Wenn das Problem weiterhin besteht, lesen Sie den Abschnitt Diagnoseinformationen erfassen.
Ursache: Fehler vom Backend-Server
Diagnose
- Wenn der Fehler jedes Mal auftritt, können Sie die UI-Ablaufverfolgung für die fehlerhaften Anfragen erfassen. Wählen Sie eine fehlerhafte Anfrage aus und navigieren Sie durch die verschiedenen Phasen in der Ablaufverfolgung. Wenn Sie feststellen, dass Sie die Meldung „502 Fehlerhaftes Gateway“ vom Backend-Server selbst erhalten, kann das Problem daran liegen, dass auf dem Backend-Server ein Fehler aufgetreten ist.
Ablaufverfolgung mit der Meldung „502 Fehlerhaftes Gateway“ vom Backend-Server
- Wenn das Problem nur zeitweise auftritt und Sie die Ablaufverfolgung nicht erfassen können,
- können Sie als Public Cloud-Nutzer die API-Überwachung verwenden und die Details zu den 502-Fehlern prüfen.
- Wenn der Fehlercode
messaging.adaptors.http.flow.ErrorResponseCodeund die Fehlerquelletargetist, wird der Fehler vom Backend-Server verursacht.
- Wenn der Fehlercode
- Als Private Cloud-Nutzer können Sie die NGINX-Zugriffsprotokolle analysieren:
/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
Der Eintrag für die fehlerhafte Anfrage sieht so aus:
2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
- Wenn der Fehlercode
messaging.adaptors.http.flow.ErrorResponseCodeund die Fehlerquelletargetist, wird der Fehler vom Backend-Server verursacht.
- Wenn der Fehlercode
- können Sie als Public Cloud-Nutzer die API-Überwachung verwenden und die Details zu den 502-Fehlern prüfen.
Auflösung
- Arbeiten Sie mit Ihrem Backend-Serverteam zusammen, um dieses Problem im Backend zu beheben.
Diagnoseinformationen erfassen
- NGINX-Zugriffsprotokolle
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_access_log
und Fehlerprotokolle
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)._error_log - Message Processor-Protokolle
(/opt/apigee/var/log/edge-message-processor/logs/system.log).