IBM Cloud Docs
调试应用程序

调试应用程序

使用故障诊断提示来了解如何对 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保留: 8022800880129090909115090。 只能将一个端口公开为侦听端口。

获取我的应用程序的日志

日志可帮助您在运行应用程序时对问题进行故障诊断。 您可以从控制台或使用 CLI 查看应用程序日志。

从控制台查看日志时,必须在“Code Engine项目的同一区域创建一个”IBM Cloud Logs实例。 在使用 Code Engine 应用程序之前,不需要创建此实例。Code Engine 使您能够轻松地为应用程序启用日志记录。 添加日志记录功能后,可以查看应用程序日志。 有关更多信息,请参阅 从控制台查看应用程序日志

使用 CLI 时,可以显示应用程序的所有实例的日志或显示应用程序的特定实例的日志。

  1. 使用 ibmcloud ce app list 命令列出项目中所有已定义的应用程序; 例如,

    ibmcloud ce app list  
    
  2. 使用 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 中显示应用程序的更多详细信息。

  3. 显示应用程序实例的日志。

    • 要显示应用程序的特定实例的日志,请使用 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 来查看系统事件信息。

您可以显示应用程序的所有实例的系统事件或显示应用程序的特定实例的系统事件。

  1. 使用 ibmcloud ce app list 命令列出所有已定义的应用程序; 例如,

    ibmcloud ce app list  
    
  2. 使用 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 中显示应用程序的更多详细信息。

  3. 显示应用程序实例的系统事件。

    • 要显示应用程序的特定实例的事件,请使用 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 应用程序时,必须指定容器映像引用和注册表私钥以访问映像。 要使应用程序正常工作,图像引用及其访问属性必须在应用程序的生命周期内保持有效。

请参阅 如何验证我的图像引用?