将 Cloud Billing 数据导出到 BigQuery

无论您是经营着规模达数十亿美元的大型企业,还是只有小笔家庭预算,有效管理和报告费用是财务管理的重要环节。为了围绕 Google Cloud 费用和使用情况制定以数据为依据的决策,首先要收集可作为决策依据的数据。

借助“将 Cloud Billing 数据导出到 BigQuery”这一功能,您可以将详细的 Google Cloud 每日结算数据(如用量和费用估算数据)自动导出到您指定的 BigQuery 数据集内。然后,您可以从 BigQuery 访问 Cloud Billing 数据以进行详细分析,或者使用 Google 数据洞察等工具直观呈现您的数据。您也可以使用这种导出方法将数据导出到 JSON 文件。

如何启用将 Cloud Billing 数据导出到 BigQuery 的功能

所需权限

如需启用和配置将 Google Cloud 结算数据导出到 BigQuery 数据集的功能,您需要以下权限:

如需详细了解 Google Cloud 权限,请参阅:

1. 创建 BigQuery 数据集

在将 Cloud Billing 数据导出到 BigQuery 之前,建议您先创建一个 BigQuery 数据集

数据集包含在特定的 Cloud 项目中。数据集是用来组织和控制视图访问权限的顶级容器。表或视图必须属于数据集,因此需要创建至少一个数据集,才能将数据加载到 BigQuery 中。

如需创建 BigQuery 数据集,请执行以下操作:

  1. 登录 Google Cloud Console,然后转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 在 Google Cloud Console 页面顶部的项目下拉列表我的项目 )中,选择或创建包含您的数据集的项目。

    推荐:我们建议您配置一个单独的 Cloud 项目,用于所有的结算管理需求,包括您导出的 Cloud Billing 数据。您的结算管理 Cloud 项目也可用于 Cloud Billing API 访问以及程序化预算通知的 Pub/Sub 渠道等。

  3. 在 BigQuery 的导航面板中,点击 您的项目名称

  4. 点击 创建数据集。随即会打开“创建数据集”面板。

    1. 输入数据集 ID
    2. 选择数据位置

    3. 选择默认表过期时间

    4. 选择加密选项。对于 Cloud Billing 导出,请选择 Google 管理的密钥

    5. 点击创建数据集进行保存。

2. 启用将 Cloud Billing 数据导出到 BigQuery 数据集的功能

如需启用将 Cloud Billing 数据导出到 BigQuery 的功能,请执行以下操作:

  1. 登录 Google Cloud Console。

    登录 Cloud Console

  2. 打开控制台导航菜单 ,然后选择结算

    如果您有多个 Cloud Billing 帐号,请执行以下操作之一:

    • 如需管理当前 Cloud 项目的 Cloud Billing,请选择转至关联的结算帐号
    • 如需查找其他 Cloud Billing 帐号,请选择管理结算帐号,然后选择要为哪个帐号启用将 Cloud Billing 数据导出到 BigQuery 的功能。
  3. 在“结算”导航菜单中,选择帐单导出

  4. 选择 BigQuery 导出标签页。

  5. 点击修改设置,启用导出功能并更新导出设置。

  6. 项目列表中,选择用于存储 BigQuery 数据集的项目。

  7. 帐单导出数据集列表中,指定要导出数据的目标数据集。

    提示:如果您还没有创建 BigQuery 数据集,系统会提示您创建一个。如有必要,请按照以下步骤创建新的数据集

  8. 点击保存

数据加载频率

  • 在首次启用将数据导出到 BigQuery 的功能后,可能需要过几个小时才能看到您的 Google Cloud 结算数据。
  • Google Cloud 服务会以不同的时间间隔向 Cloud Billing 进程报告数据。
  • Cloud Billing 数据会定期导出到您的 BigQuery 数据集(对于导出到 BigQuery 的具体时间,不提供任何送达或延迟保证)。
  • 使用情况报告频率因 Google Cloud 服务而异,因此,您不一定能立即看到近期用过的所有 Google Cloud 服务的 Cloud Billing 数据。
  • 您的 BigQuery 数据集仅反映首次启用导出功能当天及其后产生的 Cloud Billing 数据。Cloud Billing 数据不会追溯添加,因此您不会看到启用导出之前产生的使用情况的 Cloud Billing 数据。
  • 如果您删除了任何已导出的数据(例如 BigQuery 导出记录),我们无法为您回填已删除的记录。
  • BigQuery 负载符合 ACID,因此,如果您在将数据加载到 BigQuery 的同时查询 BigQuery 中的 Cloud Billing 导出数据集,将不会看到未完成加载的数据。详细了解 BigQuery 的特性

使用情况表

启用将 Cloud Billing 数据导出到 BigQuery 的功能后,系统会立即自动创建使用情况表。

如果您需要将之前配置中的结算数据或多个版本的 Cloud Billing 导出数据合并到 BigQuery 中,建议您将数据保存在单独的表中,并改为使用 UNION 查询。

数据集权限

将 Cloud Billing 数据导出到 BigQuery 的功能使用服务帐号来管理数据集权限。

启用将 Cloud Billing 数据导出到 BigQuery 的功能后,一个由 Google 拥有和管理的服务帐号将作为所有者添加到您指定的数据集。该服务帐号类似于如下所示:

  • billing-export-bigquery@system.gserviceaccount.com

该服务帐号提供了让我们的离线进程创建表并向其中写入 Cloud Billing 记录所必需的权限。

使用费

使用 BigQuery 存储使用情况数据会产生些许费用。将数据加载到指定数据集是免费的,因为这会利用 BigQuery 的共享资源池批量加载数据。使用 BigQuery 导出和分析 Cloud Billing 数据时,相关费用将取决于您流式传输、存储和查询的数据量。如需了解预计会产生哪些费用,请参阅估算存储和查询费用。如需了解详细信息,查看 BigQuery 价格

BigQuery 中的 Google Cloud 使用费数据

下表介绍了导出到 BigQuery 的 Google Cloud 使用费数据的内容。

字段 类型 说明
billing_account_id 字符串

与使用情况关联的 Cloud Billing 帐号 ID。

对于转销商:对于 Cloud Billing 子帐号产生的使用费,这是子帐号的 ID,而不是 Cloud Billing 转销商父级帐号的 ID。

invoice.month 字符串

包含费用专列项的帐单的年份和月份 (YYYYMM)。例如:“201901”相当于 2019 年 1 月。

您可以使用此字段获取帐单上的总费用。请参阅将 Cloud Billing 数据导出至 BigQuery 查询的示例

cost_type 字符串

此专列项代表的费用类型:常规项、税费、调整项和舍入误差费用。

service.id 字符串 与使用情况关联的服务的 ID。
service.description 字符串 报告 Cloud Billing 数据的 Google Cloud 服务。
sku.id 字符串 服务使用的资源的 ID。如需查看 SKU 的完整列表,请参阅 Google Cloud SKU
sku.description 字符串 服务使用的资源类型的说明。例如,Cloud Storage 的资源类型是“Standard Storage US”。
usage_start_time 时间戳 计算指定费用的每小时使用时间段的开始时间。所有服务的使用情况/费用按小时显示,也就是说,长时间运行的服务的使用情况横跨多个每小时时间段。

如需了解详情,请参阅有关时间戳数据类型的 BigQuery 文档。另请参阅下文的导出的数据和帐单之间的区别

usage_end_time 时间戳 计算指定费用的每小时使用时间段的结束时间。所有服务的使用情况/费用按小时显示,也就是说,长时间运行的服务的使用情况横跨多个每小时时间段。

如需了解详情,请参阅有关时间戳数据类型的 BigQuery 文档。另请参阅下文的导出的数据和帐单之间的区别

project.id 字符串 生成 Cloud Billing 数据的 Google Cloud 项目的 ID。
project.name 字符串 生成 Cloud Billing 数据的 Google Cloud 项目的名称。
project.ancestry_numbers 字符串 项目(由指定 project.id 标识,例如 my-project-123)的资源层次结构中的祖先。

例如:/ParentOrgNumber/ParentFolderNumber/。详细了解资源层次结构

project.labels.key 字符串 如果存在标签,则为键值对中的键部分,键值对包含发生了使用的 Google Cloud 项目中的标签。如需详细了解如何使用标签,请参阅使用标签
project.labels.value 字符串 如果存在标签,则为键值对中的值部分,键值对包含发生了使用的 Google Cloud 项目中的标签。如需详细了解如何使用标签,请参阅使用标签
labels.key 字符串 如果存在标签,则为键值对中的键部分,键值对包含发生了使用的 Google Cloud 资源中的标签。如需详细了解如何使用标签,请参阅使用标签
labels.value 字符串 如果存在标签,则为键值对中的值部分,键值对包含发生了使用的 Google Cloud 资源中的标签。如需详细了解如何使用标签,请参阅使用标签
system_labels.key 字符串 如果存在系统标签,则为键值对的键部分,包含发生了使用的资源中的系统生成的标签。另请参阅可用的系统标签
system_labels.value 字符串 如果存在系统标签,则为键值对的值部分,包含发生了使用的资源中的系统生成的标签。另请参阅可用的系统标签
location.location 字符串 国家、区域或地区层级的使用情况位置;或者是 global,表示资源没有特定位置。如需了解详情,另请参阅区域和地区
location.country 字符串 location.location 是国家、区域或地区时,此字段是发生了使用的国家,例如 US。如需了解详情,另请参阅区域和地区
location.region 字符串 location.location 是国家或区域时,此字段是发生了使用的区域,例如 us-central1。如需了解详情,另请参阅区域和地区
location.zone 字符串 location.location 是地区时,此字段是发生了使用的地区,例如 us-central1-a。如需了解详情,另请参阅区域和地区
cost 浮点数 不计任何赠金的使用费。如需获得包含赠金的总费用,应将所有 credits.amount 添加到费用中。如需了解详情,请参阅此查询示例
currency 字符串 费用的结算币种。如需了解详情,请参阅结算和付款支持的本地货币
currency_conversion_rate 浮点数 美元兑本地货币的汇率。也就是说,cost/currency_conversion_rate 是以美元计算的费用。
usage.amount 浮点数 所用 usage.unit 的数量。
usage.unit 字符串 用于衡量资源使用情况的基本单位。例如,标准存储空间的基本单位是字节/秒。
usage.amount_in_pricing_units 浮点数 所用 usage.pricing_unit 的数量。
usage.pricing_unit 字符串 根据 Cloud Billing Catalog API 衡量资源使用情况的单位。
credits.name 字符串 对 Cloud Billing 帐号应用的赠金的说明。
credits.amount 浮点数 对使用情况应用的赠金的金额。赠金金额始终为负数。
export_time 时间戳 与附加的 Cloud Billing 数据关联的处理时间。每次导出新数据时,该值都会增加。
另请参阅下文的导出的数据和帐单之间的区别

标签简介

您会在 BigQuery 数据集中看到标签的相关列,但对于当前版本,部分标签值将为空。系统将在不同的时间为不同的服务填充标签导出数据,具体取决于每项服务提供数据的时间。

可用的系统标签

系统标签是关于发生了使用的资源的重要元数据的键值对。以下系统标签会自动包含在适用的使用情况中。

system_labels.key system_labels.value 示例 说明
compute.googleapis.com/machine_spec n1-standard-1、custom-2-2048 虚拟机的配置。如需了解详情,请参阅机器类型
compute.googleapis.com/cores 如果是 n1-standard-4,则为 4;如果是 custom-2-2048,则为 2 可供虚拟机使用的 vCPU 数。
compute.googleapis.com/memory 如果是 n1-standard-4,则为 15360(即 15 GB * 1024 MB/GB);如果是 custom-2-2048,则为 2048 可供虚拟机使用的内存量(以 MB 为单位)。

导出的数据和帐单之间的区别

Google Cloud 服务会以不同的时间间隔向 Cloud Billing 进程报告使用情况和费用数据,因此使用量报告有时会略有延迟。在某个日历月月末,延迟报告的使用量可能不包含在当月的帐单中,而是延至下月的帐单。不过,这一使用情况会包括实际使用日期以及将相应使用情况报告给 Cloud Billing 进程的时间的时间戳。

当您使用时间戳字段查询费用时,返回的数据可能会提取最初未显示在当月生成的帐单上且应在以后报告的使用情况。因此,返回的 Cloud Billing 数据可能不会直接反映到该帐单上。

时间戳字段包括:

  • usage_start_time
  • usage_end_time
  • export_time

如需返回直接反映到帐单的 Cloud Billing 数据,请对 invoice.month 而不是时间戳字段运行查询。

错误和调整

请注意,万一您的 Cloud Billing 数据中包含错误或需要进行调整,系统会在其中附加 Cloud Billing 数据以排除类似错误。除以下列之外,所有其他列都将保持不变:

  • cost
  • credit
  • usage.amount
  • export_time

如需确定哪些数据是新数据,只需查询 export_time 即可。