인스턴스 디버깅

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

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

디버그 모드 사용 및 중지

gcloud를 사용하여 인스턴스의 디버그 모드를 사용 설정하거나 중지할 수 있습니다. 인스턴스를 디버깅하려면 해당 역할에 appengine.instances.enableDebug 권한이 있어야 합니다.

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. 프로젝트의 Google Cloud 콘솔 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  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. 인스턴스가 정상적인 작업을 다시 시작하도록 인스턴스의 디버깅을 중지합니다.

일반적인 컨테이너 이해

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

컨테이너 및 소스 코드 설명
cloud-sql Cloud SQL 인스턴스에 대한 보안 연결을 보장합니다.
fluentd_logger Logging 에이전트
nginx_proxy 애플리케이션에 대한 요청을 프록시합니다.
opentelemetry-collector 원격 분석 데이터를 수신 및 처리하고 내보냅니다.
stackdriver-monitoring-agent 시스템 정보를 수집, 저장, 모니터링합니다.

이러한 사이드카 컨테이너는 예고 없이 변경될 수 있습니다.