Débogage des applications

Découvrez comment traiter les incidents liés aux applications IBM Cloud® Code Engine.

Si votre application ne se comporte pas comme prévu, consultez les journaux et les événements système pour obtenir des informations pouvant contribuer au débogage.

Limites d'application à prendre en compte

Le nombre maximal d'applications que vous pouvez créer par projet est de 40. Vous disposez d'un total de 120 révisions pour l'ensemble des applications d'un même projet. Code Engine ne conserve que la dernière révision inactive de votre application, en plus de la révision active de celle-ci. Les révisions plus anciennes sont supprimées. Voir Mise à jour des applications.

Pour plus d'informations sur les limites applicables aux applications, notamment en matière de mémoire et de CPU, consultez la page « Limites et quotas » sur Code Engine.

Avec l'interface de ligne de commande, vous pouvez utiliser la commande ibmcloud ce project get pour afficher des informations sur les limites et l'utilisation actuelle. Exemple :

ibmcloud ce project get --name myproject

Exemple de sortie

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

Confirmer la valeur du port

Code Engine nécessite que vous disposiez d'un point de terminaison HTTP que Code Engine utilise pour vérifier l'état de santé de votre application.

Par défaut, Code Engine part de l'hypothèse que les applications sont à l'écoute des connexions entrantes sur le port 8080. De plus, la commande Code Engine définit la variable d'environnement PORT sur la valeur du port sur lequel l'application est censée être à l'écoute. Si votre application doit écouter sur un port autre que le port 8080, vous pouvez soit la déployer depuis la console en spécifiant le port correct, soit utiliser l'option --port de la app create commande. Pour plus d'informations sur les variables d'environnement définies par Code Engine, voir Variables d'environnement injectées automatiquement. Les ports suivants sont réservés par Code Engine: 8022, 8008, 8012, 9090, 9091 et 15090. Un seul port peut être exposé en tant que port d'écoute.

Obtention des journaux pour mes applications

Les journaux peuvent être utiles pour identifier et résoudre les incidents lorsque vous exécutez des applications. Vous pouvez consulter les journaux d'application depuis la console ou l'interface de ligne de commande.

Lorsque vous consultez des journaux depuis la console, vous devez créer une instance d'IBM Cloud Logs dans la région dans laquelle se trouve votre projet Code Engine. Vous n'êtes pas obligé de créer cette instance avant de travailler avec votre application Code Engine. Code Engine facilite l'activation de la journalisation pour vos applications. Vous pouvez afficher les journaux d'application une fois les fonctions de journalisation ajoutées. Pour plus d'informations, voir Affichage des journaux d'application à partir de la console.

Lorsque vous utilisez l'interface de ligne de commande (CLI), vous pouvez afficher les journaux de toutes les instances d'une application ou ceux d'une instance spécifique de cette application.

  1. Utilisez la commande ibmcloud ce app list pour répertorier toutes vos applications définies dans votre projet ; par exemple,

    ibmcloud ce app list  
    
  2. Utilisez la commande ibmcloud ce app get pour obtenir les détails de votre application, incluant le nom des instances de l'application, par exemple :

    ibmcloud ce app get --name myapp  
    

    Exemple de sortie

    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
    

    Si vous souhaitez plus de détails à granularité fine sur votre application, utilisez l'option --o yaml avec la commande app get ; par exemple, ibmcloud ce app get --name myapp --o yaml. Cette option est utile pour afficher des informations plus détaillées dans l'interface de ligne de commande de l'application.

  3. Affichez les journaux des instances de votre application.

        ibmcloud ce app logs --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
        ```
        Exemple de sortie
    
        ```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/
        ```
    * Pour afficher les journaux de toutes les instances de votre application, utilisez la commande [**`app logs --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-logs) ; par exemple,
    
    ```txt {: pre}
        ibmcloud ce app logs --app myapp
        ```
        Exemple de sortie
    
        ```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/
        ```
    

Pour plus d'informations, voir Affichage des journaux d'application à l'aide de l'interface de ligne de commande.

Obtention de détails sur les instances d'application

Avec la console Code Engine, vous pouvez afficher les détails de toutes vos instances d'application. Les détails de vos instances d'application sont utiles si vous recevez un message d'avertissement sur les instances de votre application. Il se peut également que votre application ait le statut Prêt mais qu'elle ne fonctionne pas correctement car elle ne sert pas les demandes.

Pour plus de détails sur les instances d'application, accédez à la page d'application. Depuis la page d'application, vous pouvez accéder à l'onglet Instances et examiner les instances en cours de l'application. L'ensemble d'instances change à mesure que votre application est mise à l'échelle, en fonction de la configuration de mise à l'échelle. Utilisez les informations relatives aux instances d'application pour vous aider à identifier et résoudre les problèmes liés à votre application.

Le nombre de redémarrages correspond au nombre de redémarrages du conteneur utilisateur depuis la création de l'instance spécifique. La valeur de taux de redémarrage est considérée comme élevée si le nombre moyen de redémarrages du conteneur utilisateur depuis la création de l'instance est de 3 fois ou plus par jour.

Si nécessaire, utilisez des filtres pour vous aider à limiter les résultats de vos instances d'application. Vous pouvez choisir de filtrer le nom de la révision d'application ou le statut de l'instance d'application.

Vous pouvez passer en revue les détails d'une instance d'application spécifique pour un examen plus approfondi. Pour ouvrir la page des détails d'une instance spécifique, effectuez l'une des actions suivantes.

  • Cliquez sur la ligne de l'instance de votre choix.
  • Cliquez sur l'icône Actions Actions > Détails de l'instance pour afficher les détails de l'instance spécifiée.

Utilisez les informations supplémentaires de la page des détails de l'instance pour vous aider à identifier et résoudre les problèmes liés à votre application. Vous pouvez utiliser les informations sur les heures de démarrage et de redémarrage, les informations de code de sortie et de code anomalie, le statut du conteneur et les derniers messages de journal pour vous aider à déboguer votre application. Un conteneur utilisateur inclut votre code d'exécution (l'image que vous avez spécifiée lors de la création de l'application). Alors qu'un conteneur système gère des tâches système telles que le transfert de demandes au conteneur utilisateur ou la collecte de métriques.

Les scénarios suivants sont des exemples dans lesquels vous pouvez utiliser les détails de l'instance d'application spécifique pour vous aider à identifier et résoudre les problèmes liés à votre application.

  • Si l'application est en état « prêt », mais qu'elle ne traite pas les requêtes HTTP, consultez les détails des instances spécifiques de l'application pour connaître les raisons pour lesquelles l'instance de l'application ne traite pas les requêtes HTTP.
  • Si vous disposez d'une instance dont le statut est failed, l'image de l'application n'est peut-être pas valide ou n'est peut-être pas disponible.
  • Si le nombre de redémarrages d'une instance est élevé, il se peut que votre application ait échoué en raison d'une erreur de programmation, que la limite de stockage temporaire ait été atteinte ou qu'une condition de mémoire insuffisante se soit produite. Lorsque ce scénario se produit, l'instance est arrêtée et redémarrée en permanence. Les informations sur l'heure du dernier redémarrage peuvent vous aider à déterminer si l'instance d'application présente un problème continu qui provoque des redémarrages ou si le problème est peu fréquent.

Obtention des informations sur les événements système pour mes applications

Les informations d'événement système peuvent être utiles pour identifier et résoudre les incidents lorsque vous exécutez des applications. Vous pouvez afficher des informations sur les événements système depuis l'interface de ligne de commande.

Vous pouvez afficher des évènements système pour toutes les instances d'une application ou afficher des évènements système d'une instance spécifique d'une application.

  1. Utilisez la commande ibmcloud ce app list pour répertorier toutes vos applications définies ; par exemple,

    ibmcloud ce app list  
    
  2. Utilisez la commande ibmcloud ce app get pour obtenir les détails de votre application, incluant le nom des instances de l'application, par exemple :

    ibmcloud ce app get --name myapp  
    

    Exemple de sortie

    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
    

    Si vous souhaitez plus de détails à granularité fine sur votre application, utilisez l'option --o yaml avec la commande app get ; par exemple, ibmcloud ce app get --name myapp --o yaml. Cette option est utile pour afficher des informations plus détaillées dans l'interface de ligne de commande de l'application.

  3. Affichez les événements système des instances de votre application.

        ibmcloud ce app events --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
        ```
        Exemple de sortie
    
        ```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
        [...]
        ```
    * Pour afficher les évènements de toutes les instances de votre application, utilisez la commande [**`ibmcloud ce app events --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-events) ; par exemple,
    
    ```txt {: pre}
        ibmcloud ce app events --app myapp
        ```
        Exemple de sortie
    
        ```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
        [...]
        ```
    

Vérification de la référence d'image de conteneur pour mon application

Lorsque vous utilisez des applications Code Engine, vous devez spécifier une référence d'image de conteneur et un secret de registre pour accéder à l'image. Pour que l'application fonctionne correctement, la référence d'image et ses propriétés d'accès doivent rester valides pendant toute la durée de vie de l'application.

Voir Comment vérifier ma référence d'image?