Google Cloud Managed Service for Prometheus 會根據擷取至 Cloud Monitoring 的樣本數,以及對 Monitoring API 的讀取要求數量收費。費用主要取決於擷取的樣本數。
本文將說明如何控管指標擷取作業的相關成本,以及如何找出大量擷取作業的來源。
如要進一步瞭解 Managed Service for Prometheus 的定價,請參閱 Managed Service for Prometheus 定價摘要。
查看帳單
如要查看 Google Cloud 帳單,請按照下列步驟操作:
前往 Google Cloud 控制台的「Billing」頁面。
如果您有多個帳單帳戶,請選取 [Go to linked billing account] (前往連結的帳單帳戶),以查看目前專案所屬的帳單帳戶。如要查看其他帳單帳戶,請選取「管理帳單帳戶」,然後選擇您想取得用量報表的帳戶。
在「Billing」(帳單) 導覽選單的「Cost management」(費用管理) 部分,選取「Reports」(報表)。
在「服務」選單中,選取「Cloud Monitoring」選項。
在「SKU」選單中選取下列選項:
- 已擷取的 Prometheus 樣本數
- 監控 API 要求
下圖顯示某個專案的 Managed Service for Prometheus 帳單報表:
降低費用
如要降低使用 Managed Service for Prometheus 的相關費用,您可以採取下列做法:
- 篩選產生的指標資料,減少傳送至受管理服務的時間序列數量。
- 變更刮除間隔,減少收集的樣本數量。
- 限制來自可能設定錯誤的高基數指標的樣本數量。
減少時間序列數量
開放原始碼 Prometheus 說明文件很少建議篩除指標數量,但如果成本受機器成本限制,這麼做是合理的。不過,如果以單位計價向受管理的服務供應商支付費用,傳送無限量的資料可能會導致不必要的高額帳單。
kube-prometheus
專案中包含的匯出工具 (尤其是 kube-state-metrics
服務) 可以產生大量指標資料。舉例來說,kube-state-metrics
服務會產生數百個指標,其中許多對消費者來說可能完全沒有價值。使用 kube-prometheus
專案的新三節點叢集,每秒會向 Managed Service for Prometheus 傳送約 900 個樣本。只要篩除這些不必要的指標,就能將帳單降到可接受的程度。
如要減少指標數量,您可以執行下列操作:
如果您使用 kube-state-metrics
服務,可以透過 keep
動作新增 Prometheus 重新命名規則。對於代管收集,這項規則會加入 PodMonitoring 或 ClusterPodMonitoring 定義。如果是自行部署的收集,則這項規則會加入 Prometheus 擷取設定或 ServiceMonitor 定義 (適用於 prometheus-operator)。
舉例來說,在全新的三節點叢集中使用下列篩選器,可將每秒的取樣量減少約 125 個:
metricRelabeling: - action: keep regex: kube_(daemonset|deployment|pod|namespace|node|statefulset|persistentvolume|horizontalpodautoscaler)_.+ sourceLabels: [__name__]
上一個篩選器使用規則運算式,根據指標名稱指定要保留哪些指標。舉例來說,名稱開頭為 kube_daemonset_
的指標會保留。您也可以指定 drop
動作,篩除符合規則運算式的指標。
有時,您可能會發現整個匯出程式不重要。舉例來說,kube-prometheus
套件預設會安裝下列服務監控器,其中許多在受管理環境中並非必要:
alertmanager
coredns
grafana
kube-apiserver
kube-controller-manager
kube-scheduler
kube-state-metrics
kubelet
node-exporter
prometheus
prometheus-adapter
prometheus-operator
如要減少匯出的指標數量,您可以刪除、停用或停止擷取不需要的服務監控項目。舉例來說,在全新的三節點叢集中停用 kube-apiserver
服務監控器,可將每秒的樣本量減少約 200 個。
減少收集的樣本數
Managed Service for Prometheus 是以樣本為單位計費。您可以增加取樣期間的長度,藉此減少擷取的樣本數。例如:
- 將 10 秒的取樣期間改為 30 秒,可將樣本量減少 66%,且不會造成太多資訊損失。
- 將 10 秒的取樣期間變更為 60 秒,可將取樣量減少 83%。
如要瞭解如何計算樣本數量,以及取樣期間如何影響樣本數量,請參閱「根據已擷取的樣本數量計費範例」。
通常,您可以根據每個工作或每個目標設定檢索間隔。
如果是管理式收集,您可以使用 interval
欄位,在 PodMonitoring
資源中設定刮除間隔。對於自行部署的收集作業,您可以在刮除設定中設定取樣間隔,通常是設定 interval
或 scrape_interval
欄位。
設定本機匯總 (僅限自行部署的收集)
如果您使用自行部署的收集功能設定服務 (例如使用 kube-prometheus、prometheus-operator,或手動部署映像檔),您可以在本機匯總高卡數指標,減少傳送至 Managed Service for Prometheus 的樣本數。您可以使用記錄規則匯總 instance
等標籤,並使用 --export.match
旗標或 EXTRA_ARGS
環境變數,只將匯總資料傳送至 Monarch。
舉例來說,假設您有三個指標:high_cardinality_metric_1
、high_cardinality_metric_2
和 low_cardinality_metric
。您希望減少傳送給 high_cardinality_metric_1
的樣本,並移除所有傳送給 high_cardinality_metric_2
的樣本,同時保留所有儲存在本機的原始資料 (可能用於發出快訊)。設定可能如下所示:
- 部署 Managed Service for Prometheus 映像檔。
- 設定刮除設定,將所有原始資料刮除至本機伺服器 (使用盡可能少的篩選器)。
設定記錄規則,以便在
high_cardinality_metric_1
和high_cardinality_metric_2
上執行本機匯總,例如匯總掉instance
標籤或任意數量的指標標籤,視哪種方式能最有效減少不必要的時間序列數量而定。您可以執行以下規則,該規則會捨棄instance
標籤,並對剩餘標籤產生的時間序列求和:record: job:high_cardinality_metric_1:sum expr: sum without (instance) (high_cardinality_metric_1)
如要瞭解更多匯總選項,請參閱 Prometheus 說明文件中的匯總運算子。
使用下列篩選標記部署 Managed Service for Prometheus 映像檔,這可避免將列出的指標原始資料傳送至 Monarch:
--export.match='{__name__!="high_cardinality_metric_1",__name__!="high_cardinality_metric_2"}'
這個範例
export.match
標記使用!=
運算子搭配逗號分隔的選取器,篩除不必要的原始資料。如果您新增其他記錄規則來匯總其他高基數指標,則必須在篩選器中新增新的__name__
選取器,以便捨棄原始資料。使用包含多個選取器的單一標記,搭配!=
運算子篩除不需要的資料,這樣您只需要在建立新的匯總時修改篩選器,而不需要每次修改或新增檢索設定時都修改篩選器。某些部署方法 (例如 prometheus-operator) 可能會要求您省略方括號內的單引號。
在建立及管理記錄規則和 export.match
標記時,這項工作流程可能會產生一些運作額外負擔,但如果您只著重於基數極高的指標,就能大幅減少資料量。如要瞭解如何找出哪些指標最適合使用本機預先匯總功能,請參閱「找出高量指標」。
使用 Managed Service for Prometheus 時,請勿實作聯邦功能。這個工作流程讓使用聯邦伺服器的做法過時,因為單一自行部署的 Prometheus 伺服器可以執行您可能需要的任何叢集層級匯總作業。聯合可能會導致意外的影響,例如「unknown」類型指標和雙倍的擷取量。
限制高基數指標的樣本 (僅限自行部署的收集作業)
您可以新增具有大量可能值的標籤 (例如使用者 ID 或 IP 位址),建立極高基數的指標。這類指標可能會產生大量的樣本。使用包含大量值的標籤通常是錯誤設定。您可以在擷取設定中設定 sample_limit
值,以防自部署收集器產生高基數指標。
如果您使用這個限制,建議您將其設為非常高的值,這樣系統就只會擷取明顯設定錯誤的指標。超出限制的任何樣本都會遭到捨棄,而且很難診斷超出限制所造成的問題。
使用樣本限制並非管理樣本攝入的理想做法,但這項限制可避免意外設定錯誤。詳情請參閱「使用 sample_limit
避免過載」。
找出費用並找出來源
您可以使用 Cloud Monitoring 找出寫入樣本數量最多的 Prometheus 指標。這些指標對您的費用影響最大。找出耗用資源最多的指標後,您可以修改檢索設定,以便適當篩除這些指標。
Cloud Monitoring 的「指標管理」頁面提供的資訊可協助您控制可計費指標的支出金額,且不會影響可觀察性。「指標管理」頁面會回報下列資訊:
- 以位元組和樣本為基礎的計費作業量,跨指標網域和個別指標。
- 指標的標籤和基數資料。
- 每個指標的讀取次數。
- 在警告政策和自訂資訊主頁中使用指標。
- 指標寫入錯誤率。
您也可以使用「指標管理」頁面排除不需要的指標,省下擷取這些指標的成本。
如要查看「指標管理」頁面,請按照下列步驟操作:
-
在 Google Cloud 控制台中,前往
「Metrics management」頁面:如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 在工具列中選取時間範圍。根據預設,「指標管理」頁面會顯示過去一天內收集的指標資訊。
如要進一步瞭解「指標管理」頁面,請參閱「查看及管理指標使用情形」一文。
以下各節將說明如何分析傳送至 Managed Service for Prometheus 的樣本數量,並將大量資料歸因於特定指標、Kubernetes 命名空間和 Google Cloud 區域。
找出高使用量指標
如要找出擷取量最高的 Prometheus 指標,請執行下列操作:
-
在 Google Cloud 控制台中,前往
「Metrics management」頁面:如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 在「已擷取的計費樣本數」評量表中,按一下「查看圖表」。
- 找出「命名空間內容擷取量」圖表,然後按一下 more_vert「更多圖表選項」。
- 選取「在 Metrics Explorer 中查看」圖表選項。
- 在「Metrics Explorer」的「Builder」窗格中,修改欄位如下:
- 在「指標」欄位中,確認已選取下列資源和指標:
Metric Ingestion Attribution
和Samples written by attribution id
。 - 在「Aggregation」欄位中,選取
sum
。 - 針對「by」欄位,選取下列標籤:
attribution_dimension
metric_type
- 在「Filter」欄位中使用
attribution_dimension = namespace
。您必須先依據attribution_dimension
標籤匯總資料,才能執行這項操作。
產生的圖表會顯示每個指標類型的擷取量。
- 在「指標」欄位中,確認已選取下列資源和指標:
- 如要查看各項指標的擷取量,請在標示為「圖表表格兩者皆顯示」的切換按鈕中選取「兩者皆顯示」。表格會在「Value」欄中顯示每個指標的擷取量。
- 按兩下「Value」資料欄標題,依擷取量遞減排序指標。
產生的圖表會根據平均值,按數量排序顯示前幾項指標,如下圖所示:
找出使用量高的命名空間
如要將擷取量歸因至特定 Kubernetes 命名空間,請執行下列操作:
-
在 Google Cloud 控制台中,前往
「Metrics management」頁面:如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 在「已擷取的計費樣本數」評量表中,按一下「查看圖表」。
- 找出「命名空間內容擷取量」圖表,然後按一下 more_vert「更多圖表選項」。
- 選取「在 Metrics Explorer 中查看」圖表選項。
- 在 Metrics Explorer 的「Builder」窗格中,修改欄位如下:
- 在「指標」欄位中,確認已選取下列資源和指標:
Metric Ingestion Attribution
和Samples written by attribution id
。 - 視需要設定其他查詢參數:
- 如要將整體擷取量與命名空間建立關聯:
- 在「Aggregation」欄位中,選取
sum
。 - 針對「by」欄位,選取下列標籤:
attribution_dimension
attribution_id
- 在「Filter」欄位中使用
attribution_dimension = namespace
。
- 在「Aggregation」欄位中,選取
- 如要將個別指標的擷取量與命名空間相關聯:
- 在「Aggregation」欄位中,選取
sum
。 - 針對「按」欄位,選取下列標籤:
attribution_dimension
attribution_id
metric_type
- 在「Filter」欄位中使用
attribution_dimension = namespace
。
- 在「Aggregation」欄位中,選取
- 如要找出造成特定高量指標的命名空間,請按照下列步驟操作:
- 請使用其他範例找出高量指標類型,藉此找出高量指標的指標類型。指標類型是表格檢視畫面中以
prometheus.googleapis.com/
開頭的字串。詳情請參閱「 找出高流量指標」。 - 在「Filter」欄位中新增指標類型的篩選器,即可將圖表資料限制在所識別的指標類型。例如:
metric_type= prometheus.googleapis.com/container_tasks_state/gauge
。 - 在「Aggregation」欄位中,選取
sum
。 - 針對「按」欄位,選取下列標籤:
attribution_dimension
attribution_id
- 在「Filter」欄位中使用
attribution_dimension = namespace
。
- 請使用其他範例找出高量指標類型,藉此找出高量指標的指標類型。指標類型是表格檢視畫面中以
- 如要查看按 Google Cloud 區域分類的攝入資料,請將
location
標籤新增至「按」欄位。 - 如要查看按 Google Cloud 專案分類的攝入資料,請將
resource_container
標籤新增至「按」欄位。
- 如要將整體擷取量與命名空間建立關聯:
- 在「指標」欄位中,確認已選取下列資源和指標: