Depurando apps

Use as dicas de resolução de problemas para aprender a solucionar problemas de aplicativos IBM Cloud® Code Engine.

Quando o seu app não está se comportando como o esperado, a análise dos logs e eventos do sistema pode fornecer informações que podem ajudá-lo a depurar o problema.

Limites de app a considerar

O número máximo de aplicativos que você pode criar por projeto é 40. Você está limitado a um total de 120 revisões para todos os aplicativos por projeto. O Code Engine mantém apenas a revisão inativa mais recente do seu aplicativo, além da revisão ativa do mesmo. As revisões mais antigas são excluídas. Veja Atualizando apps.

Para obter mais informações sobre os limites para aplicativos, incluindo memória e CPU, consulte “Limites e cotas para o Code Engine ”.

Com a CLI, é possível usar o comando ibmcloud ce project get para exibir informações sobre limites e uso atual. Por exemplo:

ibmcloud ce project get --name myproject

Saída de exemplo

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

Confirmar valor da porta

Code Engine exige que você tenha um endpoint HTTP que o Code Engine usa para verificar o estado de funcionamento do seu aplicativo.

Por padrão, o Code Engine assume que os apps atendem as conexões recebidas na porta 8080. Além disso, o comando Code Engine define a variável de ambiente PORT com o valor da porta na qual se espera que o aplicativo esteja escutando. Se seu aplicativo precisar escutar em uma porta diferente da porta 8080, implante-o pelo console e especifique a porta correta ou use a opção --port no app create comando. Para obter mais informações sobre variáveis de ambiente que são configuradas pelo Code Engine, consulte Variáveis de ambiente injetadas automaticamente. As seguintes portas são reservadas por Code Engine: 8022, 8008, 8012, 9090, 9091 e 15090. Apenas uma porta pode ser exposta como a porta de atendimento

Obtendo logs para meus apps

Os logs podem ser úteis para solucionar problemas ao executar apps. É possível visualizar logs do app no console ou com a CLI.

Ao visualizar logs no console, deve-se criar uma instância do IBM Cloud Logs na mesma região de seu projeto do Code Engine. Você não é obrigado a criar esta instância antes de trabalhar com seu app do Code Engine. O Code Engine facilita ativar a criação de logs para seus apps. É possível visualizar logs do app depois de incluir recursos de criação de log. Para obter mais informações, consulte visualizando logs do app no console.

Ao trabalhar com a CLI, é possível exibir os logs de todas as instâncias de um aplicativo ou os logs de uma instância específica do aplicativo.

  1. Use o comando ibmcloud ce app list para listar todos os seus apps definidos em seu projeto; por exemplo,

    ibmcloud ce app list  
    
  2. Use o comando ibmcloud ce app get para obter os detalhes do seu app, incluindo o nome das instâncias para o app; por exemplo,

    ibmcloud ce app get --name myapp  
    

    Saída de exemplo

    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
    

    Se você quiser maior detalhamento sobre seu app, use a opção --o yaml com o comando app get; por exemplo, ibmcloud ce app get --name myapp --o yaml. Esta opção é útil para mostrar informações mais detalhadas na CLI para o app.

  3. Exiba os logs de instâncias de seu app.

        ibmcloud ce app logs --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
        ```
        Saída de exemplo
    
        ```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/
        ```
    * Para exibir os logs de todas as instâncias de seu app, use o comando [**`app logs --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-logs); por exemplo,
    
    ```txt {: pre}
        ibmcloud ce app logs --app myapp
        ```
        Saída de exemplo
    
        ```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/
        ```
    

Para obter mais informações, consulte Visualizando logs do aplicativo com a CLI.

Obtendo detalhes sobre instâncias do app

Com o console do Code Engine, é possível visualizar detalhes de todas as instâncias do app. Os detalhes de suas instâncias do app serão úteis se você receber uma mensagem de aviso sobre instâncias do app. Ou talvez seu aplicativo esteja em um status pronto, mas o aplicativo não está funcionando corretamente, pois não está atendendo solicitações.

Para obter detalhes de instâncias do app, acesse a página do aplicativo Na página do aplicativo, é possível acessar a guia Instâncias e revisar instâncias atuais do aplicativo. O conjunto de instâncias muda conforme seu aplicativo é escalado para cima e para baixo, com base na configuração de ajuste de escala. Use as informações sobre as instâncias do app para ajudar na resolução de problemas do app.

A contagem de reinicialização é o número de vezes que o contêiner do usuário foi reiniciado desde a criação da instância específica. O valor da taxa de reinicialização será considerado alto se o número médio de reinicializações do contêiner do usuário desde que a instância foi criada for 3 ou mais vezes por dia.

Conforme necessário, use filtros para ajudar a limitar os resultados para suas instâncias do app. É possível optar por filtrar o nome da revisão do app ou o status da instância do app

É possível revisar detalhes de uma instância de app específica para uma aparência mais profunda.. Para abrir a página de detalhes da instância para uma instância específica, execute uma das ações a seguir:

  • Clique na linha da instância desejada.
  • Clique no ícone Ações Ações > Detalhes da Instância para visualizar detalhes da instância especificada..

Use as informações adicionais na página de detalhes da instância para ajudar a solucionar problemas de seu app. É possível usar as informações sobre horários de início e de reinicialização, informações de código de saída e de código de razão, status do contêiner e as últimas mensagens de log para ajudá-lo a depurar seu app Um contêiner de usuário inclui seu código de execução (a imagem que você especificou quando criou o app. Considerando que um contêiner do sistema manipula tarefas do sistema, como encaminhar solicitações para o contêiner do usuário ou coletar métricas.

Os cenários a seguir são exemplos de quando você pode usar detalhes da instância de app específica para ajudar a solucionar problemas de seu app:

  • Se o aplicativo estiver no status “pronto”, mas não estiver atendendo a solicitações do tipo HTTP, consulte os detalhes de instâncias específicas do aplicativo para saber os motivos pelos quais a instância do aplicativo não está atendendo a solicitações do tipo HTTP.
  • Se você tiver uma instância no status failed, talvez a imagem para o aplicativo não seja válida ou não esteja disponível.
  • Se a contagem de reinicialização para uma instância for alta, talvez seu aplicativo tenha falhado devido a um erro de programação, o limite de armazenamento efêmero foi atingido ou uma condição de falta de memória ocorre. Quando esse cenário acontece, a instância é continuamente interrompida e reiniciada.. As últimas informações de tempo de reinicialização podem ajudar a determinar se a instância do app tem um problema contínuo que causa reinicializações ou se o problema é pouco frequente.

Obtendo informações do evento do sistema para meus apps

As informações de evento do sistema podem ser úteis para solucionar problemas quando você executa apps. É possível visualizar informações do evento do sistema com a CLI.

É possível exibir eventos do sistema para todas as instâncias de um app ou exibir eventos do sistema de uma instância específica de um app.

  1. Use o comando ibmcloud ce app list para listar todos os apps definidos; por exemplo,

    ibmcloud ce app list  
    
  2. Use o comando ibmcloud ce app get para obter os detalhes do seu app, incluindo o nome das instâncias para o app; por exemplo,

    ibmcloud ce app get --name myapp  
    

    Saída de exemplo

    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
    

    Se você quiser maior detalhamento sobre seu app, use a opção --o yaml com o comando app get; por exemplo, ibmcloud ce app get --name myapp --o yaml. Esta opção é útil para mostrar informações mais detalhadas na CLI para o app.

  3. Exiba os eventos do sistema de instâncias de seu app.

        ibmcloud ce app events --instance myapp-atfte-2-deployment-7cb45cdf67-qc7sb
        ```
        Saída de exemplo
    
        ```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
        [...]
        ```
    * Para exibir os eventos para todas as instâncias de seu app, use o comando [**`ibmcloud ce app events --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-events); por exemplo,
    
    ```txt {: pre}
        ibmcloud ce app events --app myapp
        ```
        Saída de exemplo
    
        ```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
        [...]
        ```
    

Verificando a referência de imagem de contêiner para meu app

Ao trabalhar com apps Code Engine, deve-se especificar uma referência de imagem de contêiner e um segredo de registro para acessar a imagem. Para que o aplicativo funcione corretamente, a referência de imagem e suas propriedades de acesso devem permanecer válidas durante a vida do aplicativo

Consulte Como verificar minha referência de imagem?