アプリのデバッグ
トラブルシューティングのヒントを使用して、IBM Cloud® Code Engine アプリケーションをトラブルシューティングする方法を確認します。
アプリが予期したとおりに機能していない場合は、ログおよびシステム・イベントを確認すると、問題のデバッグに役立つ情報が得られる可能性があります。
考慮すべきアプリ制限
1つのプロジェクトで作成できるアプリの最大数は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
で listen することを想定します。 さらに、Code Engineは環境変数'PORT
に、アプリケーションがリッスンすると予想されるポート値を設定する。 アプリが「8080
以外のポートをリッスンする必要がある場合は、コンソールからアプリをデプロイして正しいポートを指定するか、「app create
コマンドの「--port
オプションを使用する。 Code Engine が設定する環境変数について詳しくは、環境変数の自動注入を参照してください。 ポート 8022
、 8008
、 8012
、 9090
、 9091
、および
15090
は、 Code Engineによって予約されています。 listen ポートとして公開できるポートは 1 つのみです。
アプリのログの取得
ログは、アプリの実行時の問題をトラブルシューティングするために役立ちます。 アプリのログはコンソールでも 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
アプリに関するより詳細な詳細情報が必要な場合は、**
app get
**コマンドで--o yaml
オプションを使用します (例: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 コンソールで、すべてのアプリ・インスタンスの詳細を表示できます。 アプリ・インスタンスの詳細は、アプリのインスタンスに関する警告メッセージを受け取る場合に役立ちます。 あるいは、アプリが準備完了状況であっても、要求にサービスを提供していないため、アプリが正しく動作していない可能性があります。
アプリ・インスタンスの詳細については、アプリケーション・ページに移動してください。 アプリケーション・ページから、 「インスタンス」 タブに移動して、アプリケーションの現在のインスタンスを確認できます。 インスタンスのセットは、 スケーリング構成 に基づいて、アプリケーションがスケールアップおよびスケールダウンされると変更されます。 アプリ・インスタンスに関する情報を使用して、アプリのトラブルシューティングに役立てます。
再始動カウントは、特定のインスタンスが作成されてからユーザー・コンテナーが再始動された回数です。 インスタンスが作成されてからのユーザー・コンテナー再始動の平均回数が 1 日あたり 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
アプリに関するより詳細な詳細情報が必要な場合は、**
app get
**コマンドで--o yaml
オプションを使用します (例: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 アプリで作業する場合、イメージにアクセスするためのコンテナー・イメージ参照とレジストリー・シークレットを指定する必要があります。 アプリが正しく機能するためには、アプリの存続期間中、イメージ参照とそのアクセス・プロパティーが有効なままでなければなりません。
イメージ参照を確認するにはどうすればよいですか? を参照してください。