GCP Billing export with Big Query 小記
今天要來寫將 GCP 的費用匯出到 Big Query 進行查詢
費用的概念, 在雲端與地端其實是很不一樣的
地端
前期需要投入一定量的資本額, 按照購入的設備規格, 決定日後服務的種類與規模
後期費用爲固定維護費用與折舊, 依照業務改變決定是否購入新硬體. 後期費用對使用率感覺相對不明顯.
雲端
前期不需要投入資本額, 服務的種類或是規模隨服務量產生變化, 可採隨用即付或是等服務穩定之後使用 RI 方式或是其他方式節費
後期費用因使用率會馬上感受到費用的變化
如果在專案的數量沒有很多的狀況下, 專案的費用是可以經由 portal 上的 Billing -- > Report 手動查詢, 或是等帳單來臨的時候來進行觀察. 可是如同剛剛描述的, 如果等到帳單出帳的時候, 再來進行檢討, 可能為時已晚.
手動查詢費用在專案少的時候可以人工來處理, 但是等到專案慢慢越來越多, 卻會佔掉很多時間.
所以另外一個好的方式就是將 billing 匯出到 Big Query 來查詢與分析
參考官方的文件
首先要建立專案與 Big Query Dataset
為了核算清楚, 會建議新建一個專案, 然後產生一個 Big Query 的 Dataset 來獨立管理
因為帳單的資料沒辦法跨 Billing Account, 所以如果有多個 Billing Account 就要建立多個專案與 Big Query Dataset 來處理
如果是透過 Partner, 那就要請 Partner 那邊有 Billing Account Administrator 角色的人幫忙進行匯出
建立的方式很簡單, 建立完新專案之後, 到 Big Query 介面, 選取左下角的專案名稱
點選 CREATE DATASET
輸入 Dataset 名稱
點選 Create dataset
第二個步驟就是將 Cloud Billing 導出到 Big Query
首先執行的人必須要有 Billing Account Administrator 角色
在 Portal 上面選取 Billing
點選 Billing export
點選 BIGQUERY EXPORT 分頁
選取剛剛建立的專案與 dataset
點選 SAVE
設定完成之後大概一到兩天就會看到開始有費用的資料匯入到 dataset 裡面了
等到匯集一段時間的費用, 就可以開始來進行查詢與分析了
在查詢之前, 建議是先觀察一下有那些 Schema 可以使用
可以在 Big Query 介面, 點選 專案 -- > 點選 Dataset -- > 點選匯出的 table ( gcp_billing_export_v1XXXXXXXX ) 來觀察
接下來就可以在 Query editor 的地方輸入查詢的語法來進行查詢了
以下進行兩個範例
========================================================
-- 針對特定專案, 特定月份, 個別服務的費用, 不區分地區
SELECT
invoice.month,
project.name,
service.description,
SUM(cost) AS total_cost,
-- ROUND() 手動調整成小數點後兩位
ROUND(SUM(cost) + SUM(IFNULL((
SELECT
-- c.amount 是下面 credits 的加總
SUM(c.amount)
FROM
-- credits 是優惠點數或是折扣, 使用 UNNEST 逐條列出, 定義為 c
UNNEST(credits) c),
0)),2) AS cost_after_credits
FROM
-- 這邊接要分析的 專案名稱.資料庫名稱.資料表名稱
`YOUR_PROJECT.YOUR_DATASET.gcp_billing_export_v1_XXXXX_YYYYY_ZZZZZ`
WHERE
invoice.month = "202006"
AND project.name = "maxtest2020"
GROUP BY
invoice.month,
project.name,
service.description
ORDER BY
cost_after_credits DESC ;
上面 FROM 請換成 自己的專案.自己的DATASET.TABLE名稱
invoice.month 就輸入要查詢的月份
project.name 就輸入要查詢的專案
輸入查詢的語法後, 可以看一下語法是否正確
另外一個重點是, 查詢的資料大小, 因為這個也是關乎費用 :P
得到的結果範例如下
========================================================
-- 取特定日期區間, 個別專案的總費用
SELECT
project.name,
SUM(cost) AS total_cost,
-- 這邊使用 round() 取到小數點 2 位數, 之後可以考慮乘上匯率
-- cost 要使用 sum 來進行加總
ROUND(SUM(cost) + SUM(IFNULL((
SELECT
-- c.amount 是下面 credits 的加總
SUM(c.amount)
FROM
-- credits 是優惠點數或是折扣, 使用 UNNEST 逐條列出, 定義為 c
UNNEST(credits) c),
-- 這邊的0 是 IFNULL 就為 0, 2 是ROUND() 取到小數點兩位數
0)),2) AS cost_after_credits
FROM
-- 這邊接要分析的 專案名稱.資料庫名稱.資料表名稱
`YOUR_PROJECT.YOUR_DATASET.gcp_billing_export_v1_XXXXX_YYYYY_ZZZZZ`
WHERE
-- 這邊過濾時間區間落在 2020-06-21 到 2020-06-24 之間
DATE(_partitiontime) BETWEEN "2020-06-21"
AND "2020-06-24"
-- 用專案來進行 GROUP BY
GROUP BY
project.name
ORDER BY
cost_after_credits DESC ;
上面 FROM 請換成 自己的專案.自己的DATASET.TABLE名稱
DATE(_partitiontime) BETWEEN 就輸入要查詢的區間
得到的結果範例如下
========================================================
Notes:
如果要匯出 Data Studio 發現權限不足
要先開啟 Data Studio 並接受相關規範再進行匯出
這樣又多了一個方便的分析工具, 不用手動來進行查詢了 (撒花)
~ enjoy it
Reference:
1 則留言:
您好,我依您的SOP 去做billging data export, 但我從2023/1/19 轉過去,但到今天還是1/21 還是"There is no data to display." 不知您有沒有遇過,或我還需要做什麼動作!? Thanks your help.
my query script:
SELECT * FROM `delta-coast-xxxxxx.delta_Coastxxxxx_20230119.gcp_billing_export_resource_v1_018BF7_xxxxx_xxxxxx`
Result:
"There is no data to display."
張貼留言