调试应用程序
使用故障诊断提示来了解如何对 IBM Cloud® Code Engine 应用程序进行故障诊断。
当应用程序的行为未如预期时,查看日志和系统事件可提供可帮助您调试问题的信息。
要考虑的应用程序限制
每个项目可创建的最大应用程序数为 40。 每个项目的所有应用程序的修订总数限制为 120 个。除了活动应用程序修订版之外,Code Engine 仅保留应用程序的最新不活动修订版。 将删除较旧的修订版。 请参阅 更新应用程序。
有关应用程序限制 (包括内存和 CPU) 的更多信息,请参阅 Code Engine的限制和配额。
通过 CLI,您可以使用 ibmcloud ce project get
命令来显示有关限制和当前使用情况的信息。 例如:
ibmcloud ce project create --name myproject
示例输出
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
确认端口值
Code Engine 要求您具有 Code Engine 用于检查应用程序运行状况的 HTTP 端点。
缺省情况下,Code Engine 假定应用程序侦听端口 8080
上的入局连接。 此外,Code Engine 将 PORT
环境变量设置为期望应用程序侦听的端口值。 如果应用程序需要侦听端口 8080
以外的端口,请从控制台部署应用程序并指定正确的端口,或者在 app create
命令上使用 --port
选项。
有关 Code Engine设置的环境变量的更多信息,请参阅 自动注入的环境变量。 以下端口由 Code Engine保留: 8022
,8008
,8012
,9090
,9091
和 15090
。
只能将一个端口公开为侦听端口。
获取我的应用程序的日志
日志可帮助您在运行应用程序时对问题进行故障诊断。 您可以从控制台或使用 CLI 查看应用程序日志。
从控制台查看日志时,必须在“Code Engine项目的同一区域创建一个”IBM Cloud Logs实例。 在使用 Code Engine 应用程序之前,不需要创建此实例。Code Engine 使您能够轻松地为应用程序启用日志记录。 添加日志记录功能后,可以查看应用程序日志。 有关更多信息,请参阅 从控制台查看应用程序日志。
使用 CLI 时,可以显示应用程序的所有实例的日志或显示应用程序的特定实例的日志。
-
使用
ibmcloud ce app list
命令列出项目中所有已定义的应用程序; 例如,ibmcloud ce app list
-
使用
ibmcloud ce app get
命令可获取应用程序的详细信息,包括应用程序实例的名称; 例如,ibmcloud ce app get --name myapp
示例输出
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 52s
如果需要有关应用程序的更多细颗粒度详细信息,请将
--o yaml
选项与app get
命令配合使用; 例如,ibmcloud ce app get --name myapp --o yaml
。 此选项有助于在 CLI 中显示应用程序的更多详细信息。 -
显示应用程序实例的日志。
-
要显示应用程序的特定实例的日志,请使用
ibmcloud ce app logs --instance INSTANCE_NAME
命令; 例如,ibmcloud ce app logs --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
示例输出
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/
-
要显示应用程序的所有实例的日志,请使用
app logs --application APP_NAME
命令; 例如,ibmcloud ce app logs --app myapp
示例输出
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/
-
有关更多信息,请参阅 使用 CLI 查看应用程序日志。
获取有关应用程序实例的详细信息
通过 Code Engine 控制台,您可以查看所有应用程序实例的详细信息。 如果收到有关应用程序实例的警告消息,那么应用程序实例的详细信息很有用。 或者,您的应用程序可能处于就绪状态,但该应用程序未正常工作,因为它未处理请求。
有关应用程序实例的详细信息,请转至应用程序页面。 从应用程序页面,您可以转至 实例 选项卡并查看应用程序的当前实例。 当应用程序根据 缩放配置 进行向上和向下缩放时,实例集将发生更改。 使用有关应用程序实例的信息来帮助对应用程序进行故障诊断。
重新启动计数是自创建特定实例以来用户容器重新启动的次数。 如果自创建实例以来用户容器的平均重新启动次数为每天 3 次或更多次,那么认为重新启动速率值很高。
根据需要,使用过滤器来帮助您缩小应用程序实例的结果范围。 您可以选择根据应用程序修订版的名称或应用程序实例的状态进行过滤。
您可以查看特定应用程序实例的详细信息以进行更深入的查看。 要打开特定实例的实例详细信息页面,请执行下列其中一项操作。
- 单击所需实例的行。
- 单击 操作 图标
> 实例详细信息 以查看指定实例的详细信息。
使用实例详细信息页面上的其他信息来帮助您对应用程序进行故障诊断。 您可以使用有关启动和重新启动时间,退出代码和原因码信息,容器状态以及最后一条日志消息的信息来帮助您调试应用程序。 用户容器包含您正在运行的代码 (您在创建应用程序时指定的映像)。 而系统容器处理诸如将请求转发到用户容器或收集度量值之类的系统任务。
以下场景是您可以使用特定应用程序实例的详细信息来帮助您对应用程序进行故障诊断的示例。
- 如果应用程序处于就绪状态,但应用程序未处理 HTTP 请求,请查看特定应用程序实例的详细信息,以了解应用程序实例未处理 HTTP 请求的原因。
- 如果您具有处于
failed
状态的实例,那么应用程序的映像可能无效或不可用。 - 如果实例的重新启动计数很高,那么可能是因为编程错误,达到临时存储器限制或发生内存不足情况而导致应用程序失败。 发生此场景时,将持续停止并重新启动实例。 上次重新启动时间信息可帮助您确定应用程序实例是否存在导致重新启动的持续问题,或者该问题是否不常见。
获取应用程序的系统事件信息
系统事件信息可帮助您在运行应用程序时对问题进行故障诊断。 您可以使用 CLI 来查看系统事件信息。
您可以显示应用程序的所有实例的系统事件或显示应用程序的特定实例的系统事件。
-
使用
ibmcloud ce app list
命令列出所有已定义的应用程序; 例如,ibmcloud ce app list
-
使用
ibmcloud ce app get
命令可获取应用程序的详细信息,包括应用程序实例的名称; 例如,ibmcloud ce app get --name myapp
示例输出
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 52s
如果需要有关应用程序的更多细颗粒度详细信息,请将
--o yaml
选项与app get
命令配合使用; 例如,ibmcloud ce app get --name myapp --o yaml
。 此选项有助于在 CLI 中显示应用程序的更多详细信息。 -
显示应用程序实例的系统事件。
-
要显示应用程序的特定实例的事件,请使用
ibmcloud ce app events --instance INSTANCE_NAME
命令; 例如,ibmcloud ce app events --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
示例输出
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 [...]
-
要显示应用程序的所有实例的事件,请使用
ibmcloud ce app events --application APP_NAME
命令; 例如,ibmcloud ce app events --app myapp
示例输出
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 [...]
-
验证应用程序的容器映像引用
使用 Code Engine 应用程序时,必须指定容器映像引用和注册表私钥以访问映像。 要使应用程序正常工作,图像引用及其访问属性必须在应用程序的生命周期内保持有效。
请参阅 如何验证我的图像引用?