查看用量報表

在 Compute Engine 中,您可以透過用量匯出功能,將 Compute Engine 使用情形的詳細報表匯出至 Google Cloud Storage 值區。用量報表提供的資訊與資源的生命週期相關。舉例來說,您可以查看有多少個執行個體正在執行 n1-standard-1 映像檔,或是每個執行個體已執行多久時間。 不過報表並不會提供帳單資訊或活動資訊 (如 API 要求等)。如需查看帳單資訊,請使用帳單匯出功能。如需活動相關資訊,請查看活動記錄一文。

Compute Engine 設定頁面以 CSV 檔案的格式提供用量記錄。這些記錄提供了資源的使用情形,例如虛擬機器執行個體的執行時間、永久磁碟的儲存空間與其他 Compute Engine 功能的相關資訊。

事前準備

總覽

Compute Engine 會在您啟用用量報表後,將兩種類型的報表傳送到您指定的 Google Cloud Storage 值區:

  1. 每日用量報表

    系統每天都會發送這種報表,提供您前一天使用情形的資料。每個報表均為單獨的檔案,內容包含上一段期間的資料。報表中的資料無法變更,意謂著如果資料有任何不正確的地方,Compute Engine 將不會更新或改寫記錄檔,但會在下一份傳送到值區的新報表中修正資料。

    每日用量報表的名稱格式如下:

    <bucket>/<report_prefix>_<numeric_project_id>_<YYYYMMDD>.csv
    
  2. 每月總計報表

    系統每天會發送單一的每月總計報表,裡面會包含該專案截至當天的每月用量資料 (當天的用量不包含在內)。系統每天均會使用新資料覆寫每月用量報表,顯示資源到該日為止每個月的使用情況。每個專案在每個月份只會有一份每月用量資料的檔案。

    每月總計報表的名稱格式如下:

    <bucket>/<report_prefix>_<numeric_project_id>_<YYYYMM>.csv
    

    每日報表與每月報表檔案的名稱十分相似,差別僅在於日期格式。每月總計報表的日期格式為年度與月份 (YYYYMM);每日使用情況報表則是使用年度、月份、日期 (YYYYMMDD)。

所有的用量報表皆以逗號分隔值 (CSV) 格式傳送,並使用前置字串 <report_prefix>。使用者可以自訂 <report_prefix> 的值,如果使用者未指定報表的前置字串,報表會預設使用 usage_gce 前置字串。提醒您,所有時間皆以太平洋時間 (PST) 提供。

支援的指標

每日用量報表提供下列資源的相關資訊:

  • 虛擬機器
  • 永久磁碟
  • 映像檔
  • 快照
  • 靜態 IP 位址
  • 負載平衡器

每個資源的相關資訊均以下列指標呈現:

指標名稱 指標屬性
報表日期
  • 指標類型:字串
  • 說明:使用情況的日期。
  • 範例:2013-08-15
MeasurementId
  • 指標類型:字串
  • 說明:受測資源的類型 ID。 舉例來說,VmimageN1Standard_1 代表 n1-standard-1 機器類型
  • 例如:com.google.cloud/services/compute‑engine/VmimageN1Standard_1
數量
  • 指標類型:整數
  • 說明:指定日期的使用量。
  • 範例:86400
單位
  • 指標類型:字串
  • 說明:單位類型,例如計數、秒數、時數等。
  • 範例:秒數
資源 URI
  • 指標類型:字串
  • 說明:指定資源的 URI。
  • 例如:https://compute.googleapis.com/compute/v1/projects/<project‑id>/zones/<zone>/instances/<instance>
ResourceId
  • 指標類型:整數
  • 說明:識別特定資源的數字 ID。
  • 範例:16557630484925648021
位置
  • 指標類型:字串
  • 說明:資源的位置,通常為區域名稱或地區名稱,通用資源的名稱則為 GLOBAL
  • 例如:us-central1-a

報表中各項目的範例如下:

報表日期 MeasurementId 數量 單位 資源 URI ResourceId 位置
02/13/2014 com.google.cloud/services/compute-engine/VmimageN1Standard_1 86400 https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/my-instance 16557630484 us-central1-a

存取權控管

當您啟用 Cloud Storage 值區的用量匯出功能後,Compute Engine 會自動加入值區的寫入權限清單中,以便傳送用量報表。如果 Compute Engine 可以存取值區且用量匯出功能已經啟用,用量報表就會持續匯入至指定的 Cloud Storage 值區。

您可以查看值區的存取權控制清單是否新增了下列身分,以辨認 Compute Engine 是否有值區的存取權:

cloud-cluster-analytics-export@google.com

身為專案擁有者的使用者均有 Google Cloud Storage 值區的完整存取權,其他如寫入者或讀取者等使用者會有不同程度的值區存取權。如要進一步瞭解值區的 ACL,請參閱 Cloud Storage 存取權控制說明文件。

如果您停用用量匯出功能,Compute Engine 會自動移除其對值區的寫入權限。 如果您修改 cloud-cluster-analytics-export@google.com 帳戶上的權限並停用用量匯出功能,則 Compute Engine 會停用該功能,但不會從專案的存取權清單中移除帳戶。您可以視需要選擇手動移除帳戶。

事前準備

如果您尚未申請 Google Cloud Storage,則必須先完成申請才能開始使用 Compute Engine 用量匯出功能。

設定用量報表

首次啟用用量匯出功能時,第一份報表會在隔天傳送,並詳細列出前一天的使用情況,之後將以 24 小時為間隔傳送報表。

如要設定用量匯出功能,請在 gcloud compute 工具中啟用此項功能。啟用此功能後,必須定義兩個屬性:

  1. 接收報表的 Google Cloud Storage 值區

    您可以選擇擁有的任何 Cloud Storage 值區,包含不同專案的值區在內。該值區必須在您開始匯出報表前便已經存在,而且您還需要有值區的擁有者權限。Google Cloud Storage 按照使用量收費,建議您參閱 Cloud Storage 價格表以瞭解服務產生的費用。

    可以讀取 Cloud Storage 值區的使用者都可以檢視值區中的用量報表。具有值區寫入權限的使用者均可建立、檢視及修改值區中現有的檔案。詳情請參閱存取權控制一節。

  2. 檔案的報表前置字串

    您可以指定用量報表所用的報表前置字串,用量報表的檔案名稱將會包含這個前置字串。舉例來說,如果將「my-cool-project-report」指定為報表前置字串,則檔案名稱的格式看起來會與 my-cool-project-report_1234567890_20131230.csv 相似。如果您沒有指定報表前置字串,系統將會使用前置字串的預設值 usage_gce

決定上述兩種屬性後,您可以按照下列步驟啟用用量匯出功能:

主控台


  1. 前往 Compute Engine「Settings」(設定) 頁面
  2. 點選 [Enable usage export] (啟用用量匯出功能)。
  3. 視需要填入詢問「Bucket name」(值區名稱) 與「Report prefix」(報表前置字串) 的欄位。如果您沒有填入報表的前置字串,系統會使用前置字串的預設值 usage_gce
  4. 按一下 [Save] (儲存)

gcloud


gcloud compute 中,使用 gcloud compute project-info set-usage-bucket 指令來啟用這項功能:

 gcloud compute project-info set-usage-bucket --bucket URI [--prefix PREFIX]

值區的 URI 格式可能為 gs://<bucket-name>https://storage.googleapis.com/<bucket-name>

API

用戶端程式庫

請使用用戶端程式庫並在 Projects 集合中設定 setUsageExportBucket() 方法來啟用用量匯出功能。例如,您可以依照下方所示,在 Python 用戶端程式庫啟用功能:

def setUsageExport(gce_service, auth_http):
  body = {
    "bucketName": "https://storage.googleapis.com/usage-export-sample",
    "reportNamePrefix": "exampleprefix"
  }

request = gce_service.projects().setUsageExportBucket(project=PROJECT_ID, body=body)
response = request.execute(http=auth_http)

print response

HTTP

您也可以直接對 setUsageExportBucket 方法發出 HTTP 要求,以下為使用 httplib2 程式庫啟用用量匯出功能的範例:

#!/usr/bin/python

import urllib
import argparse
import logging
import sys
import random
from json import load,dumps
...

PROJECT_ID = "myproject"
API_VERSION = "v1"
API_URL = "https://compute.googleapis.com/compute/" + API_VERSION + "/projects/" + PROJECT_ID
OAUTH_FILE = "oauth-dev.dat"

def main(argv):
  logging.basicConfig(level=logging.INFO)

  parser = argparse.ArgumentParser(
    description=__doc__,
    formatter_class=argparse.RawDescriptionHelpFormatter,
    parents=[tools.argparser])

  # Parse the command-line flags.
  flags = parser.parse_args(argv[1:])

  http = httplib2.Http()

  # Add code to authenticate to the service
  ....

  url = API_URL + "/setUsageExportBucket"

  body = {
    "bucketName": "https://storage.googleapis.com/usage-export-sample",
    "reportNamePrefix": "exampleprefix"
  }

  formattedBody = dumps(body)
  resp,content = http.request(url,
                              "POST",
                              headers=listOfHeaders,
                              body=formattedBody)

  print str(content)

if __name__ == "__main__":
    main(sys.argv)

如要進一步瞭解,請參閱 API 參考資料說明文件。

確認是否啟用用量報表

您可以使用下列指令取得專案資訊,以查看專案的用量匯出功能設定:

gcloud compute project-info describe

尋找 usageExportLocation 欄位:

+-------------------------+----------------------------------------------------+
| name                    | myproject                                          |
| description             |                                                    |
| creation-time           | 2012-10-18T16:31:52.308-07:00                      |
| usage                   |                                                    |
|   snapshots             | 1.0/1000.0                                         |
|   networks              | 2.0/2.0                                            |
|   firewalls             | 3.0/10.0                                           |
|...                      |                                                    |
| usageExportLocation     |                                                    |
|   bucketName            | https://storage.googleapis.com/usage-export-sample |
|   reportNamePrefix      |                                                    |
+-------------------------+----------------------------------------------------+

停用用量報表

當您停用用量報表時,Compute Engine 會自動移除本身對 Cloud Storage 值區的寫入權限,並停止傳送新的報表。

主控台


  1. 前往 Compute Engine「Settings」(設定) 頁面
  2. 點選 [Disable usage export] (停用用量匯出功能)。

gcloud


請在 gcloud compute 中使用帶有 --no-bucket 旗標的 gcloud compute project-info set-usage-bucket 指令來停用用量匯出功能:

gcloud compute project-info set-usage-bucket --no-bucket

API

用戶端程式庫

如要使用用戶端程式庫,請向 setUsageExportBucket() 方法發出含空白值區名稱的要求。舉例來說,在 Python 用戶端程式庫中,您可以發出下列要求來停用功能:

def disableUsageExport(gce_service, auth_http):
  body = {
    "bucketName": "",
}

request = gce_service.projects().setUsageExportBucket(project=PROJECT_ID, body=body)
response = request.execute(http=auth_http)

print response

HTTP

您也可以直接對 setUsageExportBucket 方法發出 HTTP 要求,下列範例使用 httplib2 程式庫發出停用用量匯出值區的要求:

#!/usr/bin/python

import urllib
import argparse
import logging
import sys
import random
from json import load,dumps
...

PROJECT_ID = "myproject"
API_VERSION = "v1"
API_URL = "https://compute.googleapis.com/compute/" + API_VERSION + "/projects/" + PROJECT_ID
OAUTH_FILE = "oauth-dev.dat"

def main(argv):
  logging.basicConfig(level=logging.INFO)

  parser = argparse.ArgumentParser(
    description=__doc__,
    formatter_class=argparse.RawDescriptionHelpFormatter,
    parents=[tools.argparser])

  # Parse the command-line flags.
  flags = parser.parse_args(argv[1:])

  http = httplib2.Http()

  # Add code to authenticate to the service
  ....

  url = API_URL + "/setUsageExportBucket"

  body = {
     "bucketName": ""
  }

  formattedBody = dumps(body)
  resp,content = http.request(url,
                              "POST",
                              headers=listOfHeaders,
                              body=formattedBody)

  print str(content)

if __name__ == "__main__":
    main(sys.argv)
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件