本文說明如何使用 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 帳戶 ID。 |
budgetId |
de72f49d-779b-4945-a127-4d6ce8def0bb
|
Cloud Billing 帳戶內的預算快訊 ID。 |
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
|
這個值代表您指定的最高預測費用在快訊門檻中所佔的比例,值為百分比,採 10 進位格式 (例如:0.2 即為 20%)。如果預測費用未超過任何門檻,系統就不會顯示這個鍵。 |
currencyCode
|
"USD"
|
預算快訊的貨幣。所有費用和預算金額都會以這個貨幣計算。 |
異常狀況通知
屬性
屬性是 Cloud Billing 傳送至 Pub/Sub 主題的所有通知中包含的鍵/值組合。無論通知酬載為何,通知都會包含以下鍵值組合。
屬性名稱 | 範例 | 說明 |
---|---|---|
範圍 |
scope_project
|
異常狀況的範圍。 |
billingAccountName |
billingAccounts/01D4EE-079462-DFD6EC
|
發生異常的 Cloud Billing 帳戶 ID。 |
resourceDisplayName |
My project
|
發生異常的資源顯示名稱。 |
resourceName |
projects/123456
|
發生異常狀況的資源 ID。 |
SchemaVersion |
1.0
|
Pub/Sub 結構定義版本。 |
資料
系統會以採用 Base64 編碼的 UTF-8 字串傳回異常快訊詳情,且該字串內的 JSON 物件會包含以下內容:
資料 | 範例 | 說明 |
---|---|---|
anomalyName
|
billingAccounts/01D4EE-079462-DFD6EC/anomalies/aaa
|
異常狀況的資源名稱。 |
billingAccountName
|
billingAccounts/01D4EE-079462-DFD6EC
|
帳單帳戶的 ID。 |
resourceName
|
"projects/12345"
|
發生異常狀況的資源 ID。 |
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 中發布及接收訊息」。
後續步驟
如要進一步瞭解如何使用程式輔助通知,請參閱下列程式輔助費用控制回應範例: