Debugging von Apps
Mit den Tipps zur Fehlerbehebung können Sie sich damit vertraut machen, wie Sie Fehler im Zusammenhang mit IBM Cloud® Code Engine-Anwendungen beheben.
Wenn sich Ihre App nicht wie erwartet verhält, können Sie bei der Suche nach Protokollen und Systemereignissen Informationen bereitstellen, die Ihnen bei der Behebung des Problems helfen können.
Zu beachtende Grenzen der App
Pro Projekt können Sie maximal 40 Apps erstellen. Pro Projekt sind insgesamt maximal 120 Revisionsversionen für alle Apps zulässig. Code Engine speichert neben der aktuellen Revisionsversion Ihrer App nur die neueste inaktive Revisionsversion Ihrer Anwendung. Ältere Revisionen werden gelöscht. Siehe Apps aktualisieren.
Weitere Informationen zu den Beschränkungen für Apps, einschließlich Speicher und CPU, finden Sie unter „ Beschränkungen und Kontingente für Code Engine “.
Über die CLI können Sie den Befehl ibmcloud ce project get verwenden, um Informationen zu Grenzwerten und zur aktuellen Nutzung anzuzeigen. Zum
Beispiel:
ibmcloud ce project get --name myproject
Beispielausgabe
Getting project 'myproject'...
OK
Name: myproject
ID: abcdabcd-abcd-abcd-abcd-f1de4aab5d5d
Status: active
Enabled: true
Application Private Visibility Supported: true
Selected: true
Region: us-south
Resource Group: default
Service Binding Service ID: ServiceId-1234abcd-abcd-abcd-1111-1a2b3c4d5e6f
Age: 52d
Created: Tue, 28 Sep 2021 05:12:16 -0500
Updated: Tue, 28 Sep 2021 05:12:19 -0500
Quotas:
Category Used Limit
App revisions 2 120
Apps 1 40
Build runs 1 100
Builds 2 100
Configmaps 2 100
CPU 0 128
Ephemeral storage 0 512G
Functions 0 20
Instances (active) 0 250
Instances (total) 0 2500
Job runs 13 100
Jobs 2 100
Memory 0 512G
Secrets 6 100
Subscriptions (cron) 0 100
Subscriptions (IBM Cloud Object Storage) 0 100
Subscriptions (Kafka) 0 100
Portwert bestätigen
Code Engine Voraussetzung ist, dass Sie über einen Endpunkt „ HTTP “ verfügen, den Code Engine zur Überprüfung des Betriebszustands Ihrer App nutzt.
Standardmäßig geht Code Engine davon aus, dass Apps an Port 8080 für eingehende Verbindungen empfangsbereit sind. Außerdem setzt „ Code Engine “ die Umgebungsvariable „ PORT “ auf den Portwert, auf dem die Anwendung
voraussichtlich auf eingehende Verbindungen wartet. Wenn Ihre App auf einem anderen Port als 8080 lauschen soll, stellen Sie Ihre App entweder über die Konsole bereit und geben Sie den richtigen Port an, oder verwenden Sie die
Option „ --port “ im app create Befehl. Weitere Informationen zu Umgebungsvariablen, die von Code Enginefestgelegt werden, finden Sie unter Automatisch injizierte Umgebungsvariablen.
Die folgenden Ports sind für Code Enginereserviert: 8022, 8008, 8012, 9090, 9091 und 15090. Als Empfangsport kann nur ein Port zugänglich gemacht werden.
Protokolle für meine Apps abrufen
Protokolle können nützlich sein, um Probleme beim Ausführen von Apps zu beheben. Sie können die App-Protokolle über die Konsole oder über die Befehlszeilenschnittstelle anzeigen.
Wenn Sie Protokolle über die Konsole anzeigen, müssen Sie eine IBM Cloud Logs Instanz in derselben Region wie Ihr Code Engine -Projekt erstellen. Es ist nicht erforderlich, diese Instanz zu erstellen, bevor Sie mit Ihrer Code Engine-App arbeiten. Code Engine vereinfacht die Aktivierung der Protokollierung für Ihre Apps. Sie können die App-Protokolle anzeigen, nachdem Sie Protokollierungsfunktionen hinzugefügt haben. Weitere Informationen finden Sie unter App-Protokolle über die Konsole anzeigen.
Wenn Sie mit der CLI arbeiten, können Sie die Protokolle aller Instanzen einer App anzeigen oder die Protokolle einer bestimmten Instanz einer App anzeigen.
-
Verwenden Sie den Befehl
ibmcloud ce app list, um alle definierten Apps in Ihrem Projekt aufzulisten; zum Beispiel:ibmcloud ce app list -
Verwenden Sie den Befehl
ibmcloud ce app get, um die Details Ihrer App abzurufen, einschließlich des Namens der Instanzen für die App. Beispiel:ibmcloud ce app get --name myappBeispielausgabe
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp [...] Created: 2021-02-23T07:32:16-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-atfte-2: Age: 51s Traffic: 100% Image: icr.io/codeengine/hello (pinned to e69c88) Running Instances: 2 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 2 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 36s Ready true 10s RoutesReady true 10s Instances: Name Revision Running Status Restarts Age myapp-atfte-2-deployment-7cb45cdf67-qc7sb myapp-atfte-2 2/2 Running 0 52s myapp-atfte-2-deployment-7cb45cdf67-sp9fr myapp-atfte-2 2/2 Running 0 52sWenn Sie differenziertere Details zu Ihrer App wünschen, nutzen Sie die Option
--o yamlmit dem Befehlapp get, z. B.ibmcloud ce app get --name myapp --o yaml. Diese Option ist nützlich, um detailliertere Informationen in der Befehlszeilenschnittstelle für die App anzuzeigen. -
Zeigen Sie die Protokolle der App-Instanzen an.
- Wenn Sie die Protokolle einer bestimmten Instanz Ihrer App anzeigen möchten, verwenden Sie den Befehl
ibmcloud ce app logs --instance INSTANCE_NAME. Beispiel:
ibmcloud ce app logs --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb ``` Beispielausgabe ```txt {: screen} Getting logs for application instance 'myapp-atfte-2-deployment-7cb45cdf67-qc7sb'... OK myapp-atfte-2-deployment-7cb45cdf67-qc7sb/user-container: Server running at http://0.0.0.0:8080/ ``` * Verwenden Sie den Befehl [**`app logs --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-logs), um die Protokolle für alle Instanzen Ihrer App anzuzeigen; zum Beispiel: ```txt {: pre} ibmcloud ce app logs --app myapp ``` Beispielausgabe ```txt {: screen} Getting logs for all instances of application 'myapp'... OK myapp-atfte-2-deployment-7cb45cdf67-qc7sb/user-container: Server running at http://0.0.0.0:8080/ myapp-atfte-2-deployment-7cb45cdf67-sp9fr/user-container: Server running at http://0.0.0.0:8080/ ``` - Wenn Sie die Protokolle einer bestimmten Instanz Ihrer App anzeigen möchten, verwenden Sie den Befehl
Weitere Informationen finden Sie unter Anwendungsprotokolle in Befehlszeilenschnittstelle anzeigen.
Details zu App-Instanzen abrufen
Mit der Code Engine-Konsole können Sie Details zu allen App-Instanzen anzeigen. Details Ihrer App-Instanzen sind nützlich, falls Sie eine Warnung zu Instanzen Ihrer App erhalten. Oder Ihre App befindet sich möglicherweise im Bereitstatus, aber die App funktioniert nicht ordnungsgemäß, da sie keine Anforderungen bedient.
Details zu App-Instanzen finden Sie auf der Anwendungsseite. Auf der Anwendungsseite können Sie die Registerkarte Instanzen aufrufen und die aktuellen Instanzen der Anwendung überprüfen. Die Instanzgruppe ändert sich, wenn für Ihre Anwendung ein Scale-up oder Scale-down durchgeführt wird, basierend auf der Skalierungskonfiguration. Verwenden Sie die Informationen zu den App-Instanzen als Hilfe bei der Fehlerbehebung für Ihre App.
Die Anzahl der Neustarts gibt an, wie oft der Benutzercontainer seit der Erstellung der bestimmten Instanz erneut gestartet wurde. Der Wert für die Neustartrate wird als hoch eingestuft, wenn die durchschnittliche Anzahl der Neustarts des Benutzercontainers seit der Erstellung der Instanz mindestens 3 Mal pro Tag beträgt.
Verwenden Sie bei Bedarf Filter, um die Ergebnisse für Ihre App-Instanzen einzugrenzen. Sie können nach dem Namen der App-Revision oder dem Status der App-Instanz filtern.
Sie können die Details einer bestimmten App-Instanz überprüfen, um einen tieferen Einblick zu erhalten. Führen Sie eine der folgenden Aktionen aus, um die Seite mit den Instanzdetails für eine bestimmte Instanz zu öffnen:
- Klicken Sie in die Zeile der gewünschten Instanz.
- Klicken Sie auf das Symbol Aktionen
> Instanzdetails, um Details der angegebenen Instanz anzuzeigen.
Mithilfe der zusätzlichen Informationen auf der Seite mit den Instanzdetails können Sie Fehler in Ihrer App beheben. Sie können die Informationen zu Start-und Neustartzeiten, Exit-Code-und Ursachencodeinformationen, Containerstatus und die letzten Protokollnachrichten verwenden, um Sie beim Debugging Ihrer App zu unterstützen. Ein Benutzercontainer enthält Ihren aktiven Code (das Image, das beim Erstellen der App angegeben wurde). Ein Systemcontainer verarbeitet Systemtasks wie das Weiterleiten von Anforderungen an den Benutzercontainer oder das Erfassen von Metriken.
Die folgenden Szenarios sind Beispiele für Situationen, in denen Sie Details der jeweiligen App-Instanz verwenden können, um Fehler in Ihrer App zu beheben.
- Wenn sich die App im Status „Bereit“ befindet, aber keine Anfragen an HTTP bearbeitet, rufen Sie die Details bestimmter App-Instanzen auf, um zu erfahren, warum die jeweilige App-Instanz keine Anfragen an HTTP bearbeitet.
- Wenn Sie eine Instanz mit dem Status
failedhaben, ist das Image für die Anwendung möglicherweise nicht gültig oder nicht verfügbar. - Wenn die Anzahl der Neustarts für eine Instanz hoch ist, ist Ihre Anwendung möglicherweise aufgrund eines Programmierfehlers fehlgeschlagen, der Grenzwert für ephemeren Speicher wurde erreicht oder es tritt eine abnormale Speicherbedingung auf. In diesem Szenario wird die Instanz kontinuierlich gestoppt und erneut gestartet. Anhand der Informationen zum Zeitpunkt des letzten Neustarts können Sie ermitteln, ob die App-Instanz ein fortlaufendes Problem hat, das Neustarts verursacht, oder ob das Problem selten auftritt.
Systemereignisinformationen für meine Apps abrufen
Systemereignisinformationen können nützlich sein, um Probleme beim Ausführen von Apps zu beheben. Sie können Systemereignisinformationen mit der CLI anzeigen.
Sie können Systemereignisse für alle Instanzen einer App oder für eine bestimmte Instanz einer App anzeigen.
-
Verwenden Sie den Befehl
ibmcloud ce app list, um alle definierten Apps aufzulisten, zum Beispiel:ibmcloud ce app list -
Verwenden Sie den Befehl
ibmcloud ce app get, um die Details Ihrer App abzurufen, einschließlich des Namens der Instanzen für die App. Beispiel:ibmcloud ce app get --name myappBeispielausgabe
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp [...] Created: 2021-02-23T07:32:16-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-atfte-2: Age: 51s Traffic: 100% Image: icr.io/codeengine/hello (pinned to e69c88) Running Instances: 2 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 2 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 36s Ready true 10s RoutesReady true 10s Events: Type Reason Age Source Messages Normal Created 3m55s service-controller Created Configuration "myapp" Normal Created 3m54s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-atfte-2-deployment-7cb45cdf67-qc7sb myapp-atfte-2 2/2 Running 0 52s myapp-atfte-2-deployment-7cb45cdf67-sp9fr myapp-atfte-2 2/2 Running 0 52sWenn Sie differenziertere Details zu Ihrer App wünschen, nutzen Sie die Option
--o yamlmit dem Befehlapp get, z. B.ibmcloud ce app get --name myapp --o yaml. Diese Option ist nützlich, um detailliertere Informationen in der Befehlszeilenschnittstelle für die App anzuzeigen. -
Zeigen Sie die Systemereignisinformationen der App-Instanzen an.
- Wenn Sie die Ereignisse einer bestimmten Instanz Ihrer App anzeigen möchten, verwenden Sie den Befehl
ibmcloud ce app events --instance INSTANCE_NAME; Beispiel:
ibmcloud ce app events --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb ``` Beispielausgabe ```txt {: screen} Getting events for application instance 'myapp-atfte-2-deployment-7cb45cdf67-qc7sb'... OK myapp-atfte-2-deployment-7cb45cdf67-qc7sb: Type Reason Age Source Messages Normal Scheduled 46m default-scheduler Successfully assigned 4svg40kna19/myapp-atfte-2-deployment-7cb45cdf67-qc7sb to 10.240.64.20 Normal Pulling 45m kubelet, 10.240.64.20 Pulling image "index.icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" Normal Pulled 45m kubelet, 10.240.64.20 Successfully pulled image "index.icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" in 3.64261536s Normal Created 45m kubelet, 10.240.64.20 Created container user-container [...] ``` * Verwenden Sie den Befehl [**`ibmcloud ce app events --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-events), um Ereignisse für alle Instanzen Ihrer App anzuzeigen, zum Beispiel: ```txt {: pre} ibmcloud ce app events --app myapp ``` Beispielausgabe ```txt {: screen} Getting events for all instances of application 'myapp'... OK myapp-atfte-2-deployment-7cb45cdf67-qc7sb: Type Reason Age Source Messages Normal Scheduled 47m default-scheduler Successfully assigned 4svg40kna19/myapp-atfte-2-deployment-7cb45cdf67-qc7sb to 10.240.64.20 Normal Pulling 47m kubelet, 10.240.64.20 Pulling image "icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" Normal Pulled 47m kubelet, 10.240.64.20 Successfully pulled image "icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" in 3.64261536s Normal Created 46m kubelet, 10.240.64.20 Created container user-container Normal Started 46m kubelet, 10.240.64.20 Started container user-container [...] myapp-atfte-2-deployment-7cb45cdf67-sp9fr: Type Reason Age Source Messages Normal Scheduled 47m default-scheduler Successfully assigned 4svg40kna19/myapp-atfte-2-deployment-7cb45cdf67-sp9fr to 10.240.0.24 Normal Pulling 47m kubelet, 10.240.0.24 Pulling image "icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" Normal Pulled 47m kubelet, 10.240.0.24 Successfully pulled image "icr.io/codeengine/hello@sha256:e69c88d7f33778b8266cd480b79522f13968c72aca1287f47603ab711208c980" in 3.682464554s Normal Created 46m kubelet, 10.240.0.24 Created container user-container Normal Started 46m kubelet, 10.240.0.24 Started container user-container [...] ``` - Wenn Sie die Ereignisse einer bestimmten Instanz Ihrer App anzeigen möchten, verwenden Sie den Befehl
Container-Image-Referenz für eigene App überprüfen
Wenn Sie mit Code Engine-Apps arbeiten, müssen Sie einen Container-Image-Verweis und einen geheimen Registry-Schlüssel für den Zugriff auf das Image angeben. Damit die App ordnungsgemäß funktioniert, müssen die Bildreferenz und ihre Zugriffseigenschaften für die Lebensdauer der App gültig bleiben.