라이선스 보고를 위한 VM 및 단독 테넌트 노드 사용량 모니터링


Windows Server와 같이 운영체제에 사용자 라이선스를 사용하는 경우 계약 의무에 따라 이러한 라이선스를 사용 중인 VM 인스턴스, 물리적 서버, 물리적 CPU 코어 수를 모니터링하고 보고해야 할 수 있습니다.

이 문서에서는 오픈소스 도구인 License Tracker를 사용하여 사용 중인 VM 인스턴스, 물리적 서버, 물리적 CPU 코어 수를 모니터링하는 방법과 Looker Studio를 사용하여 결과를 시각화하는 방법을 설명합니다.

License Tracker 도구는 Compute Engine 감사 로그를 분석하여 각 VM 인스턴스의 배치를 확인하는 방식으로 작동합니다. 배치는 VM 인스턴스가 특정 물리적 서버에서 실행되는 기간을 설명합니다. 하나의 물리적 서버에서 다른 물리적 서버로 VM이 마이그레이션될 때마다 하나의 배치가 종료로 표시되고 또 다른 배치가 시작됩니다.

예를 들어 지금 시작되고 몇 개월 후 다시 중지되는 VM 인스턴스가 있다고 가정해보세요. 런타임 중 특정 시점에서 이 VM은 Server 1에서 Server 2로 자동으로 마이그레이션되고 이후 다시 Server 1로 마이그레이션됩니다. 이러한 기록은 3개의 배치에 해당합니다.

여러 배치

License Tracker 도구를 처음 실행하면 이전 90일 동안의 Compute Engine 사용량을 분석하고 결과를 BigQuery에 기록합니다. 이후 실행 시에는 도구가 마지막 실행 시간과 현재 일자 사이의 델타 값을 분석하여 BigQuery 데이터 세트를 그에 따라 업데이트합니다.

License Tracker 도구는 IAP 데스크톱에서 제공하는 사용량 보고 기능을 대체합니다.

비용

이 가이드에서는 다음과 같은 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

License Tracker 도구 배포

이 섹션에서는 License Tracker 도구를 하루 한 번 자동으로 실행하도록 Cloud Run 및 Cloud Scheduler를 설정하는 방법을 설명합니다.

다음 다이어그램은 이 문서에 설명된 솔루션을 보여줍니다.

  • License Tracker 도구는 Cloud Run에 배포되고 하나 이상의 프로젝트 로그를 분석하도록 구성됩니다.
  • 하루 한 번 Cloud Scheduler가 Cloud Run 작업을 트리거하여 License Tracker 도구가 BigQuery 데이터 세트를 업데이트합니다.
  • Looker Studio 대시보드는 BigQuery의 데이터를 시각화하여 사용자에게 제공합니다.

아키텍처

프로젝트 만들기

Cloud Run 및 Cloud Scheduler를 설정하려면 새 프로젝트를 만듭니다.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API BigQuery, Cloud Logging, Resource Manager, Cloud Build, Cloud Scheduler, and Cloud Run 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. API BigQuery, Cloud Logging, Resource Manager, Cloud Build, Cloud Scheduler, and Cloud Run 사용 설정

    API 사용 설정

애플리케이션 배포

이제 License Tracker 도구를 Cloud Run에 배포합니다.

  1. Google Cloud Console에서 Cloud Shell 활성화 Cloud Shell 활성화 버튼을 클릭하여 Cloud Shell을 엽니다.

    Google Cloud Console로 이동

  2. 프로젝트 ID를 포함하도록 환경 변수를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  3. 배포할 Cloud Run 리전을 설정합니다.

    gcloud config set run/region REGION
    

    REGIONCloud Run 및 Cloud Scheduler를 지원하는 리전으로 바꿉니다.

  4. 도구에 대한 서비스 계정을 만듭니다.

    SERVICE_ACCOUNT=$(gcloud iam service-accounts create license-tracker \
      --display-name "License Tracker" \
      --format "value(email)")
    
  5. 서비스가 BigQuery 데이터 세트를 만들고 액세스하고 동일한 프로젝트에서 Cloud Run 작업을 시작하도록 허용합니다.

    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
      --member "serviceAccount:$SERVICE_ACCOUNT" \
      --role "roles/bigquery.admin"
    
    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
      --member "serviceAccount:$SERVICE_ACCOUNT" \
      --role "roles/run.invoker"
    
  6. Cloud Build가 Cloud Run 배포를 수행하고 Cloud Scheduler 작업을 관리하도록 허용합니다.

    PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get-value core/project) --format='value(projectNumber)') \
    
    gcloud iam service-accounts add-iam-policy-binding $SERVICE_ACCOUNT \
      --member "serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
      --role "roles/iam.serviceAccountUser"
    
    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
      --member "serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
      --role "roles/run.developer"
    
    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
      --member "serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
      --role "roles/cloudscheduler.admin"
    
  7. GitHub 저장소를 클론하고 latest 분기로 전환합니다.

    git clone https://github.com/GoogleCloudPlatform/gce-license-tracker.git
    cd gce-license-tracker
    git checkout latest
    
  8. Cloud Build에 빌드를 제출합니다.

    gcloud builds submit . --substitutions=_REGION=$(gcloud config get-value run/region)
    

    이 빌드는 License Tracker 애플리케이션을 Cloud Run에 배포하고 하루 한 번 작업을 트리거하도록 Cloud Scheduler를 구성합니다.

    빌드를 완료하는 데 약 3분이 걸립니다.

분석할 프로젝트 선택

License Tracker 도구는 다음 조건이 모두 적용되는 모든 Google Cloud 프로젝트를 분석합니다.

  • Compute Engine API가 사용 설정됩니다.
  • 프로젝트가 도구의 서비스 계정에 Compute 뷰어(roles/compute.viewer) 및 로그 뷰어(roles/logging.viewer) 액세스를 부여합니다.

분석에 프로젝트, 폴더, 전체 조직을 포함하려면 다음을 수행합니다.

프로젝트

SCOPE_ID=RESOURCE_PROJECT_ID
SCOPE_TYPE=projects

gcloud projects add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/compute.viewer" \
  --condition None
gcloud projects add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/logging.viewer" \
  --condition None

RESOURCE_PROJECT_ID를 License Tracker 도구로 분석할 Google Cloud 프로젝트의 ID로 바꿉니다.

폴더

SCOPE_ID=RESOURCE_FOLDER_ID
SCOPE_TYPE=folders

gcloud resource-manager folders add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/compute.viewer" \
  --condition None
gcloud resource-manager folders add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/logging.viewer" \
  --condition None

RESOURCE_FOLDER_ID를 License Tracker 도구로 분석할 프로젝트가 포함된 폴더의 ID로 바꿉니다.

조직

SCOPE_ID=ORGANIZATION_ID
SCOPE_TYPE=organizations

gcloud organizations add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/compute.viewer" \
  --condition None
gcloud organizations add-iam-policy-binding $SCOPE_ID \
  --member "serviceAccount:$SERVICE_ACCOUNT" \
  --role "roles/logging.viewer" \
  --condition None

ORGANIZATION_ID조직의 ID로 바꿉니다.

초기 분석 시작

이제 초기 분석을 시작할 수 있습니다.

  1. Google Cloud Console에서 Cloud Run > 작업으로 이동합니다.

    Cloud Run 작업으로 이동

  2. license-tracker 작업을 선택하여 작업 세부정보를 엽니다.

  3. 실행을 클릭합니다.

    선택한 프로젝트의 수와 크기에 따라 초기 분석이 완료되는 데 몇 시간이 걸릴 수도 있습니다.

    작업이 완료되면 프로젝트에 license_usage라는 BigQuery 데이터 세트가 포함됩니다.

  4. 선택적으로 Cloud Logging에서 로그를 봅니다.

    Logging으로 이동

대시보드 만들기

이제 샘플 대시보드의 사본을 만들어 Looker Studio 대시보드를 만듭니다.

  1. 대시보드의 데이터 소스를 복사합니다.

    1. 노드
    2. 라이선스가 부여된 노드
    3. 노드 히스토그램
    4. 인스턴스 히스토그램

    각 데이터 소스에 대해 다음을 수행합니다.

    1. 위 링크를 클릭하여 데이터 소스를 엽니다.
    2. 이 데이터 소스의 사본 만들기를 클릭합니다.
    3. 데이터 소스 복사를 클릭합니다.
    4. 대시보드를 BigQuery에 연결하도록 승격되면 승인을 클릭합니다.
    5. 선택적으로 헤더를 클릭하고 데이터 소스의 이름을 바꿉니다.
    6. 결제 프로젝트 목록에서 License Tracker 도구를 배포하는 데 사용된 프로젝트를 선택합니다.
    7. 다시 연결을 클릭합니다.
    8. 연결 변경사항 적용 대화상자에서 적용을 선택합니다.
  2. 대시보드를 복사합니다.

    1. 샘플 대시보드를 엽니다.

      대시보드가 데이터 소스에 연결되어 있지 않으므로 데이터가 표시되지 않습니다.

    2. … > 사본 만들기를 클릭합니다.

    3. 이 보고서 복사 대화상자에서 데이터 소스의 사본을 선택합니다.

      복사 대화상자

    4. 보고서 복사를 클릭합니다.

      이제 대시보드에 BigQuery 데이터 세트의 데이터가 표시됩니다.

다른 사용자에게 대시보드에 대한 액세스 부여

대시보드의 데이터 소스는 뷰어의 사용자 인증 정보를 사용하여 BigQuery에 액세스하도록 구성됩니다. 다른 사용자에게 대시보드에 대한 액세스를 부여하려면 다음을 수행해야 합니다.

  1. 대시보드를 공유하고 사용자에게 보고서 보기 권한을 부여합니다.
  2. BigQuery 데이터 뷰어(roles/bigquery.dataViewer) 및 BigQuery 작업 사용자(roles/bigquery.jobUser) 역할을 사용자에게 부여합니다. 데이터 세트 또는 프로젝트 수준에서 이러한 역할을 부여할 수 있습니다.

대시보드 맞춤설정

Looker Studio 보고서 편집기를 사용하여 기존 차트를 수정하거나 차트를 추가하도록 대시보드를 맞춤설정할 수 있습니다.

샘플 대시보드의 모든 차트는 BigQuery 데이터 세트의 placements 보기를 기반으로 합니다. 이 보기에는 모든 프로젝트의 모든 배치가 포함되어 있으며 다음 스키마를 사용합니다.

데이터 유형 설명
instance_id 정수 인스턴스 ID
instance_name 문자열 인스턴스 이름
instance_zone 문자열 인스턴스의 영역 ID
instance_project_id 문자열 인스턴스의 프로젝트 ID
tenancy 문자열 단독 테넌트 노드에서 실행되는 경우 S, 그렇지 않으면 F
node_type 문자열 단독 테넌트 노드 유형
node_project_id STRING 노드의 프로젝트 ID, 공유 단독 테넌트 노드의 경우 이 값이 instance_project_id와 다를 수 있습니다.
server_id 문자열 물리적 서버의 고유 ID
operating_system_family 문자열 WIN, LINUX 또는 null(인식할 수 없는 경우)
license 문자열 이미지에 사용되는 라이선스 문자열
license_type 문자열 BYOL, SPLA 또는 null(인식할 수 없는 경우)
machine_type STRING 인스턴스의 머신 유형
memory_mb 정수 인스턴스에 할당된 RAM 용량(MB)
vcpu_count 정수 인스턴스에 할당된 vCPU 수
vcpu_min_allocated 정수 인스턴스에 할당된 최소 vCPU 수, 단독 테넌트 VM에 CPU를 오버커밋하는 경우 이 값은 vcpu_count와 다를 수 있습니다.
maintenance_policy STRING 인스턴스의 유지보수 정책
start_date 타임스탬프 배치 시작
end_date 타임스탬프 배치 종료

기존 차트를 맞춤설정하거나 자체 차트를 대시보드에 추가할 때 placement 보기를 사용할 수 있습니다.

License Tracker 도구 업그레이드

이 섹션에서는 License Tracker 도구의 기존 배포를 업그레이드하여 최신 버전의 애플리케이션을 사용하거나 다른 구성을 사용하는 방법을 설명합니다.

  1. Google Cloud Console에서 Cloud Shell 활성화 Cloud Shell 활성화 버튼을 클릭하여 Cloud Shell을 엽니다.

    Google Cloud Console로 이동

  2. 프로젝트 ID를 포함하도록 환경 변수를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 기존 배포가 포함된 프로젝트의 ID로 바꿉니다.

  3. 기존 배포의 Cloud Run 리전을 선택합니다.

    gcloud config set run/region REGION
    
  4. GitHub 저장소를 클론하고 latest 분기로 전환합니다.

    git clone https://github.com/GoogleCloudPlatform/gce-license-tracker.git
    cd gce-license-tracker
    git checkout latest
    
  5. Cloud Build에 빌드를 제출합니다.

    gcloud builds submit . --substitutions=_REGION=$(gcloud config get-value run/region)
    

    빌드는 기존 배포를 업데이트하고 완료하는 데 약 3분 정도 걸립니다.