除錯應用程式
請參閱這些疑難排解提示,了解如何排除 IBM Cloud® Code Engine 應用程式的問題。
當您的應用程式行為不符合預期時,查看日誌及系統事件可以提供可協助您對問題進行除錯的資訊。
要考量的應用程式限制
每個專案可以建立的應用程式數目上限為 40。 每個專案的所有應用程式限制為總計 120 個修訂。除了作用中應用程式修訂之外,Code Engine 僅保留應用程式的最新非作用中修訂。 會刪除較舊的修訂。 請參閱 更新應用程式。
如需應用程式限制 (包括記憶體及 CPU) 的相關資訊,請參閱 Code Engine。
使用 CLI,您可以使用 ibmcloud ce project get 指令來顯示限制及現行使用情形的相關資訊。 例如:
ibmcloud ce project get --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 這需要您具備一個 HTTP 端點,Code Engine 會透過此端點檢查您的應用程式是否正常運作。
依預設,Code Engine 會假設應用程式在埠 8080 上接聽送入的連線。 此外,Code Engine 會將 PORT 環境變數設為應用程式預期要接聽的埠值。 如果您的應用程式需要在埠 8080 以外的埠上接聽,請從主控台部署應用程式並指定正確的埠,或在 app create 指令上使用 --port 選項。
如需 Code Engine所設定環境變數的相關資訊,請參閱 自動注入環境變數。 下列埠由 Code Engine保留: 8022、8008、8012、9090、9091 及 15090。 只有一個埠可以公開為接聽埠。
取得我的應用程式的日誌
日誌有助於在您執行應用程式時對問題進行疑難排解。 您可以從主控台或使用 CLI 來檢視應用程式日誌。
當您從控制台查看日誌時,您必須在與您的IBM Cloud Logs項目相同的區域中建立一個 { Code Engine } 實例。 在使用 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 ``` 輸出範例 ```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/ ``` * 若要顯示應用程式所有實例的日誌,請使用 [**`app logs --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-logs) 指令; 例如, ```txt {: pre} ibmcloud ce app logs --app myapp ``` 輸出範例 ```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/ ``` - 若要顯示應用程式特定實例的日誌,請使用
如需相關資訊,請參閱 使用 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 ``` 輸出範例 ```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 [...] ``` * 若要顯示應用程式所有實例的事件,請使用 [**`ibmcloud ce app events --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-events) 指令; 例如, ```txt {: pre} ibmcloud ce app events --app myapp ``` 輸出範例 ```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 [...] ``` - 若要顯示應用程式特定實例的事件,請使用
驗證我的應用程式的容器映像檔參照
當您使用 Code Engine 應用程式時,必須指定容器映像檔參照及登錄密碼,才能存取映像檔。 若要讓應用程式正確運作,映像檔參照及其存取內容必須在應用程式的生命期限內保持有效。
請參閱 如何驗證我的映像檔參照?