共用方式為


使用 Prometheus 的 Azure Monitor 管理服務來擴展 Azure 監控工作區的最佳做法

適用於 Prometheus 的 Azure 監視器受管理服務,可讓您大規模收集和分析計量。 Prometheus 計量會儲存在 Azure 監視器工作區中。 工作區支援各種分析工具 (例如 Azure 受控 Grafana)、搭配 PromQL 的 Azure 監視器計量瀏覽器,以及開放原始碼工具 (例如 PromQL 和 Grafana)。

本文提供最佳做法來組織化您的 Azure 監視器工作區,以符合您的規模需求及不斷增加的資料擷取量。

拓撲設計準則

單一 Azure 監視器工作區就足以用於許多使用案例。 有些組織會建立多個工作區,以便更符合其需求。 當您確定建立其他工作區的正確準則時,您請建立符合您需求的最低數量工作區,同時針對最小系統管理額外負荷進行最佳化。

以下是必須將 Azure 監視器工作區分割成多個工作區的案例:

狀況 最佳做法
主權雲端 使用多個主權雲端時,請在每個雲端建立 Azure 監視器工作區。
合規性或法規需求 如果您受限於規定在特定區域中儲存資料的法規,請根據需求為每個區域建立 Azure 監視器工作區。
區域性調整 當您管理多區域組織的計量時,例如具有區域帳戶的大型服務或金融機構,請為每個區域建立 Azure 監視器工作區。
Azure 租用戶 針對多個 Azure 租用戶,請在每個租用戶中建立 Azure 監視器工作區。 不支援跨租戶資料查詢。
部署環境 為每個部署環境建立個別的工作區,以維護開發、測試、生產前和生產環境的離散計量。
服務限制與配額 Azure 監視器工作區具有預設擷取限制,您可開啟支援票證來提高上限。 如果您接近上限,或估計將超過擷取上限,請考慮要求增加或將工作區分割成兩個以上的工作區。

服務限制與配額

Azure 監視器工作區的計量設有預設配額和限制:每分鐘擷取一百萬個事件。 隨著使用量增長,當您需要擷取更多指標時,您可以要求增加。 如果您的容量需求特別大,且資料擷取需求即將超過單一 Azure 監視器工作區的限制,請考量建立多個 Azure 監視器工作區。 使用 Azure 監視器工作區平台計量來監視使用率和限制。 如需限制和配額的詳細資訊,請參閱 Azure 監視器服務限制和配額

請考慮下列管理 Azure 監視器工作區限制和配額的最佳做法:

最佳做法 說明
監視擷取限制和使用率並建立相關警示。 在 Azure 入口網站中,瀏覽至您的 Azure 監視器工作區。 移至 [計量],並確認計量 [啟用時間序列百分比使用率] 和 [每分鐘事件擷取百分比使用率] 都低於 100%。 設定 Azure 監視器警示來監視使用率,並在使用率大於 80% 的限制時引發警示。 如需監視使用率和限制的詳細資訊,請參閱如何監視服務限制和配額
當使用率超過目前限制的 80% 時,要求增加限制。 隨著 Azure 使用率的增長,擷取的資料量也可能隨之增加。 如果您的資料擷取超過或接近 80% 的擷取限制,建議您要求增加限制。 若要要求增加限制,請參閱 要求增加擷取限制
估算您的預測規模。 隨著您的使用率增長,您會擷取更多計量到工作區,請估算預測的規模和成長率。 根據您的預測,要求提高限制。
使用 Azure 監視器側車容器搭配遠端寫入來擷取。 如果您使用 Azure 監視器側車容器和遠端寫入,將計量擷取到 Azure 監視器工作區,請考慮下列限制:
  • 側車容器最多可以處理 150,000 個獨特的時間序列。
  • 容器可能會因為大量的並行連線數而擲回處理超過 150,000 個要求的錯誤。 請將遠端批次大小從 500 預設值增加到 1,000,以減輕此問題。 變更遠端批次大小可減少開啟的連線數。
  • DCR/DCE 限制。 這些限制會套用至將 Prometheus 計量傳送至 Azure 監視器工作區的資料收集規則 (DCR) 和資料收集端點 (DCE)。 若要監視這些限制,請參閱 檢視和監視 DCR 限制。 這些限制無法增加。

    請考慮建立其他 DCR 和 DCE,將擷取負載分散到多個端點。 這種方法有助於最佳化效能,並確保資料處理效率。 如需建立 DCR 和 DCE 的詳細資訊,請參閱 如何為現有的 Azure 監視器工作區建立自定義數據收集端點(DCE)和自定義數據收集規則(DCR),以內嵌 Prometheus 計量

    最佳化大量資料的效能

    擷取

    若要最佳化擷取,請考慮下列最佳做法:

    最佳做法 說明
    識別高基數計量。 識別有高基數的計量,或產生許多時間序列的計量。 Azure 監視器工作區計量使用洞察 提供有關時間序列和事件使用量的資訊,以供計量使用和成本優化之參考。 識別高基數指標後,通過移除不必要的標籤來最佳化它們,以減少時間序列的數量。
    使用 Prometheus 設定以最佳化資料引入。 Azure 受控 Prometheus 提供 Configmap,您可以設定其中所含的設定並用來最佳化擷取。 如需詳細資訊,請參閱 ama-metrics-settings-configmapama-metrics-prometheus-config-configmap。 這些設定所遵循的格式與 Prometheus 設定檔相同。
    如需自訂集合的相關資訊,請參閱在適用於 Prometheus 的 Azure 監視器受管理服務中自訂抓取 Prometheus 計量。 例如,請考慮下列事項:

  • 調整抓取間隔
  • 預設的抓取頻率為 30 秒,您可使用 configmap 來變更每個預設目標的抓取頻率。 若要平衡資料粒度和資源使用狀況之間的取捨,請根據計量的關鍵性來調整 scrape_intervalscrape_timeout

  • 移除高基數計量的不必要標籤
  • 對於高基數計量,請識別不必要的標籤並卸除,以減少時間序列數。 使用 metric_relabel_configs 從擷取卸除特定標籤。 如需詳細資訊,請參閱 Prometheus 設定

    使用 configmap、視需要變更設定,並將 configmap 套用至叢集的 kube 系統命名空間。 如果您使用遠端寫入和 Azure 監視器工作區,請在 Prometheus 設定中直接套用擷取期間自訂。

    查詢

    若要最佳化查詢,請考慮下列最佳做法:

    使用錄製規則將查詢效能最佳化

    Prometheus 錄製規則可用來預先計算常用或計算成本昂貴的查詢,使其更有效率且更快速地進行查詢。 錄製規則特別適用於大量計量,其中查詢原始資料可能會很慢且需要大量資源。 如需詳細資訊,請參閱錄製規則。 Azure Managed Prometheus 提供受控且可調整的方式,透過 Azure 受控 Prometheus 規則群組的協助,建立和更新錄製規則。

    建立規則群組之後,Azure 受控 Prometheus 就會自動載入並開始評估它們。 從 Azure 監視器工作區查詢規則群組,例如其他 Prometheus 計量。

    錄製規則有下列優點:

    • 改善查詢效能 錄製規則可用來預先計算複雜的查詢,使其更快速地稍後進行查詢。 預先計算複雜的查詢可在查詢這些計量時減少 Prometheus 上的負載。

    • 效率與縮短查詢時間 錄製規則會預先計算查詢結果,以減少查詢數據所花費的時間。 這特別適用於有多個面板的儀表板或高基數計量。

    • 單純 錄製規則可簡化 Grafana 或其他視覺效果工具中的查詢,因為它們可以參考預先計算的計量。

    下列範例顯示 Azure 受控 Prometheus 規則群組中所定義的錄製規則:

    "record": "job:request_duration_seconds:avg ",
    "expression": "avg(rate(request_duration_seconds_sum[5m])) by (job)",
    "labels": {  "workload_type": "job"
                            },
    "enabled": true
    

    若為更複雜的計量,請建立可彙總多個計量或執行更高階計算的錄製規則。 在下列範例中,instance:node_cpu_utilisation:rate5m 會計算 CPU 未閒置時的 CPU 使用率

    "record": "instance:node_cpu_utilisation:rate5m",
     "expression": "1 - avg without (cpu) (sum without (mode)(rate(node_cpu_seconds_total{job=\"node\", mode=~\"idle|iowait|steal\"}[5m])))",
    "labels": {
                                "workload_type": "job"
                            },
    "enabled": true
    

    請考慮下列最佳化錄製規則的最佳做法:

    最佳做法 說明
    識別大量計量。 著重於經常查詢且有高基數的計量。
    最佳化規則評估間隔。 若要在資料有效期限與計算負載之間取得平衡,請調整錄製規則的評估間隔。
    監視效能。 監視查詢效能,並視需要調整錄製規則。
    限制範圍以最佳化規則。 若要加快錄製規則的速度,請將它們限制在特定叢集的範圍內。 如需詳細資訊,請參閱將規則限制為特定叢集

    在查詢中使用篩選

    使用篩選來最佳化 Prometheus 查詢必須精簡查詢,只傳回必要的資料、減少處理的資料量並改善效能。 以下是精簡 Prometheus 查詢的一些常見技巧。

    最佳做法 說明
    使用標籤篩選。 標籤篩選有助於將資料縮小到您所需的範圍。 Prometheus 允許您使用 {label_name="label_value"} 語法進行篩選。 如果您在多個叢集上擁有大量計量,則限制時間序列的簡單方式就是使用 cluster 篩選。

    例如,不要查詢 container_cpu_usage_seconds_total,而是依叢集篩選 container_cpu_usage_seconds_total{cluster="cluster1"}
    套用時間範圍選取器。 使用特定時間範圍可大幅減少查詢的資料量。

    例如,不要查詢過去七天的所有資料點 http_requests_total{job="myapp"},而是使用 http_requests_total{job="myapp"}[1h] 查詢最後一小時的資料點。
    使用彙總與分組。 彙總函式可用來摘要資料,比處理原始資料點更有效率。 彙總資料時,請使用 by 依特定標籤分組,或使用 without 來排除特定標籤。

    例如,按作業分組的總和請求:sum(rate(http_requests_total[5m])) by (job)
    在查詢中及早篩選。 若要從一開始就限制資料,請盡早在查詢中套用篩選。 例如,與其使用 sum(rate(http_requests_total[5m])) by (job),不如先篩選,然後彙總:sum(rate(http_requests_total{job="myapp"}[5m])) by (job)
    盡可能不要使用 regex。 Regex 篩選功能很強大,但計算成本也很高。 請盡可能使用完全相符。 例如,不使用 http_requests_total{job=~"myapp.*"},而是使用 http_requests_total{job="myapp"}
    對歷程記錄資料使用 offset。 如果您要比較目前的資料與歷程記錄資料,請使用 offset 修飾元。

    例如,若要比較目前的要求與 24 小時前的要求,請使用 rate(http_requests_total[5m]) - rate(http_requests_total[5m] offset 24h)
    限制圖表中的資料點數目。 建立圖表時,請限制資料點數目,以改善呈現效能。 使用步驟參數來控制解析度。

    例如,在 Grafana 中:設定較高的步驟值以減少資料點數目:http_requests_total{job="myapp"}[1h:10s]

    平行查詢

    在 Prometheus 中執行大量平行查詢可能會造成效能瓶頸,而且會影響 Prometheus 伺服器的穩定性。 若要有效率地處理大量平行查詢,請遵循下列最佳做法:

    最佳做法 說明
    分散查詢負載。 將查詢分散到不同的時間間隔或 Prometheus 執行個體,藉此分散查詢負載。
    交錯查詢。 排程查詢以不同的間隔執行,避免產生同時查詢執行尖峰。

    如果您在執行許多平行查詢時仍有問題,請建立支援票證以要求增加查詢限制。

    警示和錄製規則

    最佳化高延展性的警示和錄製規則

    Prometheus 警示和錄製規則可以定義為 Prometheus 規則群組。 一個規則群組最多可以包含 20 個警示或錄製規則。 為每個工作區建立最多 500 個規則群組,以容納所需的警示/規則數目。 若要提高此限制,請開啟支援票證

    定義錄製規則時,請考慮評估間隔,以最佳化每個規則的時間序列數目和規則評估的效能。 評估間隔可以介於 1 分鐘到 24 小時之間。 預設為 1 分鐘。

    使用「資源健康狀態」來檢視錄製規則狀態的查詢

    設定「資源健康狀態」,以在入口網站中檢視 Prometheus 規則群組的健康情況。 「資源健康狀態」可讓您偵測錄製規則中的問題,例如不正確的設定或查詢節流問題。 如需設定資源健康狀態的詳細資訊,請參閱 檢視 Prometheus 規則群組的資源健康狀態