VM에 디버그 모드를 사용 설정할 수 있습니다. 디버그 모드에서 프로젝트에 대해 소유자, 편집자, App Engine 관리자 역할이 있는 주 구성원은 VM에 대해 루트 액세스 권한을 갖습니다. 디버그 모드가 사용되는 동안 운영체제 업데이트 및 보안 패치 자동 출시는 중지됩니다. 그러나 VM은 계속 부하 분산기 풀에서 외부 요청을 수신합니다.
디버깅을 사용 설정하거나 중지할 때마다 'VM 인스턴스 디버깅 사용 설정/중지' 이벤트가 Google Cloud 콘솔에 표시되고 이벤트가 VM의 /var/log/syslog.log
파일에 로깅됩니다.
디버그 모드 사용 및 중지
gcloud
를 사용하여 인스턴스의 디버그 모드를 사용 설정하거나 중지할 수 있습니다. 인스턴스를 디버깅하려면 해당 역할에 appengine.instances.enableDebug
권한이 있어야 합니다.
gcloud
에서 디버그 모드를 사용 설정 및 중지하려면 다음 안내를 따르세요.
-
다음과 같이 gcloud app instances enable-debug 명령어를 사용하여 특정 인스턴스와 버전의 VM을 디버깅합니다.
gcloud app --project PROJECT-ID instances enable-debug
PROJECT-ID를 자체 프로젝트 ID로 바꾸고 안내에 따라 디버깅할 인스턴스 버전을 지정합니다. -
디버깅을 마치면 다음과 같이 디버그 모드를 중지합니다.
gcloud app --project PROJECT-ID instances disable-debug
표시되는 메시지에 따라 인스턴스 버전을 지정합니다.
디버그 모드를 중지하면 VM이 중지되고 앱의 새 인스턴스가 시작되어 새 VM에서 실행됩니다.
인스턴스에 연결
Console
콘솔에서 인스턴스에 연결하려면 다음 단계를 따르세요.
- 프로젝트의 Google Cloud 콘솔 인스턴스 페이지로 이동합니다.
-
액세스하려는 인스턴스가 포함된 행의 오른쪽 끝에 있는 SSH를 클릭합니다.
그러면 인스턴스가 디버그 모드로 전환되고 터미널 창에서 인스턴스의 SSH 세션이 열립니다.
드롭다운 목록에서 다른 옵션을 선택하여 SSH 세션을 시작할 수도 있습니다.
- 이 때 사용자는 컨테이너 여러 개가 실행 중인 인스턴스 호스트에 있습니다. 자세한 내용은 다음의 일반적인 컨테이너 이해를 참조하세요.
-
터미널 창에서 인스턴스에서 실행 중인 컨테이너를 나열합니다.
sudo docker ps
-
sudo docker ps
명령어 결과에서 각 컨테이너를 행별로 나열합니다. 여기서 프로젝트 ID가 포함된 행을 찾습니다. 이 행이 코드를 실행하고 있는 컨테이너입니다. 이 컨테이너 이름을 확인합니다. -
필요한 경우 다음을 호출하여 애플리케이션의 로깅 정보를 나열합니다.
sudo docker logs CONTAINER-NAME
-
코드를 실행 중인 컨테이너에서 셸을 시작합니다.
sudo docker exec -it CONTAINER-NAME /bin/bash
-
디버깅을 마치면
exit
를 입력하여 컨테이너를 종료한 후exit
를 다시 입력하여 SSH 세션을 종료합니다. - 인스턴스가 정상적인 작업을 다시 시작하도록 인스턴스의 디버깅을 중지합니다.
gcloud
gcloud를 사용하여 인스턴스에 연결하려면 다음 단계를 따르세요.
-
디버깅을 사용 설정한 인스턴스에서 다음 명령어를 호출합니다.
gcloud beta app instances --project PROJECT-ID ssh INSTANCE-NAME --service SERVICE --version VERSION
- 이 때 사용자는 컨테이너 여러 개가 실행 중인 인스턴스 호스트에 있습니다. 자세한 내용은 다음의 일반적인 컨테이너 이해를 참조하세요.
-
터미널 창에서 인스턴스에서 실행 중인 컨테이너를 나열합니다.
sudo docker ps
-
sudo docker ps
명령어 결과에서 각 컨테이너를 행별로 나열합니다. 여기서 프로젝트 ID가 포함된 행을 찾습니다. 이 행이 코드를 실행하고 있는 컨테이너입니다. 이 컨테이너 이름을 확인합니다. -
필요한 경우 다음을 호출하여 애플리케이션의 로깅 정보를 나열합니다.
sudo docker logs CONTAINER-NAME
-
코드를 실행 중인 컨테이너에서 셸을 시작합니다.
docker exec -it CONTAINER-NAME /bin/bash
-
디버깅을 마치면
exit
를 입력하여 컨테이너를 종료한 후exit
를 다시 입력하여 SSH 세션을 종료합니다. - 인스턴스가 정상적인 작업을 다시 시작하도록 인스턴스의 디버깅을 중지합니다.
일반적인 컨테이너 이해
인스턴스에는 애플리케이션 코드를 실행하는 컨테이너 외에 다음과 같은 컨테이너도 있을 수 있습니다.
컨테이너 및 소스 코드 | 오픈소스 조직 | 설명 |
---|---|---|
fluentd_logger | fluentd.org/ | Logging 에이전트 |
memcache_proxy | memcache 프록시 오픈소스 | 애플리케이션에 Memcache 기능을 제공합니다. |
nginx_proxy | nginx.org | 애플리케이션에 대한 요청을 프록시합니다. |