本文档介绍如何使用 Pub/Sub 设置程序化预算和费用异常通知(预览版功能)。
预算和费用异常通常会配置为通过邮件发送通知。如果您将预算或费用异常检测功能作为一项费用控制工具来使用,那么邮件通知可能不是最佳方法,不一定能确保您及时采取措施来控制您的费用。您可以设置并使用程序化通知,以自动做出费用控制响应。自动做出费用控制响应的示例包括:
限制
预算所用的 Cloud Billing 数据为估算值,这些数据在账单最终确定前可能会发生变化。
如果您将组织政策设置为按网域限制资源共享(例如,在 Pub/Sub 主题上启用
enforceInTransit
),则您在尝试设置或关联 Pub/Sub 主题时可能会遇到错误。在这种情况下,您可能需要强制账号访问才能成功地将 Pub/Sub 主题关联到预算。如需强制账号访问,请完成以下步骤:- 使用以下方法之一移除包含网域限制条件的组织政策:
- 暂时移除组织政策。
- 替换项目的组织政策,该项目包含 Pub/Sub 主题。
- 按照关联 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 主题,则可以跳过此步骤。
前往 Google Cloud 控制台的 Pub/Sub 页面。
选择要包含 Pub/Sub 主题的项目。
为结算通知配置 Pub/Sub 主题时,我们建议您使用 FinOps 管理项目来包含与结算相关的 Pub/Sub 主题。
点击
创建主题。在主题 ID 字段中,提供一个主题名称。
保留默认的订阅和加密设置,然后点击创建。
关联 Pub/Sub 主题
要使程序化通知能够接收与预算或异常的当前状态相关的 Pub/Sub 消息,您必须将预算或异常与 Pub/Sub 主题相关联。
预算通知
如需将 Pub/Sub 主题关联到 Cloud Billing 预算,请完成以下步骤:
拥有 Cloud Billing 账号权限的用户 | 仅拥有项目级权限的用户(预览版) |
---|---|
|
|
异常通知
如需将 Pub/Sub 主题与费用异常相关联,请完成以下步骤:
拥有 Cloud Billing 账号权限的用户(预览版) |
---|
|
通知格式
发送到 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"
|
预算金额类型。可以是下列值之一:
|
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
|
{
|
资源的预计支出。 |
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 中发布和接收消息。
后续步骤
如需详细了解如何使用程序化通知,请查看下列有关程序化费用控制响应的示例: