ライセンス レポート用に VM と単一テナントノードの使用状況をモニタリングする


Windows Server などのオペレーティング システムのお客様所有ライセンスを使用する場合、契約上の義務により、これらのライセンスを使用している VM インスタンス、物理サーバー、物理 CPU コアの数のモニタリングと報告が必要になる可能性があります。

この記事では、オープンソース ツールのライセンス トラッカーを使用して、使用している VM インスタンス、物理サーバー、物理 CPU コアの数をモニタリングする方法と、Looker Studio を使用して結果を可視化する方法について説明します。

ライセンス トラッカー ツールは、Compute Engine の監査ログを分析して、各 VM インスタンスのプレースメントを決定することで機能します。プレースメントは、VM インスタンスが特定の物理サーバーで実行されている期間を表します。VM が 1 つの物理サーバーから別の物理サーバーに移行されるたびに、あるプレースメントの終了がマークされ、別のプレースメントが開始されます。

たとえば、開始された VM インスタンスが数か月後に再び停止したとします。ランタイムの任意の時点で、VM は自動的に Server 1 から Server 2 に自動的に移行し、その後再び Server 1 に戻ります。この履歴は次の 3 つのプレースメントに対応します。

複数のプレースメント

ライセンス トラッカー ツールを初めて実行すると、過去 90 日間の Compute Engine の使用状況が分析され、結果が BigQuery に書き込まれます。後続の実行では、このツールは前回実行と当日実行の間の差分を分析し、それに応じて BigQuery データセットを更新します。

ライセンス トラッカー ツールは、IAP Desktop が提供する使用状況レポート機能に代わるものです。

費用

このガイドでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

ライセンス トラッカー ツールのデプロイ

このセクションでは、ライセンス トラッカー ツールが 1 日に 1 回自動的に実行されるように Cloud Run と Cloud Scheduler を設定する方法について説明します。

次の図は、この記事で説明するソリューションを示しています。

  • ライセンス トラッカー ツールは、Cloud Run にデプロイされ、1 つ以上のプロジェクトのログを分析するように構成されています。
  • 1 日に 1 回、Cloud Scheduler が Cloud Run ジョブをトリガーし、ライセンス トラッカー ツールが BigQuery データセットを更新します。
  • Looker Studio のダッシュボードでは、BigQuery のデータが可視化され、ユーザーが利用できるようになります。

アーキテクチャ

プロジェクトを作成

Cloud Run と Cloud Scheduler を設定するには、新しいプロジェクトを作成します。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, Cloud Logging, Resource Manager, Cloud Build, Cloud Scheduler, and Cloud Run APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, Cloud Logging, Resource Manager, Cloud Build, Cloud Scheduler, and Cloud Run APIs.

    Enable the APIs

アプリケーションをデプロイする

次は、ライセンス トラッカー ツールを Cloud Run にデプロイします。

  1. Google Cloud コンソールで、[Cloud Shell をアクティブにする] Cloud Shell をアクティブにします。 ボタンをクリックして Cloud Shell を開きます。

    Google Cloud コンソールに移動

  2. プロジェクト ID を格納する環境変数を設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  3. デプロイ先の Cloud Run リージョンを設定します。

    gcloud config set run/region REGION
    

    REGION は、Cloud 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)
    

    ビルドによってライセンス トラッカー アプリケーションが Cloud Run にデプロイされ、1 日 1 回ジョブをトリガーするように Cloud Scheduler が構成されます。

    ビルドが完了するまでに 3 分ほどかかります。

分析するプロジェクトの選択

ライセンス トラッカー ツールは、次のすべての条件に該当するすべての Google Cloud プロジェクトを分析します。

  • Compute Engine API が有効になっています。
  • このプロジェクトは、コンピューティング閲覧者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 は、ライセンス トラッカー ツールで分析する 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 は、ライセンス トラッカー ツールが分析するプロジェクトを含むフォルダの 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 コンソールで、[Cloud Run] > [ジョブ] に移動します。

    Cloud Run の [ジョブ] に移動

  2. license-tracker ジョブを選択して、ジョブの詳細を開きます。

  3. [実行] をクリックします。

    選択したプロジェクトの数とサイズによっては、最初の分析が完了するまでに数時間かかることがあります。

    ジョブが完了すると、プロジェクトに license_usage という名前の BigQuery データセットが作成されます。

  4. 必要に応じて、Cloud Logging でログを表示します。

    [ロギング] に移動

ダッシュボードを作成する

サンプル ダッシュボードのコピーを作成して、Looker Studio ダッシュボードを作成します。

  1. ダッシュボードのデータソースをコピーします。

    1. ノード
    2. ライセンスを付与されたノード
    3. ノードのヒストグラム
    4. インスタンスのヒストグラム

    データソースごとに次の操作を行います。

    1. 上のリンクをクリックしてデータソースを開きます。
    2. [このデータソースのコピーを作成] をクリックします。
    3. [データソースをコピー] をクリックします。
    4. ダッシュボードを BigQuery に接続するように求められた場合は、[承認] をクリックします。
    5. 必要に応じて、ヘッダーをクリックしてデータソースの名前を変更します。
    6. 課金プロジェクトのリストで、ライセンス トラッカー ツールのデプロイに使用したプロジェクトを選択します。
    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 INTEGER インスタンス ID
instance_name STRING インスタンスの名前
instance_zone STRING インスタンスのゾーン ID
instance_project_id STRING インスタンスのプロジェクト ID
tenancy STRING 単一テナントノードで実行する場合は S、それ以外の場合は F
node_type STRING 単一テナント ノードタイプ
node_project_id STRING ノードのプロジェクト ID。共有の単一テナントノードの場合、この値は instance_project_id と異なる可能性があります
server_id STRING 物理サーバーの一意の ID
operating_system_family STRING WINLINUX、または null(認識できない場合)
license STRING イメージで使用されているライセンス文字列
license_type STRING BYOLSPLA、または null(認識できない場合)
machine_type STRING インスタンスのマシンタイプ
memory_mb INTEGER インスタンスに割り当てられた RAM の量(MB 単位)
vcpu_count INTEGER インスタンスに割り当てる vCPU の数
vcpu_min_allocated INTEGER インスタンスに割り当てる vCPU の最小数。単一テナント VM の CPU をオーバーコミットすると、この値が vcpu_count とは異なる値になる場合があります。
maintenance_policy STRING インスタンスのメンテナンス ポリシー
start_date TIMESTAMP プレースメントの開始
end_date TIMESTAMP プレースメントの終了

既存のチャートをカスタマイズする場合、または独自のチャートをダッシュボードに追加する場合は、placement ビューを使用できます。

ライセンス トラッカー ツールのアップグレード

このセクションでは、ライセンス トラッカー ツールの既存のデプロイメントをアップグレードして、新しいバージョンのアプリケーションまたは別の構成を使用する方法について説明します。

  1. Google Cloud コンソールで、[Cloud Shell をアクティブにする] Cloud Shell をアクティブにします。 ボタンをクリックして Cloud Shell を開きます。

    Google Cloud コンソールに移動

  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 分ほどかかります。