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.
-
Use o comando
ibmcloud ce app listpara listar todos os seus apps definidos em seu projeto; por exemplo,ibmcloud ce app list -
Use o comando
ibmcloud ce app getpara obter os detalhes do seu app, incluindo o nome das instâncias para o app; por exemplo,ibmcloud ce app get --name myappSaí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 52sSe você quiser maior detalhamento sobre seu app, use a opção
--o yamlcom o comandoapp 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. -
Exiba os logs de instâncias de seu app.
- Para exibir os logs de uma instância específica do seu app, use o comando
ibmcloud ce app logs --instance INSTANCE_NAME; por exemplo,
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 exibir os logs de uma instância específica do seu app, use o comando
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
> 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.
-
Use o comando
ibmcloud ce app listpara listar todos os apps definidos; por exemplo,ibmcloud ce app list -
Use o comando
ibmcloud ce app getpara obter os detalhes do seu app, incluindo o nome das instâncias para o app; por exemplo,ibmcloud ce app get --name myappSaí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 52sSe você quiser maior detalhamento sobre seu app, use a opção
--o yamlcom o comandoapp 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. -
Exiba os eventos do sistema de instâncias de seu app.
- Para exibir os eventos de uma instância específica de seu app, use o comando
ibmcloud ce app events --instance INSTANCE_NAME; por exemplo,
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 [...] ``` - Para exibir os eventos de uma instância específica de seu app, use o comando
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