查看用量报告

借助 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 地址
  • 负载平衡器

每个资源的相关信息均以下列指标呈现:

指标名称 指标属性
Report Date
  • 指标类型:字符串
  • 说明:使用情况的日期。
  • 示例:2013-08-15
MeasurementId
  • 指标类型:字符串
  • 说明:受测资源的类型 ID。 例如,VmimageN1Standard_1 表示 n1-standard-1 机器类型
  • 示例:com.google.cloud/services/compute‑engine/VmimageN1Standard_1
Quantity
  • 指标类型:整数
  • 说明:指定日期的使用量。
  • 示例:86400
Unit
  • 指标类型:字符串
  • 说明:单位类型,如计数、秒、小时等。
  • 示例:seconds
Resource URI
  • 指标类型:字符串
  • 说明:指定资源的 URI。
  • 示例:https://compute.googleapis.com/compute/v1/projects/<project‑id>/zones/<zone>/instances/<instance>
ResourceId
  • 指标类型:整数
  • 说明:标识特定资源的数字 ID。
  • 示例:16557630484925648021
Location
  • 指标类型:字符串
  • 说明:资源的位置。通常为地区或区域名称;如果是全球性资源,则为 GLOBAL
  • 示例:us-central1-a

报告中条目的示例如下:

Report Date MeasurementId Quantity Unit Resource URI Resource ID Location
02/13/2014 com.google.cloud/services/compute-engine/VmimageN1Standard_1 86400 seconds 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 有权访问存储分区,并且使用情况导出功能已启用,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 会停用用量导出功能,但不会从项目访问权限列表中移除该帐号。如果需要,您可以选择手动移除该帐号。

前提条件

在开始使用 Compute Engine 用量导出功能之前,您必须先注册 Google Cloud Storage(如果尚未注册)。

设置使用情况导出功能

当您首次启用使用情况导出功能时,第一份报告将在第二天发出,其中详细说明了前一天的使用情况。此后,您每隔 24 小时就会收到一份报告。

要设用量导出功能,请使用 gcloud compute 工具启用该功能。启用该功能时,您必须定义以下两个属性:

  1. 将接收报告的 Google Cloud Storage 存储分区

    您可以选择自己拥有的任何 Cloud Storage 存储分区(包括不同项目中的存储分区)。在开始导出报告之前,此存储分区必须已存在,并且您必须拥有对此存储分区的所有者权限。Google Cloud Storage 会按照用量收费,因此建议您查看 Cloud Storage 价格表,以了解使用该服务可能产生的费用。

    对 Cloud Storage 存储分区有读取权限的用户将可以查看存储分区中的用量报告。对 Cloud Storage 存储分区有写入权限的用户则可以创建、查看和修改存储分区中的现有文件。如需了解详情,请参阅访问权限控制部分。

  2. 您的文件的报告前缀

    您可以指定要用于使用情况报告的报告前缀。用量报告的文件名将会包含此前缀。例如,如果将“my-cool-project-report”指定为报告前缀,则系统会生成类似于 my-cool-project-report_1234567890_20131230.csv 格式的文件名。如果您没有指定报告前缀,则系统会默认使用 usage_gce 前缀。

确定这两个属性后,您可以通过以下方法启用用量导出功能:

控制台


  1. 转到 Compute Engine“设置”页面
  2. 点击启用使用情况导出功能
  3. 根据需要填写要求提供存储分区名称和报告前缀的字段。如果您将报告前缀留空,则系统会默认使用 usage_gce 前缀。
  4. 点击保存

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“设置”页面
  2. 点击停用使用情况导出功能

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 文档