앱 디버깅
문제점 해결 팁을 사용하여 IBM Cloud® Code Engine 애플리케이션의 문제점 해결 방법을 알아보십시오.
앱이 예상대로 작동하지 않는 경우, 로그 및 시스템 이벤트를 보면 문제점을 디버그하는 데 도움이 될 수 있는 정보가 있습니다.
고려할 앱 제한사항
프로젝트당 생성할 수 있는 앱의 최대 개수는 40개입니다. 프로젝트당 모든 앱에 대해 총 120회의 수정 횟수로 제한됩니다. Code Engine 은 활성 앱 수정본 외에도 해당 애플리케이션의 가장 최근 비활성 수정본만 보관합니다. 이전 개정은 삭제됩니다. 앱 업데이트를 참조하십시오.
메모리 및 CPU를 포함한 앱 제한 사항에 대한 자세한 내용은 ‘ Code Engine 의 제한 및 할당량’을 참조하세요.
CLI를 사용하면 ibmcloud ce project get 명령을 사용하여 한계 및 현재 사용량에 대한 정보를 표시할 수 있습니다. 예를 들어, 다음과 같습니다.
ibmcloud ce project get --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에서 수신 연결을 청취한다고 가정합니다. 또한, Code Engine는 PORT 환경 변수를 애플리케이션이 수신 대기할 것으로 예상되는 포트 값으로 설정합니다. --port 앱이 8080 포트 이외의 다른 포트에서 연결을 수신해야 하는
경우, 콘솔에서 앱을 배포할 때 올바른 포트를 지정하거나 app create 명령에서 xml-ph-0001@deepl.internal 옵션을 사용하십시오. Code Engine에서 설정한 환경 변수에 대한 자세한 정보는 자동으로 삽입된 환경 변수를 참조하십시오.
다음 포트는 Code Engine에 의해 예약됩니다. 8022, 8008, 8012, 9090, 9091 및 15090. 하나의 포트만 청취 포트로 노출될 수 있습니다.
내 앱의 로그 가져오기
로그는 앱 실행 시 문제점을 해결하는 데 도움이 될 수 있습니다. 콘솔 또는 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 ``` 출력 예 ```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/ ``` * 모든 앱 인스턴스에 대한 로그를 표시하려면 [**`app logs --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-logs) 명령을 사용하십시오. 예를 들면 다음과 같습니다. ```txt {: pre} ibmcloud ce app logs --app myapp ``` 출력 예 ```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/ ``` - 앱의 특정 인스턴스에 대한 로그를 표시하려면
자세한 정보는 CLI를 사용하여 애플리케이션 로그 보기를 참조하십시오.
앱 인스턴스에 대한 세부사항 가져오기
Code Engine 콘솔을 사용하여 모든 앱 인스턴스의 세부사항을 볼 수 있습니다. 앱 인스턴스의 세부사항은 앱의 인스턴스에 대한 경고 메시지를 수신하는 경우에 유용합니다. 또는 앱이 준비 상태이지만 앱이 요청을 제공하지 않으므로 올바르게 작동하지 않을 수 있습니다.
앱 인스턴스의 세부사항을 보려면 애플리케이션 페이지로 이동하십시오. 애플리케이션 페이지에서 인스턴스 탭으로 이동하여 애플리케이션의 현재 인스턴스를 검토할 수 있습니다. 스케일링 구성 에 따라 애플리케이션이 스케일링 업 및 스케일링 다운되면 인스턴스 세트가 변경됩니다. 앱 인스턴스에 대한 정보를 사용하여 앱의 문제점 해결을 지원하십시오.
재시작 수는 특정 인스턴스가 작성된 이후 사용자 컨테이너가 재시작된 횟수입니다. 인스턴스가 작성된 이후 사용자 컨테이너가 다시 시작되는 평균 횟수가 하루에 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 ``` 출력 예 ```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 [...] ``` * 모든 앱 인스턴스에 대한 이벤트를 표시하려면 [**`ibmcloud ce app events --application APP_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-application-events) 명령을 사용하십시오. 예를 들면 다음과 같습니다. ```txt {: pre} ibmcloud ce app events --app myapp ``` 출력 예 ```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 [...] ``` - 앱의 특정 인스턴스에 대한 이벤트를 표시하려면
내 앱에 대한 컨테이너 이미지 참조 확인
Code Engine 앱에 대해 작업할 때 이미지에 액세스하기 위한 컨테이너 이미지 참조 및 레지스트리 시크릿을 지정해야 합니다. 앱이 올바르게 작동하려면 이미지 참조 및 해당 액세스 특성이 앱의 수명 동안 유효해야 합니다.
내 이미지 참조를 확인하는 방법 을 참조하십시오.