費用控管和歸因

Google Cloud Managed Service for Prometheus 會根據擷取至 Cloud Monitoring 的樣本數,以及對 Monitoring API 的讀取要求數量收費。費用主要取決於擷取的樣本數。

本文將說明如何控管指標擷取作業的相關成本,以及如何找出大量擷取作業的來源。

如要進一步瞭解 Managed Service for Prometheus 的定價,請參閱 Managed Service for Prometheus 定價摘要

查看帳單

如要查看 Google Cloud 帳單,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Billing」頁面。

    前往「帳單」頁面

  2. 如果您有多個帳單帳戶,請選取 [Go to linked billing account] (前往連結的帳單帳戶),以查看目前專案所屬的帳單帳戶。如要查看其他帳單帳戶,請選取「管理帳單帳戶」,然後選擇您想取得用量報表的帳戶。

  3. 在「Billing」(帳單) 導覽選單的「Cost management」(費用管理) 部分,選取「Reports」(報表)

  4. 在「服務」選單中,選取「Cloud Monitoring」選項。

  5. 在「SKU」選單中選取下列選項:

    • 已擷取的 Prometheus 樣本數
    • 監控 API 要求

下圖顯示某個專案的 Managed Service for Prometheus 帳單報表:

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 資源中設定刮除間隔。對於自行部署的收集作業,您可以在刮除設定中設定取樣間隔,通常是設定 intervalscrape_interval 欄位。

設定本機匯總 (僅限自行部署的收集)

如果您使用自行部署的收集功能設定服務 (例如使用 kube-prometheus、prometheus-operator,或手動部署映像檔),您可以在本機匯總高卡數指標,減少傳送至 Managed Service for Prometheus 的樣本數。您可以使用記錄規則匯總 instance 等標籤,並使用 --export.match 旗標EXTRA_ARGS 環境變數,只將匯總資料傳送至 Monarch。

舉例來說,假設您有三個指標:high_cardinality_metric_1high_cardinality_metric_2low_cardinality_metric。您希望減少傳送給 high_cardinality_metric_1 的樣本,並移除所有傳送給 high_cardinality_metric_2 的樣本,同時保留所有儲存在本機的原始資料 (可能用於發出快訊)。設定可能如下所示:

  • 部署 Managed Service for Prometheus 映像檔。
  • 設定刮除設定,將所有原始資料刮除至本機伺服器 (使用盡可能少的篩選器)。
  • 設定記錄規則,以便在 high_cardinality_metric_1high_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 的「指標管理」頁面提供的資訊可協助您控制可計費指標的支出金額,且不會影響可觀察性。「指標管理」頁面會回報下列資訊:

  • 以位元組和樣本為基礎的計費作業量,跨指標網域和個別指標。
  • 指標的標籤和基數資料。
  • 每個指標的讀取次數。
  • 在警告政策和自訂資訊主頁中使用指標。
  • 指標寫入錯誤率。

您也可以使用「指標管理」頁面排除不需要的指標,省下擷取這些指標的成本。

如要查看「指標管理」頁面,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往 「Metrics management」頁面:

    前往「指標管理」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在工具列中選取時間範圍。根據預設,「指標管理」頁面會顯示過去一天內收集的指標資訊。

如要進一步瞭解「指標管理」頁面,請參閱「查看及管理指標使用情形」一文。

以下各節將說明如何分析傳送至 Managed Service for Prometheus 的樣本數量,並將大量資料歸因於特定指標、Kubernetes 命名空間和 Google Cloud 區域。

找出高使用量指標

如要找出擷取量最高的 Prometheus 指標,請執行下列操作:

  1. 在 Google Cloud 控制台中,前往 「Metrics management」頁面:

    前往「指標管理」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在「已擷取的計費樣本數」評量表中,按一下「查看圖表」
  3. 找出「命名空間內容擷取量」圖表,然後按一下 「更多圖表選項」
  4. 選取「在 Metrics Explorer 中查看」圖表選項。
  5. 在「Metrics Explorer」的「Builder」窗格中,修改欄位如下:
    1. 在「指標」欄位中,確認已選取下列資源和指標:
      Metric Ingestion Attribution Samples written by attribution id
    2. 在「Aggregation」欄位中,選取 sum
    3. 針對「by」欄位,選取下列標籤:
      • attribution_dimension
      • metric_type
    4. 在「Filter」欄位中使用 attribution_dimension = namespace。您必須先依據 attribution_dimension 標籤匯總資料,才能執行這項操作。

    產生的圖表會顯示每個指標類型的擷取量。

  6. 如要查看各項指標的擷取量,請在標示為「圖表表格兩者皆顯示」的切換按鈕中選取「兩者皆顯示」。表格會在「Value」欄中顯示每個指標的擷取量。
  7. 按兩下「Value」資料欄標題,依擷取量遞減排序指標。

產生的圖表會根據平均值,按數量排序顯示前幾項指標,如下圖所示: 設定好的圖表會顯示每項指標的指標擷取量。

找出使用量高的命名空間

如要將擷取量歸因至特定 Kubernetes 命名空間,請執行下列操作:

  1. 在 Google Cloud 控制台中,前往 「Metrics management」頁面:

    前往「指標管理」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在「已擷取的計費樣本數」評量表中,按一下「查看圖表」
  3. 找出「命名空間內容擷取量」圖表,然後按一下 「更多圖表選項」
  4. 選取「在 Metrics Explorer 中查看」圖表選項。
  5. 在 Metrics Explorer 的「Builder」窗格中,修改欄位如下:
    1. 在「指標」欄位中,確認已選取下列資源和指標:
      Metric Ingestion Attribution Samples written by attribution id
    2. 視需要設定其他查詢參數:
      • 如要將整體擷取量與命名空間建立關聯:
        • 在「Aggregation」欄位中,選取 sum
        • 針對「by」欄位,選取下列標籤:
          • attribution_dimension
          • attribution_id
        • 在「Filter」欄位中使用 attribution_dimension = namespace
      • 如要將個別指標的擷取量與命名空間相關聯:
        • 在「Aggregation」欄位中,選取 sum
        • 針對「按」欄位,選取下列標籤:
          • attribution_dimension
          • attribution_id
          • metric_type
        • 在「Filter」欄位中使用 attribution_dimension = namespace
      • 如要找出造成特定高量指標的命名空間,請按照下列步驟操作:
        1. 請使用其他範例找出高量指標類型,藉此找出高量指標的指標類型。指標類型是表格檢視畫面中以 prometheus.googleapis.com/ 開頭的字串。詳情請參閱「 找出高流量指標」。
        2. 在「Filter」欄位中新增指標類型的篩選器,即可將圖表資料限制在所識別的指標類型。例如:
          metric_type= prometheus.googleapis.com/container_tasks_state/gauge
        3. 在「Aggregation」欄位中,選取 sum
        4. 針對「按」欄位,選取下列標籤:
          • attribution_dimension
          • attribution_id
        5. 在「Filter」欄位中使用 attribution_dimension = namespace
      • 如要查看按 Google Cloud 區域分類的攝入資料,請將 location 標籤新增至「按」欄位。
      • 如要查看按 Google Cloud 專案分類的攝入資料,請將 resource_container 標籤新增至「按」欄位。