費用控管和歸因

Google Cloud Managed Service for Prometheus 會根據擷取至 Cloud Monitoring 的樣本數,以及對 Monitoring API 的讀取要求收費。擷取的樣本數是費用的主要影響因素。

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

如要進一步瞭解 Managed Service for Prometheus 的定價,請參閱 Google Cloud Observability 定價頁面的 Cloud Monitoring 部分。

查看帳單

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

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

    前往「帳單」頁面

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

  3. 在「帳單」導覽選單的「成本管理」部分,選取「報表」

  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 專案的全新三節點叢集,每秒會將約 900 個樣本傳送至 Managed Service for Prometheus。光是篩除這些無關的指標,或許就能將帳單金額降至可接受的範圍。

如要減少指標數量,請採取下列做法:

如果您使用 kube-state-metrics 服務,可以新增具有 keep 動作的 Prometheus 重新標記規則。如果是代管型收集,這項規則會納入 PodMonitoring 或 ClusterPodMonitoring 定義。如果是自行部署的收集作業,這項規則會放在 Prometheus scrape configServiceMonitor 定義中 (適用於 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 伺服器可以執行您可能需要的任何叢集層級彙整作業。同盟可能會導致非預期的影響,例如「不明」類型的指標和雙倍的擷取量。

限制高基數指標的樣本 (僅限自行部署的收集作業)

您可以新增具有大量可能值的標籤 (例如使用者 ID 或 IP 位址),建立基數極高的指標。這類指標可能會產生大量樣本。使用含有大量值的標籤通常是設定錯誤。您可以透過在擷取設定中設定 sample_limit 值,防範自行部署的收集器出現高基數指標。

如果使用這項限制,建議您將值設得非常高,這樣系統就只會偵測到明顯設定錯誤的指標。超過限制的任何樣本都會遭到捨棄,而且超出限制所導致的問題可能很難診斷。

使用樣本限制並非管理樣本擷取的理想方式,但這項限制可避免您不慎設定錯誤。詳情請參閱「使用 sample_limit 避免過載」。

找出並歸因費用

您可以使用 Cloud Monitoring 找出寫入最多樣本的 Prometheus 指標。這些指標對您的費用影響最大。找出最昂貴的指標後,即可修改擷取設定,適當篩選這些指標。

Cloud Monitoring 的「指標管理」頁面提供相關資訊,可協助您控管可計費指標的支出金額,同時不影響可觀測性。「指標管理」頁面會回報下列資訊:

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

您也可以使用「指標管理」頁面排除不必要的指標,藉此省下擷取這些指標的費用。

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

  1. 前往 Google Cloud 控制台的 「指標管理」頁面:

    前往「指標管理」

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

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

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

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

找出高用量指標

如要找出擷取量最高的 Prometheus 指標,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 「指標管理」頁面:

    前往「指標管理」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「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. 如要查看各項指標的擷取量,請在標示為「圖表」、「表格」和「兩者」的切換按鈕中,選取「兩者」。表格的「值」欄會顯示每個指標的擷取量。
  7. 按兩下「值」資料欄標題,即可依遞減的擷取量排序指標。

產生的圖表會依平均值排序,顯示依數量排名的熱門指標,如下列螢幕截圖所示: 設定的圖表會顯示每個指標的指標擷取量。

找出高用量命名空間

如要將擷取量歸因於特定 Kubernetes 命名空間,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 「指標管理」頁面:

    前往「指標管理」

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

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