管理程序化预算提醒通知

概览

预算的典型行为是在预算提醒阈值规则触发电子邮件通知时发送提醒电子邮件。

预算提醒通知示意图
图 1:说明了针对预算提醒通知的默认电子邮件功能,以及使用用于程序化通知的 Pub/Sub 自动处理费用控制响应的可选方法。

但是,如果您使用预算作为费用控制工具,则电子邮件通知可能不是用于确保有效控制 Google Cloud 费用的最佳通知方法。除了电子邮件通知之外,您还可以使用程序化通知自动处理费用控制响应。费用控制响应示例包括:

  • 通过自动停用结算或终止资源来限制 Google Cloud 支出上限。
  • 将预算消息转发给其他媒介(例如 Slack)。
  • 通过调整配额控制资源使用情况。

如需了解详情,请参阅自动执行费用控制响应示例

执行此任务所需的权限

根据您是在 Cloud Billing 账号级层管理预算,还是属于一名没有任何 Cloud Billing 账号角色的项目所有者,您需要一组不同的权限,如以下部分所述。

如果您要在结算账号级层监控费用

如果您主要监控 Cloud Billing 账号的费用,则需要 Cloud Billing 账号级层的权限。

如果您对 Cloud Billing 账号的访问权限有限或没有访问权限,则可能拥有您所拥有的项目的足够权限

如果您的组织使用自定义角色进行身份验证,则您需要在自定义角色中拥有以下特定权限:

若要使自定义角色修改现有的 Cloud Billing 预算并将其关联到现有的 Pub/Sub 主题,您需要以下特定权限:

如果您要在项目级层监控费用

如果您对 Cloud Billing 账号的访问权限有限或没有访问权限,则可以管理范围限定为您拥有的项目的预算。

如果您的组织使用自定义角色进行身份验证,则您需要在自定义角色中拥有以下特定权限:

如果您将组织政策设置为按网域限制资源共享(例如,针对 Pub/Sub 主题启用 enforceInTransit),则您在尝试设置 Pub/Sub 主题或将其关联到 Cloud Billing 预算时可能会遇到错误。

在这种情况下,您可能需要强制账号访问才能成功地将 Pub/Sub 主题关联到预算。如需强制访问账号,请执行以下操作:

  1. 使用以下方法之一移除包含网域限制条件的组织政策:

  2. 按照步骤将 Pub/Sub 主题关联到 Cloud Billing 预算

  3. 恢复组织或项目的组织政策(可选)。

Google Cloud 权限简介

如需详细了解 Cloud Billing 权限,请参阅以下内容:

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

如何设置和启用 Pub/Sub 程序化通知

如需让程序化通知接收包含您预算的当前状态的 Pub/Sub 消息,请将 Pub/Sub 主题关联到您的 Cloud Billing 预算。

要关联、修改或移除与您的预算关联的 Pub/Sub 主题,请执行以下操作:

1. 创建 Pub/Sub 主题

为 Cloud Billing 配置 Pub/Sub 主题,以向该主题发布预算提醒。如果您已配置预算 Cloud Billing Pub/Sub 主题,则可以将其重复用于所有预算,或者您可以为每个预算创建唯一主题。

  1. 前往 Google Cloud 控制台 Pub/Sub 页面。

    登录 Google Cloud 控制台中的 Pub/Sub

  2. 选择一个项目。

    我们建议您创建并使用一个单独的 Google Cloud 项目,以包含您的 Cloud Billing 账号的所有 FinOps 和结算管理需求,包括与 Cloud Billing 相关的 Pub/Sub 主题。详细了解使用以 FinOps 为重点的项目来实现结算管理用例的好处。

  3. 点击 创建主题

  4. 主题 ID 字段中,提供主题名称,然后点击创建主题

2. 将 Cloud Billing 预算关联到 Pub/Sub 主题

要将 Cloud Billing 预算与 Pub/Sub 主题相关联,请执行以下操作:

  1. 按照适合 Cloud Billing 账号访问权限级别的过程,登录 Google Cloud 控制台“结算”部分中的预算和提醒页面:

    拥有 Cloud Billing 账号权限的用户 仅具有项目级权限的用户(预览版

    如果您拥有 Cloud Billing 账号权限,则可以从您有权访问的结算账号列表中进行选择。

    1. 登录 Google Cloud 控制台中的预算和提醒页面。

      打开“预算和提醒”
    2. 在系统提示时,选择您要管理其预算的 Cloud Billing 账号。

      此时会打开所选结算账号的“预算和提醒”页面。

    如果您只有项目权限,但对项目的 Cloud Billing 账号没有任何权限,则需要先选择您的项目,然后再前往“结算”部分。

    1. 登录 Google Cloud 控制台信息中心并选择项目。

      打开 Google Cloud 控制台
    2. 选择要管理其预算的项目。
    3. 接下来,转到“结算”:打开 Google Cloud 控制台导航菜单 (),然后选择结算

      如果系统提示您选择要查看和管理的结算账号,请点击前往关联的结算账号以查看与所选项目关联的结算账号。

      系统会打开所选结算账号的结算概览页面。

    4. 结算导航菜单费用管理部分中,选择预算和提醒
  2. 必要时,请创建预算。或者,如需修改现有预算和提醒规则,请点击预算名称。

  3. 操作部分的管理通知下,选择将一个 Pub/Sub 主题关联到此预算

  4. 项目字段中,点击选择项目,然后选择包含您设置的 Pub/Sub 主题的项目。如果您遵循了上一部分中的建议,那么这是您的FinOps 或结算管理 Google Cloud 项目。

  5. 选择 Pub/Sub 主题下,选择现有主题,或选择创建主题来创建新主题。

    • 如需创建新主题,请在主题 ID 字段中提供主题名称,然后点击创建主题
    • 创建主题后,系统会选择该主题。
  6. 点击保存

通知格式

发送到 Pub/Sub 主题的通知由以下两部分组成:

  • 特性:描述事件的一组键值对。
  • 数据:一个字符串,包含了描述预算提醒详细信息的 JSON 对象。

属性

特性是指 Cloud Billing 发送到 Pub/Sub 主题的所有通知中包含的键值对。无论通知载荷为何,通知始终包含下列键值对。

属性名称 示例 说明
billingAccountId 01D4EE-079462-DFD6EC 预算所属 Cloud Billing 账号的标识符。
budgetId de72f49d-779b-4945-a127-4d6ce8def0bb Cloud Billing 账号中预算提醒的标识符。
schemaVersion 1.0 通知架构版本。

数据

对于架构版本 1.x,预算提醒详细信息会以采用 base64 编码的 UTF-8 字符串的形式返回,该字符串包含具有以下属性的 JSON 对象:

数据 示例 说明
budgetDisplayName "My Personal Budget" 为预算指定的简明易懂的名称。
costAmount 140.321 所产生的费用金额。跟踪的费用类型取决于预算过滤条件和设置。
costIntervalStart "2021-02-01T08:00:00Z" 预算提醒期限的开始时间。`costAmount` 包括从此时间开始的使用费用。这是预算时间段(月份、季度、年份或自定义日期范围)发生预算使用的第一天。
budgetAmount 152.557 预算中分配的金额。
budgetAmountType "SPECIFIED_AMOUNT" 预算金额类型。可以是下列值之一:
  • SPECIFIED_AMOUNT”:固定金额。
  • LAST_MONTH_COST”:上个日历月内产生的所有费用。
  • LAST_PERIODS_COST”:过去非月度日历周期(例如季度或年份)内产生的费用。
alertThresholdExceeded 0.9 超出的最高实际费用提醒阈值配置。值是十进制数格式的百分比(例如 0.9 即 90%)。如果实际费用没有超过任何阈值,则此键不存在。
forecastThresholdExceeded 0.2 超出的预测费用最高提醒阈值。值是十进制数格式的百分比(例如 0.2 即 20%)。如果预测费用没有超过任何阈值,则此键不存在。
currencyCode "USD" 预算提醒货币。所有费用和预算提醒金额均以此货币计算。

向 Pub/Sub 发送通知的送达保证

创建预算并将其关联到 Pub/Sub 主题后,您会收到如下程序化通知:

  • 系统会每天向您的 Pub/Sub 主题多次发送预算通知,其中会包含您的当前预算状态。这与预算提醒电子邮件不同,后者仅在达到预算阈值时发送。
  • 即使 Cloud Billing 账号没有用量,系统也会发送 Pub/Sub 通知。
  • 您可能需要等几个小时才会收到第一则 Pub/Sub 通知。
  • Pub/Sub 仅保证至少传送一次。您可能会多次收到消息,并且消息的到达顺序可能与发送顺序不一致。
  • 如果由于 Pub/Sub 主题配置错误而导致传送失败,您将不会收到通知。

    传送可能会因以下原因之一而失败: