직렬 포트 출력 보기

가상 머신(VM) 인스턴스에는 4개의 가상 직렬 포트가 있습니다. 인스턴스의 운영체제, BIOS, 기타 시스템 수준 항목은 보통 직렬 포트에 출력을 쓰므로 직렬 포트 출력은 장애, 부팅 실패, 시작 또는 종료 문제를 해결하는 데 유용합니다.

이 페이지에서는 인스턴스가 중지되거나 삭제된 후에도 Cloud Logging을 사용하여 직렬 포트 출력을 보존하는 방법을 포함하여 직렬 포트 출력을 보는 방법을 설명합니다. 인스턴스가 실행 중일 때 직렬 포트에 명령어를 전송해야 하는 경우 직렬 콘솔과 상호작용을 참조하세요.

직렬 포트 출력은 Cloud Console, gcloud 도구, Compute Engine API를 통해 액세스할 수 있지만 VM 인스턴스가 실행되는 동안에만 액세스할 수 있습니다. 로그는 포트당 최근 1MB 출력으로 제한됩니다.

직렬 포트 출력 로깅을 사용 설정하면 Cloud Logging에서 매월 첫 50기가바이트(GiB)의 로깅을 무료로 제공하고 30일 동안 로그를 유지합니다.

시작하기 전에

직렬 포트 출력 로깅 사용 설정 및 중지

프로젝트 또는 인스턴스 수준 메타데이터를 설정하여 인스턴스가 Cloud Logging에 직렬 포트 출력을 전송할지 여부를 제어할 수 있습니다. 또한 조직 정책을 설정하여 조직의 모든 사용자를 대상으로 이 기능을 사용 중지할 수도 있습니다.

프로젝트 및 인스턴스 메타데이터 설정

Cloud Logging에 직렬 포트 출력 로깅 기능이 조직에서 제한되지 않으면 serial-port-logging-enable 메타데이터 항목을 true 또는 false로 설정하여 프로젝트와 개별 VM 인스턴스의 직렬 포트 출력 로깅을 사용 설정하거나 중지할 수 있습니다.

프로젝트 차원 메타데이터 항목을 설정하면 프로젝트의 모든 VM 인스턴스가 해당 설정을 암시적으로 상속합니다. 인스턴스 메타데이터 항목을 설정하면 프로젝트 설정과 관계없이 해당 VM에만 메타데이터 항목이 사용 설정됩니다.

Google Cloud Console, gcloud 도구 또는 Compute Engine API를 사용하여 메타데이터 항목을 설정할 수 있습니다. 자세한 내용은 커스텀 메타데이터 설정을 참조하세요.

예를 들어 다음 gcloud 도구 명령어는 프로젝트에 대해 Cloud Logging에 직렬 포트 출력 로깅을 사용 설정합니다.

gcloud compute project-info add-metadata \
    --metadata serial-port-logging-enable=true

마찬가지로 다음 gcloud 도구 명령어는 특정 인스턴스에 대해 Cloud Logging에 직렬 포트 출력 로깅을 사용 설정합니다.

gcloud compute instances add-metadata INSTANCE_NAME \
    --metadata serial-port-logging-enable=true

Cloud Logging에 직렬 포트 출력 로깅을 사용 중지하려면 serial-port-logging-enablefalse로 설정합니다.

gcloud compute instances add-metadata INSTANCE_NAME \
    --metadata serial-port-logging-enable=false

제외 필터

Cloud Logging 내에서 제외 필터를 만들어 로그 뷰어에서 특정 직렬 포트 항목을 삭제할 수 있습니다. 예를 들어 프로젝트 차원 메타데이터 항목이 serial-port-logging-enable=true로 설정된 경우 고급 필터를 사용하여 특정 VM 인스턴스에 대해 직렬 포트 출력 로깅을 사용 중지할 수 있습니다.

logName = "projects/PROJECT_ID/logs/serialconsole.googleapis.com%2Fserial_port_1_output"
resource.type = "gce_instance"
resource.labels.instance_id != "INSTANCE_1_ID"
resource.labels.instance_id != "INSTANCE_2_ID"

조직 정책 설정

Google Cloud 리소스의 특정 구성을 제한하는 조직 정책을 설정하여 조직 전체에서 Cloud Logging에 직렬 포트 출력 로깅 기능을 중지할 수 있습니다. 구체적으로 constraints/compute.disableSerialPortLogging과 같은 부울 제약조건을 설정합니다. 자세한 내용은 조직 정책 만들기 및 관리를 참조하세요.

constraints/compute.disableSerialPortLoggingtrue로 설정하여 직렬 포트 로깅을 사용 중지해도 소급 적용되지 않습니다. Cloud Logging에 직렬 포트 로깅을 사용 설정하는 메타데이터 항목이 있는 기존 VM 인스턴스의 경우 해당 인스턴스에 대해 메타데이터를 재설정하지 않는 한 Cloud Logging에 계속 로깅됩니다.

이러한 조직 제약조건을 true로 설정한 후에는 조직 내 어느 인스턴스에도 Cloud Logging에 대한 직렬 포트 출력 로깅을 사용 설정하도록 인스턴스 또는 프로젝트 메타데이터를 설정할 수 없습니다.

직렬 포트 출력 보기

Console

  1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 직렬 포트 출력을 보려는 VM 인스턴스를 선택합니다.

  3. 로그에서 직렬 포트 1, 2, 3 또는 4를 클릭합니다. 시스템 수준 항목은 일반적으로 직렬 콘솔이라고도 하는 첫 번째 직렬 포트(포트 1)를 사용합니다.

gcloud

gcloud compute instances get-serial-port-output 명령어를 사용합니다.

gcloud compute instances get-serial-port-output INSTANCE_NAME \
  --port PORT \
  --start START \
  --zone ZONE

다음을 바꿉니다.

  • INSTANCE_NAME: 인스턴스 이름입니다.
  • PORT: 출력을 보려는 포트의 번호(1, 2, 3 또는 4)입니다. 시스템 수준 항목은 일반적으로 직렬 콘솔이라고도 하는 첫 번째 직렬 포트(포트 1)를 사용합니다. 기본적으로 첫 번째 직렬 포트의 출력이 반환됩니다.
  • START: 반환되기를 원하는 첫 번째 바이트의 바이트 색인(0부터 시작)입니다. 너무 길어서 한 번에 반환할 수 없는 이전 요청의 출력을 계속 받으려면 이 플래그를 사용하세요.
  • ZONE: 인스턴스의 영역입니다.

API

API에서 instances.getSerialPortOutput 메서드에 대한 get 요청을 만듭니다.

GET https://compute.googleapis.com/compute/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/serialPort

Cloud Logging

  1. Cloud Logging에 직렬 포트 로깅 사용 설정
  2. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  3. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.

  4. 로그에서 Cloud Logging을 클릭하여 Cloud Logging 로그를 봅니다.

    Cloud Logging을 클릭하여 Cloud Logging 로그를 봅니다.

  5. 모든 로그 드롭다운 메뉴를 펼치고 보려는 직렬 포트 출력을 선택합니다. 시스템 수준 항목은 일반적으로 직렬 콘솔이라고도 하는 첫 번째 직렬 포트(포트 1)를 사용합니다. 드롭다운 메뉴에 포트가 나타나지 않으면 사용할 수 있는 출력이 없는 것입니다.

  6. 원하는 경우 모든 로그 수준 드롭다운 메뉴를 펼쳐서 보려는 심각도 수준 아래에 있는 로그를 숨깁니다. 예를 들어 '정보' 로그 수준을 선택하면 '디버그' 로그 항목이 숨겨집니다. '디버그' 항목은 일반적으로 부팅 시 BIOS에서만 사용합니다.

기본 필터링과 고급 필터링 정보를 포함한 자세한 내용은 로그 보기를 참조하세요.

UTF8 이외 문자 처리

직렬 포트 출력은 오픈소스 Abseil C++ 라이브러리의 CHexEscape() 메서드를 사용하여 이스케이프 처리되므로 UTF8 이외의 문자는 16진수 문자열로 인코딩됩니다. 해당하는 CUnescape() 메서드를 사용하여 직렬 포트로 전송된 정확한 출력을 가져올 수 있습니다.