In diesem Thema werden Schritte erläutert, mit denen Sie Probleme mit dem Message Processor beheben können. Der Message Processor ist Teil der
apigee-runtime
-Komponente. Weitere Informationen finden Sie unter Laufzeitdienst-Konfiguration – Übersicht.
Bereitschaftsprüfung schlägt mit dem HTTP-Statuscode 500 fehl
Symptom
Mindestens ein apigee-runtime
-Pod ist nicht bereit.
Fehlermeldung
Wenn Sie kubectl
zur Beschreibung eines fehlgeschlagenen apigee-runtime
-Pods verwenden, wird folgender Fehler angezeigt:
Readiness probe failed: HTTP probe failed with statuscode: 500
Beispiel:
kubectl describe pod -n hybrid \ apigee-runtime-apigee-gcp-prod1-test-blue-67db4f457b-9c7c7 ... apigee-runtime-apigee-gcp-prod1-test-blue-67db4f457b-9c7c7 Readiness probe failed: HTTP probe failed with statuscode: 500 ...
Mögliche Ursachen
Der Fehler bedeutet, dass kein aktiver Vertrag für den Nachrichtenprozessor verfügbar ist, um Traffic zu verarbeiten. In diesem Status kann der Nachrichtenprozessor sich nicht als "bereit" deklarieren.
Ursache | Beschreibung |
---|---|
Verbindungsproblem zwischen Synchronizer und Verwaltungsebene | Der Synchronizer kann keine Verbindung zur Verwaltungsebene herstellen. Dieses Problem tritt normalerweise auf, wenn Sie die contractProvider -URL überschreiben und ihr ein falsches Dienstkonto zuweisen. Beispiel: Sie konfigurieren ein Dienstkonto für eine Staging-Bereitstellung mit einer contractProvider -URL, die auf den Produktionsserver verweist.
|
Problem mit dem Nachrichtenprozessor zum Verbindungsaufbau mit Synchronizer | Startet ein neuer MP im Rahmen einer automatischen Skalierung oder eines Pod-Neustarts, wird dieser Fehler möglicherweise angezeigt. Dieses Problem tritt im Allgemeinen auf, wenn der Synchronizer nicht verfügbar ist und der MP seinen Vertrag nicht laden konnte. |
Diagnose: Verbindungsproblem zwischen Synchronizer und Verwaltungsebene
So diagnostizieren Sie ein Verbindungsproblem zwischen Synchronizer und Verwaltungsebene:
- Lassen Sie die im Cluster enthaltenen Pods auflisten:
kubectl get pods -n namespace
- Öffnen Sie eine Shell in einem
apigee-synchronizer
-Pod:kubectl exec -it -n namespace synchronizer-pod-name bash
Beispiel:
kubectl exec -it -n apigee apigee-synchronizer-apigee-gcp-prod1-test-blue-cnj5x bash
- Wechseln Sie zum folgenden Verzeichnis:
cd /opt/apigee/var/log/apigee-synchronizer
ls
dr-xr-sr-x 4 apigee apigee 4096 Sep 12 16:52 750 drwxr-sr-x 2 apigee apigee 4096 Sep 12 16:52 cachedFiles -rw-r--r-- 1 apigee apigee 22295 Sep 12 16:52 config.log -rw-r--r-- 1 apigee apigee 76 Sep 12 16:52 versions.properties - Prüfen Sie die aktive Version in
version.properties
. Beispiel:cat versions.properties #active repository version #Sat Dec 14 19:45:00 GMT 2019 active.version=749
- Achten Sie darauf, dass der Wert von
active.version
mit dem Namen des Vertragsordners übereinstimmt. Im obigen Beispiel ist der Ordnername750
. Die Elemente stimmen nicht überein:dr-xr-sr-x 4 apigee apigee 4096 Sep 12 16:52 750
- Beenden Sie die Pod-Shell.
Lösung
Wenn version.properties
fehlt oder wie oben beschrieben eine Version nicht übereinstimmt, prüfen Sie die Synchronizer-Logs, um festzustellen, warum die neuesten Verträge nicht heruntergeladen werden. Beispiele:
kubectl logs -f -n namespace synchronizer-pod-name
Informationen zum Interpretieren der Synchronizer-Logs finden Sie unter Synchronizer-Logs.
Wenn der Synchronizer ausgefallen ist, starten Sie ihn mit apigeectl
neu. Beispiel:
$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --org --env env-name
Diagnose: Verbindungsproblem zwischen Nachrichtenprozessor und Synchronizer
So diagnostizieren Sie ein Verbindungsproblem zwischen Nachrichtenprozessor und Synchronizer:
- Lassen Sie die im Cluster enthaltenen Pods auflisten:
kubectl get pods -n namespace
- Prüfen Sie anhand der Laufzeitlogs, warum die Verträge nicht heruntergeladen werden:
kubectl logs -f -n namespace pod-name
Beispiel:
kubectl logs -f -n apigee apigee-runtime-apigee-gcp-prod1-test-blue-67db4f457b-9c7c7
Startet ein neuer MP im Rahmen eines Autoscalings oder Pod-Neustarts, so kann es sein, dass der MP die Verträge nicht lädt. Normalerweise tritt das Problem auf, wenn der Synchronizer nicht verfügbar ist. In diesem Fall kann der MP die Verträge nicht laden. Beispiel:
2019-09-13 16:59:24,331 podName:N/A ipAddress:N/A dpColor:N/A HttpClient@331886186-301 DEBUG o.e.j.c.AbstractConnectionPool - AbstractConnectionPool$1.failed() : Connection 1/64 creation failed java.net.UnknownHostException: apigee-synchronizer-apigee-gcp-prod1-test.hybrid.svc.cluster.local at java.net.InetAddress.getAllByName0(InetAddress.java:1281) at java.net.InetAddress.getAllByName(InetAddress.java:1193) at java.net.InetAddress.getAllByName(InetAddress.java:1127) at org.eclipse.jetty.util.SocketAddressResolver$Async.lambda$resolve$1(SocketAddressResolver.java:167) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590) at java.lang.Thread.run(Thread.java:748) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590) at java.lang.Thread.run(Thread.java:748)
Lösung
Versuchen Sie, den Synchronizer neu zu starten. Beispiel:
$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --org --env env-name
Die Bereitschaftsprüfung schlägt wegen einem ungültigen Verschlüsselungsschlüssel fehl
Symptom
Die apigee-runtime
-Pods befinden sich nicht im Status „Bereit“.
Diagnose
Wenn Sie kubectl
für die Beschreibung eines fehlgeschlagenen apigee-runtime
-Pods verwenden, wird folgender Fehler angezeigt: Readiness probe failed: Probe hybrid-encryption-key-validation-probe failed
.
Beispiel:
$ kubectl describe pod -n namespace apigee-runtime-pod-name ... Readiness probe failed: Probe hybrid-encryption-key-validation-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = hybrid.encryption.key.InvalidEncryptionKey, message = Invalid encryption key. Please check the length of the encryption key, associated contexts = []} ...
Lösung
Unterstützte Längen für Verschlüsselungsschlüssel sind 16, 24 oder 32 Byte. Der Wert des Schlüssels muss base64-codiert sein. Weitere Informationen zum Erstellen eines korrekt formatierten Schlüssels finden Sie unter Datenverschlüsselung.
Logs des Nachrichtenprozessors anzeigen
Ausführliche Informationen zum Anzeigen und Interpretieren von Nachrichtenprozessor-Logs finden Sie unter Laufzeitlogs.
Einen API-Proxy aus dem Laufzeit-Pod aufrufen
In einigen Situationen hilft es bei der Fehlersuche, zu prüfen, ob ein API-Proxy-Aufruf direkt aus dem Pod apigee-runtime
möglich ist. Damit wird das Ingress-Gateway umgangen.
- Führen Sie folgenden Befehl aus, um an Port 8443 weiterzuleiten. So können Sie die API im Pod aufrufen:
kubectl port-forward -n namespace apigee-runtime-pod-name 8443:8443
- Einen bereitgestellten API-Proxy aufrufen Wenn der Proxy-Basispfad beispielsweise
ilove-apis
lautet:curl -k -v https://0:8443//ilove-apis < HTTP/1.1 200 OK < X-Powered-By: Apigee < Access-Control-Allow-Origin: * < X-Frame-Options: ALLOW-FROM RESOURCE-URL < X-XSS-Protection: 1 < X-Content-Type-Options: nosniff < Content-Type: text/html; charset=utf-8 < Content-Length: 18 < ETag: W/"12-Jb9QP1bUxNSmZkxQGt5KLQ" < Date: Fri, 13 Sep 2019 18:33:46 GMT < Via: 1.1 google < X-Apigee.Message-ID: 016f5f7f-c59e-404c-86e8-7b0737833f982 < X-Apigee.dp.color: blue < X-Apigee.proxy: /organizations/my-org/environments/test/apiproxies/i-loveapis/revisions/1 < X-Apigee.proxy.basepath: /ilove-apis < X-Apigee.target-latency: 9 < * Connection #0 to host 0 left intact <H2>I <3 APIs
Verwaltungs-API prüfen
Sie können die unten beschriebene API verwenden, um zu prüfen, ob die Verwaltungs-API ordnungsgemäß funktioniert.
- Rufen Sie die Namen der Pods in Ihrem Cluster ab:
kubectl get pods -n namespace
- Verwenden Sie die Portweiterleitung, um auf den
apigee-runtime
-Pod zuzugreifen. Die Syntax für die Portweiterleitung lautet wie folgt:kubectl port-forward -n namespace podname 8843:8843
Beispiel:
kubectl port-forward -n apigee \ apigee-runtime-my-organization-test-blue-57965b7789-6j4bp 8843:8843
- Verwenden Sie dann in einem anderen Terminalfenster ein Dienstprogramm wie
curl
, um eine Anfrage an dieclassification/tree
-API zu senden, wie im folgenden Beispiel gezeigt:curl -k https://0:8843/v1/classification/tree
Hier sehen Sie eine Beispielantwort, in der Informationen zu den bereitgestellten Proxys in der "Testumgebung" aufgeführt werden:
[ { "condition" : "(always matches)", "virtualHost" : { "env" : "test", "name" : "default", "org" : "my-organization", "tree" : { "elements" : [ { "application" : "myproxy", "basePath" : "/myproxy", "name" : "default", "revision" : "1" } ], "name" : "IdentificationTree" } } } ]
Fehlerbehebungsmodus verwenden
Zur Fehlerbehebung können Sie den Fehlerbehebungsmodus aktivieren, um ausführlichere Informationen in die Pod-Logs apigee-runtime
aufzunehmen.
- Listen Sie die Pods in Ihrem Namespace auf:
kubectl get pods -n namespace
- Wählen Sie einen der aufgelisteten
apigee-runtime
-Pods zur Fehlerbehebung. - Führen Sie den Portweiterleitungsbefehl für diesen Pod aus. Beispiel:
kubectl port-forward -n hybrid apigee-runtime-hybrid-prod-blue-fcpdd 8843
- Öffnen Sie ein anderes Terminal und rufen Sie folgende API auf, um das Debugging zu aktivieren:
curl "https://0:8843/v1/logsessions?sessions=debug" -X POST -v -k
- Führen Sie den Befehl
kubectl logs
aus, um das Log im Fehlerbehebungsmodus zu prüfen. Beispiel:kubectl logs -f -n hybrid apigee-runtime-hybrid-prod-blue-fcpdd
- Sobald Sie mit der Prüfung des Fehlerbehebungsprotokolls fertig sind, setzen Sie die Protokollebene auf INFO (Standardeinstellung) zurück. Beispiel:
curl "https://0:8843/v1/logsessions?sessions=info" -X POST -v -k
- Führen Sie den Befehl
kubectl logs
aus, um zu prüfen, ob sich das Log wieder im INFO-Modus befindet.