IBM Cloud Docs
ジョブのデバッグ

ジョブのデバッグ

以下のトラブルシューティングのヒントを使用して、IBM Cloud® Code Engine ジョブおよびジョブ実行のトラブルシューティング方法を確認してください。

考慮すべきジョブ制限

プロジェクト 1 つにつき作成できるジョブの最大数は 100 です。 プロジェクト 1 つにつき合計 100 個というジョブ実行の制限に達したら、古いものを削除またはクリーンアップする必要があります。

メモリーや 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

ジョブのログの取得

ログは、ジョブの実行時の問題をトラブルシューティングするために役立ちます。 ジョブのログはコンソールでも CLI でも表示できます。

コンソールでログを表示する場合は、IBM Cloud Logs プロジェクトと同じリージョンに Code Engine インスタンスを作成する必要があります。 Code Engineジョブを操作する前に、このインスタンスを作成する必要はありません。Code Engineを使用すると、ジョブのロギングを簡単に使用可能にできます。 ロギング機能を追加すると、ジョブ・ログを表示できるようになります。 詳しくは、コンソールからのジョブ・ログの表示を参照してください。

CLI を使用すると、実行中のジョブのすべてのインスタンスのログを表示したり、ジョブの特定のインスタンスのログを表示したりできます。

  1. ibmcloud ce jobrun listコマンドを使用して、定義済みのすべてのジョブ実行をリストします。以下に例を示します。

    ibmcloud ce jobrun list
    
  2. ibmcloud ce jobrun get コマンドを使用して、ジョブ実行のインスタンスの名前など、ジョブ実行の詳細を取得します。例えば、次のようにします。

    ibmcloud ce jobrun get --name myjobrun
    

    出力例

    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    Getting events of jobrun 'myjobrun'...
    Run 'ibmcloud ce jobrun events -n myjobrun' to get the system events of the job run instances.
    Run 'ibmcloud ce jobrun logs -f -n myjobrun' to follow the logs of the job run instances.
    OK
    
    Name:          myjobrun
    [...]
    Created:       2021-03-03T14:47:04-05:00
    
    Image:                icr.io/codeengine/firstjob
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Mode:                  task
        Array Indices:         1 - 4
        Array Size:            4
        JOP_ARRAY_SIZE Value:  4
        Max Execution Time:    7200
        Retry Limit:           3
    
    Status:
        Completed:          28m
        Instance Statuses:
        Succeeded:  4
        Conditions:
        Type      Status  Last Probe  Last Transition
        Pending   True    28m         28m
        Running   True    28m         28m
        Complete  True    28m         28m
    
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    29m (x8 over 29m)  batch-job-controller  Updated JobRun "myjobrun"
        Normal  Completed  29m                batch-job-controller  JobRun completed successfully
    
    Instances:
        Name          Running  Status     Restarts  Age
        myjobrun-1-0  0/1      Succeeded  0         29m
        myjobrun-2-0  0/1      Succeeded  0         29m
        myjobrun-3-0  0/1      Succeeded  0         29m
        myjobrun-4-0  0/1      Succeeded  0         29m
    

    ジョブ実行に関するより詳細な詳細情報が必要な場合は、**jobrun get**コマンドで--o yamlオプションを使用します (例: ibmcloud ce jobrun get --name myjobrun --o yaml)。 このオプションは、ジョブ実行の CLI でより詳細な情報を表示するのに役立ちます。

  3. ジョブ実行のインスタンスのログを表示します。

    • ジョブ実行の特定のインスタンスのログを表示するには、ibmcloud ce jobrun logs --instance INSTANCE_NAME コマンドを使用します。例えば、次のようにします。

      ibmcloud ce jobrun logs --instance  myjobrun-4-0
      

      出力例

      Getting logs for job run instance 'myjobrun-4-0'...
      OK
      
      myjobrun-4-0/myjobrun:
      Hi from a batch job! My index is: 4
      
    • ジョブ実行のすべてのインスタンスのログを表示するには、ibmcloud ce jobrun logs --jobrun JOBRUN_NAMEコマンドを使用します。以下に例を示します。

      ibmcloud ce jobrun logs --jobrun myjobrun
      

      出力例

      Getting logs for all instances of job run 'myjobrun'...
      Getting jobrun 'myjobrun'...
      Getting instances of jobrun 'myjobrun'...
      OK
      
      myjobrun-1-0/myjobrun:
      Hi from a batch job! My index is: 1
      
      myjobrun-2-0/myjobrun:
      Hi from a batch job! My index is: 2
      
      myjobrun-3-0/myjobrun:
      Hi from a batch job! My index is: 3
      
      myjobrun-4-0/myjobrun:
      Hi from a batch job! My index is: 4
      

詳しくは、CLI を使用したジョブ・ログの表示を参照してください。

ジョブのシステム・イベント情報の取得

システム・イベント情報は、ジョブの実行時の問題をトラブルシューティングするために役立ちます。 CLI を使用してシステム・イベント情報を表示できます。

ジョブ実行のすべてのインスタンスのシステム・イベントを表示したり、ジョブ実行の特定のインスタンスのシステム・イベントを表示したりできます。

  1. ibmcloud ce jobrun listコマンドを使用して、定義済みのすべてのジョブ実行をリストします。以下に例を示します。

    ibmcloud ce jobrun list
    
  2. ibmcloud ce jobrun get コマンドを使用して、ジョブ実行のインスタンスの名前など、ジョブ実行の詳細を取得します。例えば、次のようにします。

    ibmcloud ce jobrun get --name myjobrun
    

    出力例

    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    Getting events of jobrun 'myjobrun'...
    OK
    
    Name:          myjobrun
    [...]
    Created:       2021-03-03T14:47:04-05:00
    
    Image:                icr.io/codeengine/firstjob
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Mode:                  task
        Array Indices:         1 - 4
        Array Size:            4
        JOP_ARRAY_SIZE Value:  4
        Max Execution Time:    7200
        Retry Limit:           3
    
    Status:
        Completed:          28m
        Instance Statuses:
        Succeeded:  4
        Conditions:
        Type      Status  Last Probe  Last Transition
        Pending   True    28m         28m
        Running   True    28m         28m
        Complete  True    28m         28m
    
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    29m (x8 over 29m)  batch-job-controller  Updated JobRun "myjobrun"
        Normal  Completed  29m                batch-job-controller  JobRun completed successfully
    
    Instances:
        Name          Running  Status     Restarts  Age
        myjobrun-1-0  0/1      Succeeded  0         29m
        myjobrun-2-0  0/1      Succeeded  0         29m
        myjobrun-3-0  0/1      Succeeded  0         29m
        myjobrun-4-0  0/1      Succeeded  0         29m
    

    ジョブ実行に関するより詳細な詳細情報が必要な場合は、**jobrun get**コマンドで--o yamlオプションを使用します (例: ibmcloud ce jobrun get --name myjobrun --o yaml)。 このオプションは、ジョブ実行の CLI でより詳細な情報を表示するのに役立ちます。

  3. ジョブ実行のインスタンスのシステム・イベントを表示します。

    • ジョブ実行の特定のインスタンスのイベントを表示するには、ibmcloud ce jobrun events --instance INSTANCE_NAME コマンドを使用します。例えば、次のようにします。

      ibmcloud ce jobrun events --instance myjobrun-4-0
      

      出力例

      Getting events for job run instance 'myjobrun-4-0'...
      OK
      
      myjobrun-4-0:
      Type    Reason     Age    Source                 Messages
      Normal  Scheduled  2m14s  default-scheduler      Successfully assigned 4svg40kna19/myjobrun-4-0 to 10.240.64.10
      Normal  Pulling    2m13s  kubelet, 10.240.64.10  Pulling image "icr.io/codeengine/firstjob"
      Normal  Pulled     2m12s  kubelet, 10.240.64.10  Successfully pulled image "icr.io/codeengine/firstjob" in 1.234456436s
      Normal  Created    2m11s  kubelet, 10.240.64.10  Created container myjobrun
      Normal  Started    2m11s  kubelet, 10.240.64.10  Started container myjobrun
      
    • ジョブ実行のすべてのインスタンスのイベントを表示するには、ibmcloud ce jobrun events --jobrun JUBRUN_NAMEコマンドを使用します。以下に例を示します。

      ibmcloud ce jobrun events --jobrun myjobrun
      

      出力例

      Getting jobrun 'myjobrun'...
      Getting instances of jobrun 'myjobrun'...
      Getting events for all instances of job run 'myjobrun'...
      OK
      
      myjobrun-1-0:
      Type    Reason     Age  Source                  Messages
      Normal  Scheduled  66s  default-scheduler       Successfully assigned 4svg40kna19/myjobrun-1-0 to 10.240.128.22
      Normal  Pulling    65s  kubelet, 10.240.128.22  Pulling image "icr.io/codeengine/firstjob"
      Normal  Pulled     64s  kubelet, 10.240.128.22  Successfully pulled image "icr.io/codeengine/firstjob" in 427.276949ms
      Normal  Created    64s  kubelet, 10.240.128.22  Created container myjobrun
      Normal  Started    64s  kubelet, 10.240.128.22  Started container myjobrun
      
      myjobrun-2-0:
      Type    Reason     Age  Source                Messages
      Normal  Scheduled  66s  default-scheduler     Successfully assigned 4svg40kna19/myjobrun-2-0 to 10.240.0.11
      Normal  Pulling    65s  kubelet, 10.240.0.11  Pulling image "icr.io/codeengine/firstjob"
      Normal  Pulled     63s  kubelet, 10.240.0.11  Successfully pulled image "icr.io/codeengine/firstjob" in 1.268252989s
      Normal  Created    63s  kubelet, 10.240.0.11  Created container myjobrun
      Normal  Started    63s  kubelet, 10.240.0.11  Started container myjobrun
      
      myjobrun-3-0:
      Type    Reason     Age  Source                Messages
      Normal  Scheduled  66s  default-scheduler     Successfully assigned 4svg40kna19/myjobrun-3-0 to 10.240.0.37
      Normal  Pulling    65s  kubelet, 10.240.0.37  Pulling image "icr.io/codeengine/firstjob"
      Normal  Pulled     63s  kubelet, 10.240.0.37  Successfully pulled image "icr.io/codeengine/firstjob" in 1.118647987s
      Normal  Created    63s  kubelet, 10.240.0.37  Created container myjobrun
      Normal  Started    63s  kubelet, 10.240.0.37  Started container myjobrun
      
      myjobrun-4-0:
      Type    Reason     Age  Source                 Messages
      Normal  Scheduled  66s  default-scheduler      Successfully assigned 4svg40kna19/myjobrun-4-0 to 10.240.64.10
      Normal  Pulling    65s  kubelet, 10.240.64.10  Pulling image "icr.io/codeengine/firstjob"
      Normal  Pulled     64s  kubelet, 10.240.64.10  Successfully pulled image "icr.io/codeengine/firstjob" in 1.234456436s
      Normal  Created    63s  kubelet, 10.240.64.10  Created container myjobrun
      Normal  Started    63s  kubelet, 10.240.64.10  Started container myjobrun
      

ジョブ実行インデックスが失敗する理由を理解する

コンソールでジョブ実行インデックスが失敗した場合、エラーと原因を調べ、問題のトラブルシューティング、問題の修正を行い、ジョブ実行インデックスを再実行することができます。

コンソールからジョブとジョブの実行を操作するには、 Code Engine コンソールでプロジェクトリストからプロジェクト名をクリックし、次に 「ジョブ」 をクリックします。 「ジョブ」タブからジョブを選択します。 ジョブの送信をクリックし、「ジョブの送信」パネルでジョブの送信ボタンをクリックすると、ジョブの実行インスタンスが表示されます。 未完了のジョブ実行は、 ステータス列Failed (<error>) と表示されます。 以下の表では、一般的なジョブ実行インデックスエラーと対応策について説明します

ジョブ実行エラーと失敗した理由のインデックス
エラー 説明 推奨されるユーザー操作
ContainerExitedCode ユーザーエラーには、ユーザーワークロードによって提供される終了コードが含まれます。 アプリケーション内で終了コードの理由を特定し、デバッグします。
ExceededEphemeralStorage インスタンスは、コンテナ内で許可されているよりも多くの一時ストレージを割り当てました。 リソースの一時ストレージを増やします。
ExecutableNotFound コンテナ内で指定された実行可能ファイルが見つかりません。 それがないとコンテナは起動できません。 コンテナイメージ内で指定されているエントリーポイントが正しいこと、およびその実行ファイルがイメージ内に存在することを確認してください。
MaxExecutionTimeExceeded ジョブの実行が最大実行時間内に完了しませんでした。 複数のインスタンスが実行されていた場合、まだ完了していないすべてのインスタンスにこのエラーが表示されます。 ジョブ実行タイムアウト値を増やします。
OOMKilled メモリ不足エラー。 インスタンスが割り当てられたメモリ制限を超えました。 リソースのCPUとメモリを増やします。

エラーに対処した後、 「失敗したインデックスの再実行」 をクリックして、失敗したインデックスに対してジョブを再度実行します。

ジョブのコンテナー・イメージ参照の検証

Code Engine ジョブを操作する場合、イメージにアクセスするためのコンテナー・イメージ参照とレジストリー・シークレットを指定する必要があります。 ジョブが正しく機能するためには、ジョブの存続期間中、イメージ参照とそのアクセス・プロパティーが有効なままでなければなりません。

イメージ参照を確認するにはどうすればよいですか? を参照してください。