设置程序化通知

本文档介绍如何使用 Pub/Sub 设置程序化预算和费用异常通知(预览版功能)。

预算费用异常通常会配置为通过邮件发送通知。如果您将预算或费用异常检测功能作为一项费用控制工具来使用,那么邮件通知可能不是最佳方法,不一定能确保您及时采取措施来控制您的费用。您可以设置并使用程序化通知,以自动做出费用控制响应。自动做出费用控制响应的示例包括:

限制

执行此任务所需的权限

预算通知

如需设置程序化预算通知,您需要拥有创建或修改预算和 Pub/Sub 主题的权限。您需要的一组权限因您的访问权限级别而异。

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

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

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

如需使用预定义角色获得必要权限,请让您的管理员为您授予 Cloud Billing 账号的以下预定义 Cloud Billing IAM 角色之一:

此外,让您的管理员为您授予包含 Pub/Sub 主题的目标项目的以下角色:

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

如需使用预定义角色获得必要权限,请让您的管理员为您授予项目的以下预定义 Cloud Billing IAM 角色之一:

此外,让您的管理员为您授予包含 Pub/Sub 主题的目标项目的以下角色:

异常通知

如需设置程序化异常通知,您需要拥有创建或修改异常和 Pub/Sub 主题的权限。您必须拥有 Cloud Billing 账号权限。

拥有 Cloud Billing 账号权限的用户(预览版

如需使用预定义角色获得必要权限,请让您的管理员为您授予 Cloud Billing 账号的以下预定义 Cloud Billing IAM 角色之一:

此外,让您的管理员为您授予包含 Pub/Sub 主题的目标项目的以下角色:

创建 Pub/Sub 主题

如需设置程序化预算或异常通知,您必须先创建 Pub/Sub 主题。如果您已针对预算或异常费用配置 Pub/Sub 主题,则可以跳过此步骤。

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

    登录 Google Cloud 控制台并进入 Pub/Sub 页面

  2. 选择要包含 Pub/Sub 主题的项目。

    为结算通知配置 Pub/Sub 主题时,我们建议您使用 FinOps 管理项目来包含与结算相关的 Pub/Sub 主题。

  3. 点击 创建主题

  4. 主题 ID 字段中,提供一个主题名称。

  5. 保留默认的订阅和加密设置,然后点击创建

关联 Pub/Sub 主题

要使程序化通知能够接收与预算或异常的当前状态相关的 Pub/Sub 消息,您必须将预算或异常与 Pub/Sub 主题相关联。

预算通知

如需将 Pub/Sub 主题关联到 Cloud Billing 预算,请完成以下步骤:

拥有 Cloud Billing 账号权限的用户 仅拥有项目级权限的用户(预览版
  1. 登录 Google Cloud 控制台中的预算和提醒页面。

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

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

  3. 选择要关联的预算,或创建新预算
  4. 操作部分的管理通知下,选择将一个 Pub/Sub 主题关联到此预算
  5. 项目字段中,点击选择项目,然后选择包含您设置的 Pub/Sub 主题的项目。
  6. 选择 Pub/Sub 主题下,选择现有主题,或点击创建主题来创建新主题。
    • 如果您要创建新主题,请在主题 ID 字段中输入一个主题名称,然后点击创建主题
    • 创建主题后,系统会自动选中该主题。
  7. 点击保存
  1. 登录 Google Cloud 控制台信息中心并选择项目。

    打开 Google Cloud 控制台
  2. 选择要管理其预算的项目。
  3. 前往结算部分:打开 Google Cloud 控制台导航菜单 ,然后选择结算

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

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

  4. 结算导航菜单费用管理部分中,选择预算和提醒
  5. 选择要关联的预算,或创建新预算
  6. 操作部分的管理通知下,选择将一个 Pub/Sub 主题关联到此预算
  7. 项目字段中,点击选择项目,然后选择包含您设置的 Pub/Sub 主题的项目。
  8. 选择 Pub/Sub 主题下,选择现有主题,或点击创建主题来创建新主题。
    • 如果您要创建新主题,请在主题 ID 字段中输入一个主题名称,然后点击创建主题
    • 创建主题后,系统会选择该主题。
  9. 点击保存

异常通知

如需将 Pub/Sub 主题与费用异常相关联,请完成以下步骤:

拥有 Cloud Billing 账号权限的用户(预览版
  1. 登录 Google Cloud 控制台,然后前往异常页面。

    打开“异常”页面
  2. 在系统提示时,选择您要管理其异常的 Cloud Billing 账号。

    系统会打开所选结算账号的异常页面。

  3. 点击 管理异常
  4. 费用冲击输入异常阈值。此金额是触发通知的阈值。如果您未提供值,则阈值会设置为零,并且系统会针对所有异常发送通知。
  5. Pub/Sub 通知部分中,选择关联 Pub/Sub 主题以接收关于异常的程序化动态
  6. 从随即显示的下拉菜单中,选择您要关联以接收通知的 Pub/Sub 主题。
    • 系统会按项目列出主题。您可能需要切换正在查看的项目,才能找到要选择的主题。
    • 如果您要创建新主题,请先切换到您偏好的项目,然后再点击创建主题
  7. 点击保存

通知格式

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

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

预算通知

属性

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

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

数据

预算提醒详细信息会以采用 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" 预算提醒货币。所有费用和预算提醒金额均以此货币计算。

异常通知

属性

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

属性名称 示例 说明
范围 scope_project 异常范围。
billingAccountName billingAccounts/01D4EE-079462-DFD6EC 发生异常的 Cloud Billing 账号的标识符。
resourceDisplayName My project 发生异常的资源的显示名称。
resourceName projects/123456 发生异常的资源的标识符。
SchemaVersion 1.0 Pub/Sub 架构版本。

数据

异常提醒详细信息会以采用 base64 编码的 UTF-8 字符串的形式返回,该字符串包含具有以下属性的 JSON 对象:

数据 示例 说明
anomalyName billingAccounts/01D4EE-079462-DFD6EC/anomalies/aaa 异常的资源名称。
billingAccountName billingAccounts/01D4EE-079462-DFD6EC 结算账号的标识符。
resourceName "projects/12345" 发生异常的资源的标识符。
resourceDisplayName "My project" 发生异常的资源的显示名称。
detectionDate "2024-02-01T08:00:00Z" 检测到费用异常的日期。
Scope SCOPE_PROJECT 指示异常的范围。
expectedSpendAmount {
"currencyCode": "USD",
"units": "8",
"nanos": 988106832
}
资源的预计支出。
actualSpendAmount 196.22 资源的实际支出。
deviationAmount 31.01 实际支出与预计支出之间的差额。
deviationPercentage 18.77 与预计支出相比的偏差金额所占的百分比。
Root cause
root_causes {
resource: "services/XXX-XXXX-XXX"
display_name: "BigQuery"
cause_type: CAUSE_TYPE_SERVICE
deviation {
  expected_spend {
    currency_code: "USD"
    units: "5000"
  }
  actual_spend {
    currency_code: "USD"
    units: "5000"
  }
  deviation_amount {
    currency_code: "USD"
    units: "5000"
  }
  deviation_percentage: "Infinity"
}
sub_causes {
  resource: "locations/us-west1",
  display_name: "us-west1",
  cause_type: CAUSE_TYPE_LOCATION,
  deviation {
    expected_spend {
      currency_code: "USD",
    }
    actual_spend {
      currency_code: "USD",
      units:"5000"
    }
    deviation_amount {
      currency_code: "USD",
      units: "5000"
    }
    deviation_percentage: "Infinity"
  }
  sub_causes {
    resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX"
    display_name: "Some display name"
    cause_type: CAUSE_TYPE_SKU
    deviation {
      expected_spend {
        currency_code: "USD"
      }
      actual_spend {
        currency_code: "USD"
        units: 5000
      }
      deviation_amount {
        currency_code: "USD"
        units: 5000
      }
      deviation_percentage: "Infinity"
    }
  }
  sub_causes {
    resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX"
    display_name: "Some display name"
    cause_type: CAUSE_TYPE_SKU
    deviation {
      expected_spend {
        currency_code: "USD"
        units: "1"
        nanos: 5413077
      }
      actual_spend {
        currency_code: "USD"
        units: "1",
        nanos: 122606000
      }
      deviation_amount {
        currency_code: "USD"
        nanos: 117192923
      }
      deviation_percentage:11.656196419841217
    }
  }
}
}
一个重复字段,其中包含导致异常的根本原因的相关信息。

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

将预算或异常关联到 Pub/Sub 主题后,您会按如下方式收到程序化通知:

预算通知

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

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

异常通知

  • 只有在达到阈值时,系统才会向 Pub/Sub 主题发送异常通知。
  • Pub/Sub 仅保证至少送达一次。您可能会多次收到消息,并且消息的到达顺序可能与发送顺序不一致。
  • 如果由于 Pub/Sub 主题配置错误而导致送达失败,您将不会收到通知。

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

如需了解详情,请参阅在 Pub/Sub 中发布和接收消息

后续步骤

如需详细了解如何使用程序化通知,请查看下列有关程序化费用控制响应的示例: