인스턴스 디버깅

VM의 디버그 모드를 사용 설정할 수 있습니다. 디버그 모드에서 소유자, 편집자, App Engine 관리자 역할을 가진 프로젝트 구성원은 VM 루트 액세스 권한을 가집니다. 디버그 모드가 사용되는 동안 운영체제 업데이트 및 보안 패치 자동 배포는 사용 중지됩니다. 그러나 VM은 여전히 부하 분산기 풀의 일부이며 외부 요청을 계속 수신합니다.

디버깅을 사용하거나 중지할 때마다 Google Cloud Platform 콘솔에 'VM 인스턴스 디버깅 사용/중지' 이벤트가 표시되며 이 이벤트는 VM의 /var/log/syslog.log 파일에 로깅됩니다.

디버그 모드 사용 및 중지

gcloud를 사용하여 인스턴스의 디버그 모드를 사용 및 중지할 수 있습니다.

gcloud에서 디버그 모드를 사용 및 중지하려면 다음 안내를 따르세요.

  1. 다음과 같이 gcloud app instances enable-debug 명령어를 사용하여 특정 인스턴스 및 버전의 VM을 디버깅합니다.
    gcloud app --project [PROJECT-ID] instances enable-debug
    PROJECT-ID를 자신의 프로젝트 ID로 바꾸고 표시되는 메시지를 따라 디버깅할 인스턴스 버전을 지정합니다.
  2. 디버깅을 마치면 다음과 같이 디버그 모드를 중지합니다.
    gcloud app --project [PROJECT-ID] instances disable-debug
    표시되는 메시지에 따라 인스턴스 버전을 지정합니다.

디버그 모드를 중지하면 VM이 중지되고 앱의 새 인스턴스가 시작되어 새 VM에서 실행됩니다.

인스턴스에 연결

콘솔

콘솔에서 인스턴스에 연결하려면 다음 안내를 따르세요.

  1. 프로젝트의 GCP 콘솔 인스턴스 페이지를 방문합니다.
    인스턴스 페이지로 이동
  2. 액세스할 인스턴스가 포함된 행의 오른쪽 끝에 있는 SSH를 클릭합니다.

    그러면 인스턴스가 디버그 모드로 전환되며 인스턴스의 SSH 세션이 터미널 창에서 열립니다.

    다른 옵션을 선택하여 드롭다운 목록에서 SSH 세션을 시작할 수도 있습니다.

  3. 이때 사용자는 여러 개의 컨테이너가 실행 중인 인스턴스 호스트에 있습니다. 이러한 항목에 대한 자세한 내용은 일반적인 컨테이너 이해를 참조하세요.
  4. 터미널 창에서 인스턴스에서 실행 중인 컨테이너를 나열합니다.
    sudo docker ps
  5. sudo docker ps 명령어 출력은 각 컨테이너를 행별로 나열합니다. 프로젝트 ID가 포함된 행을 찾습니다. 이것이 코드를 실행 중인 컨테이너입니다. 이 컨테이너의 이름을 확인합니다.
  6. 필요한 경우, 다음을 호출하여 애플리케이션의 로깅 정보를 나열합니다.
    sudo docker logs [CONTAINER-NAME]
  7. 코드를 실행 중인 컨테이너에서 셸을 시작합니다.
    sudo docker exec -it [CONTAINER-NAME] /bin/bash
  8. 디버깅을 마치면 exit를 입력하여 컨테이너를 종료한 후 다시 exit를 입력하여 SSH 세션을 종료합니다.
  9. 인스턴스의 디버깅을 중지하여 인스턴스가 정상적인 작업을 다시 시작하도록 합니다.

gcloud

gcloud를 사용하여 인스턴스에 연결하려면 다음 안내를 따르세요.

  1. 디버깅을 사용 설정한 인스턴스에서 다음 명령어를 호출합니다.
    gcloud beta app instances --project [PROJECT-ID] ssh [INSTANCE-NAME] --service [SERVICE] --version [VERSION]
  2. 이때 사용자는 여러 개의 컨테이너가 실행 중인 인스턴스 호스트에 있습니다. 이러한 항목에 대한 자세한 내용은 일반적인 컨테이너 이해를 참조하세요.
  3. 터미널 창에서 인스턴스에서 실행 중인 컨테이너를 나열합니다.
    sudo docker ps
  4. sudo docker ps 명령어 출력은 각 컨테이너를 행별로 나열합니다. 프로젝트 ID가 포함된 행을 찾습니다. 이것이 코드를 실행 중인 컨테이너입니다. 이 컨테이너의 이름을 확인합니다.
  5. 필요한 경우, 다음을 호출하여 애플리케이션의 로깅 정보를 나열합니다.
    sudo docker logs [CONTAINER-NAME]
  6. 코드를 실행 중인 컨테이너에서 셸을 시작합니다.
    docker exec -it [CONTAINER-NAME] /bin/bash
  7. 디버깅을 마치면 exit를 입력하여 컨테이너를 종료한 후 다시 exit를 입력하여 SSH 세션을 종료합니다.
  8. 인스턴스의 디버깅을 중지하여 인스턴스가 정상적인 작업을 다시 시작하도록 합니다.

일반적인 컨테이너 이해

인스턴스에는 애플리케이션 코드를 실행하는 컨테이너 외에 다음과 같은 컨테이너도 있을 수 있습니다.

컨테이너 및 소스 코드 오픈소스 조직 설명
fluentd_logger fluentd.org/ 로깅 에이전트입니다.
memcache_proxy Memcache 프록시 오픈소스 애플리케이션에 Memcache 기능을 제공합니다.
nginx_proxy nginx.org 애플리케이션에 요청을 프록시합니다.
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Node.js 문서용 App Engine 가변형 환경